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
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
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
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
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