numa_properties["hw:cpu_policy"] = "isolated"
for interface in numa.get("interfaces",() ):
if interface["dedicated"]=="yes":
- raise vimconn.HTTP_Service_Unavailable("Passthrough interfaces are not supported for the openstack connector")
+ raise vimconn.vimconnException("Passthrough interfaces are not supported for the openstack connector", http_code=vimconn.HTTP_Service_Unavailable)
#TODO, add the key 'pci_passthrough:alias"="<label at config>:<number ifaces>"' when a way to connect it is available
#create flavor
except (ksExceptions.ClientException, nvExceptions.ClientException, gl1Exceptions.CommunicationError) as e:
self._format_exception(e)
- def new_vminstance(self,name,description,start,image_id,flavor_id,net_list):
+ def new_vminstance(self,name,description,start,image_id,flavor_id,net_list,cloud_config=None):
'''Adds a VM instance to VIM
Params:
start: indicates if VM must start or boot in pause mode. Ignored
'''
self.logger.debug("Creating VM image '%s' flavor '%s' nics='%s'",image_id, flavor_id,str(net_list))
try:
- metadata=[]
+ metadata={}
net_list_vim=[]
self._reload_connection()
metadata_vpci={} #For a specific neutron plugin
net_list_vim.append({"port-id": new_port["port"]["id"]})
if metadata_vpci:
metadata = {"pci_assignement": json.dumps(metadata_vpci)}
+ if len(metadata["pci_assignement"]) >255:
+ #limit the metadata size
+ #metadata["pci_assignement"] = metadata["pci_assignement"][0:255]
+ self.logger.warn("Metadata deleted since it exceeds the expected length (255) ")
+ metadata = {}
self.logger.debug("name '%s' image_id '%s'flavor_id '%s' net_list_vim '%s' description '%s' metadata %s",
name, image_id, flavor_id, str(net_list_vim), description, str(metadata))
security_groups = self.config.get('security_groups')
if type(security_groups) is str:
security_groups = ( security_groups, )
+ if isinstance(cloud_config, dict):
+ userdata="#cloud-config\nusers:\n"
+ #default user
+ if "key-pairs" in cloud_config:
+ userdata += " - default:\n ssh-authorized-keys:\n"
+ for key in cloud_config["key-pairs"]:
+ userdata += " - '{key}'\n".format(key=key)
+ for user in cloud_config.get("users",[]):
+ userdata += " - name: {name}\n sudo: ALL=(ALL) NOPASSWD:ALL\n".format(name=user["name"])
+ if "user-info" in user:
+ userdata += " gecos: {}'\n".format(user["user-info"])
+ if user.get("key-pairs"):
+ userdata += " ssh-authorized-keys:\n"
+ for key in user["key-pairs"]:
+ userdata += " - '{key}'\n".format(key=key)
+ self.logger.debug("userdata: %s", userdata)
+ elif isinstance(cloud_config, str):
+ userdata = cloud_config
+ else:
+ userdata=None
+
server = self.nova.servers.create(name, image_id, flavor_id, nics=net_list_vim, meta=metadata,
security_groups = security_groups,
availability_zone = self.config.get('availability_zone'),
key_name = self.config.get('keypair'),
+ userdata=userdata
) #, description=description)