Example #1
0
def find_compatible_virtual_datacenter(context, template):
    """ Find a virtual datacenter compatible with the given template. """
    template_type = template.getDiskFormatType()
    cloud = context.getCloudService()
    for type in HypervisorType.values():
        if type.isCompatible(template_type):
            vdc = cloud.findVirtualDatacenter(VirtualDatacenterPredicates.type(type))
            if vdc:
                return vdc
Example #2
0
def get_virtual_datacenter_for_template(context, template):
    """ Get a virtual datacenter where the given template can be deployed """
    datacenter = template.getDatacenter()
    api_context = context.getApiContext()
    vdcs = find_compatible_virtual_datacenters(context,
                                               template.getDiskFormatType(),
                                               datacenter)
    pattern = "Kahuna-%s-" + api_context.getIdentity()
    vdcs = filter(
        lambda vdc: vdc.getName() ==
        (pattern % vdc.getHypervisorType().name()), vdcs)

    if len(vdcs) == 0:
        log.debug("No default virtual datacenter was found. Creating it...")

        admin = context.getAdministrationService()
        enterprise = admin.getCurrentEnterprise()

        network = PrivateNetwork.builder(api_context) \
            .name("Kahuna-" + api_context.getIdentity()) \
            .gateway("192.168.1.1") \
            .address("192.168.1.0") \
            .mask(24) \
            .build()
        vdc = VirtualDatacenter.builder(api_context, datacenter, enterprise) \
            .network(network) \
            .build()

        for type in HypervisorType.values():
            if type.isCompatible(template.getDiskFormatType()):
                try:
                    log.debug(("Trying to create virtual "
                               "datacenter of type %s") % type.name())
                    vdc.setName(pattern % type.name())
                    vdc.setHypervisorType(type)
                    vdc.save()
                    return vdc
                except AbiquoException, ex:
                    # Just catch the error thrown when no hypervisors of
                    # the given type are available in the datacenter
                    if ex.hasError("VDC-1"):
                        # Check if we can create a VDC with other
                        # compatible type
                        continue
                    else:
                        raise ex
        return None
Example #3
0
def get_virtual_datacenter_for_template(context, template):
    """ Get a virtual datacenter where the given template can be deployed """
    datacenter = template.getDatacenter()
    api_context = context.getApiContext()
    vdcs = find_compatible_virtual_datacenters(context,
            template.getDiskFormatType(), datacenter)
    pattern = "Kahuna-%s-" + api_context.getIdentity()
    vdcs = filter(lambda vdc: vdc.getName() ==
            (pattern % vdc.getHypervisorType().name()), vdcs)

    if len(vdcs) == 0:
        log.debug("No default virtual datacenter was found. Creating it...")

        admin = context.getAdministrationService()
        enterprise = admin.getCurrentEnterprise()

        network = PrivateNetwork.builder(api_context) \
            .name("Kahuna-" + api_context.getIdentity()) \
            .gateway("192.168.1.1") \
            .address("192.168.1.0") \
            .mask(24) \
            .build()
        vdc = VirtualDatacenter.builder(api_context, datacenter, enterprise) \
            .network(network) \
            .build()

        for type in HypervisorType.values():
            if type.isCompatible(template.getDiskFormatType()):
                try:
                    log.debug(("Trying to create virtual "
                        "datacenter of type %s") % type.name())
                    vdc.setName(pattern % type.name())
                    vdc.setHypervisorType(type)
                    vdc.save()
                    return vdc
                except AbiquoException, ex:
                    # Just catch the error thrown when no hypervisors of
                    # the given type are available in the datacenter
                    if ex.hasError("VDC-1"):
                        # Check if we can create a VDC with other
                        # compatible type
                        continue
                    else:
                        raise ex
        return None
Example #4
0
                        raise ex
                rack = Rack.builder(api_context, dc).name('rack').build()
                rack.save()
                log.debug("New datacenter 'kahuna' created.")
            else:
                rack = dc.findRack(RackPredicates.name('rack'))
                if not rack:
                    rack = Rack.builder(api_context, dc).name('rack').build()
                    rack.save()
                log.debug("Datacenter 'kahuna' found")

            # discover machine
            if hypervisor:
                hypTypes = [HypervisorType.valueOf(hypervisor)]
            else:
                hypTypes = HypervisorType.values()

            machine = None
            for hyp in hypTypes:
                try:
                    log.debug("Trying hypervisor %s" % hyp.name())
                    machine = dc.discoverSingleMachine(host, hyp, user, psswd)
                    break
                except (AbiquoException, HttpResponseException), ex:
                    if ex.hasError("NC-3") or ex.hasError("RS-2"):
                        print ex.getMessage().replace("\n", "")
                        return
                    log.debug(ex.getMessage().replace("\n", ""))

            if not machine:
                print "Not machine found in %s" % host
Example #5
0
                        dc.delete()
                        return
                    else:
                        raise ex
                rack = Rack.builder(context,dc).name('rack').build()
                rack.save()
                log.debug("New datacenter 'kahuna' created.")
            else:
                rack = dc.findRack(RackPredicates.name('rack'))
                if not rack:
                    rack = Rack.builder(context,dc).name('rack').build()
                    rack.save()
                log.debug("Datacenter 'kahuna' found")
        
            # discover machine
            hypTypes = [HypervisorType.valueOf(hypervisor)] if hypervisor else HypervisorType.values()

            machine = None
            for hyp in hypTypes:
                try:
                    log.debug("Trying hypervisor %s" % hyp.name())
                    machine = dc.discoverSingleMachine(host, hyp, user, psswd)
                    break
                except (AbiquoException, HttpResponseException), ex:
                    if ex.hasError("NC-3") or ex.hasError("RS-2"):
                        print ex.getMessage().replace("\n","")
                        return
                    log.debug(ex.getMessage().replace("\n",""))

            if not machine:
                print "Not machine found in %s" % host
                        raise ex
                rack = Rack.builder(api_context, dc).name('rack').build()
                rack.save()
                log.debug("New datacenter 'kahuna' created.")
            else:
                rack = dc.findRack(RackPredicates.name('rack'))
                if not rack:
                    rack = Rack.builder(api_context, dc).name('rack').build()
                    rack.save()
                log.debug("Datacenter 'kahuna' found")

            # discover machine
            if hypervisor:
                hypTypes = [HypervisorType.valueOf(hypervisor)]
            else:
                hypTypes = HypervisorType.values()

            machine = None
            for hyp in hypTypes:
                try:
                    log.debug("Trying hypervisor %s" % hyp.name())
                    machine = dc.discoverSingleMachine(host, hyp, user, psswd)
                    break
                except (AbiquoException, HttpResponseException), ex:
                    if ex.hasError("NC-3") or ex.hasError("RS-2"):
                        print ex.getMessage().replace("\n", "")
                        return
                    log.debug(ex.getMessage().replace("\n", ""))

            if not machine:
                print "Not machine found in %s" % host