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
def create_virtual_datacenter(self, datacenter, enterprise, type, name, netname, netaddress, netmask, netgateway): """ Creates a new virtual datacenter """ log.info("Creating virtual datacenter %s of type %s..." % (name, type)) network = PrivateNetwork.builder(self.__context) \ .name(netname) \ .address(netaddress) \ .mask(netmask) \ .gateway(netgateway) \ .build() vdc = VirtualDatacenter \ .builder(self.__context, datacenter, enterprise) \ .name(name) \ .hypervisorType(type) \ .network(network) \ .build() vdc.save() return vdc