X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=vimconn_openstack.py;h=6e5f007752f7622d350db086ed6fe685a81376a3;hb=be41e22d64055e9ee71e3f4d6d7ca99225a679fb;hp=1c6227e77fa4c50fa08706febcd060558b4638ff;hpb=809a78061788fc197903303f89ceaf7ae1324599;p=osm%2FRO.git diff --git a/vimconn_openstack.py b/vimconn_openstack.py index 1c6227e7..6e5f0077 100644 --- a/vimconn_openstack.py +++ b/vimconn_openstack.py @@ -544,7 +544,7 @@ class vimconnector(vimconn.vimconnector): 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 @@ -563,7 +563,7 @@ class vimconnector(vimconn.vimconnector): ''' 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 @@ -602,6 +602,11 @@ class vimconnector(vimconn.vimconnector): 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)) @@ -609,10 +614,32 @@ class vimconnector(vimconn.vimconnector): 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)