X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=RO-VIM-gcp%2Fosm_rovim_gcp%2Fvimconn_gcp.py;h=0109bf12ba9232cf189ad2c41619d0cb975fdd6f;hb=aca8cb5e63ebd11cc69373323d8df62b5d8cbfe2;hp=7e7f606d25a351b785d60dcb1be0e0d6a6263118;hpb=21c55d66c67cce097adab2f237356388b1a16077;p=osm%2FRO.git diff --git a/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py b/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py index 7e7f606d..0109bf12 100644 --- a/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py +++ b/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py @@ -183,7 +183,9 @@ class vimconnector(vimconn.VimConnector): try: # Set to client created - self.conn_compute = googleapiclient.discovery.build("compute", "v1") + self.conn_compute = googleapiclient.discovery.build( + "compute", "v1", credentials=self.credentials + ) except Exception as e: self._format_vimconn_exception(e) @@ -902,11 +904,14 @@ class vimconnector(vimconn.VimConnector): if not net.get("name"): continue else: - net_iface[ - "subnetwork" - ] = "regions/%s/subnetworks/" % self.region + net.get("name") + net_iface["subnetwork"] = ( + "regions/%s/subnetworks/" % self.region + net.get("name") + ) else: net_iface["subnetwork"] = net.get("net_id") + if net.get("ip_address"): + net_iface["networkIP"] = net.get("ip_address") + # In order to get an external IP address, the key "accessConfigs" must be used # in the interace. It has to be of type "ONE_TO_ONE_NAT" and name "External NAT" if net.get("floating_ip", False) or ( @@ -1095,6 +1100,20 @@ class vimconnector(vimconn.VimConnector): ) ) + def _get_id_from_image(self, image): + """ + Obtains image_id from the google cloud complete image identifier: image_id will be the last five items + """ + self.logger.debug(f"_get_id_from_image begin: image {image}") + try: + image_id = "/".join(image.split("/")[-5:]) + self.logger.debug(f"_get_id_from_image Return: image_id {image_id}") + return image_id + except Exception as e: + raise vimconn.VimConnException( + f"Unable to get image_id from image '{image}' Error: '{e}'" + ) + def refresh_nets_status(self, net_list): """Get the status of the networks Params: the list of network identifiers @@ -1189,7 +1208,43 @@ class vimconnector(vimconn.VimConnector): .execute() ) - out_vm["vim_info"] = str(vm["name"]) + disk_source = vm["disks"][0]["source"] + self.logger.debug("getting disk information") + disk = ( + self.conn_compute.disks() + .get( + project=self.project, + zone=self.zone, + disk=self._get_resource_name_from_resource_id(disk_source), + ) + .execute() + ) + image = {} + if disk is not None: + self.logger.debug(f"disk: {disk}") + image = { + "id": self._get_id_from_image(disk["sourceImage"]), + "source": disk_source, + } + + vim_info = { + "id": vm_id, + "name": vm["name"], + "creationTimestamp": vm["creationTimestamp"], + "lastStartTimestamp": vm["lastStartTimestamp"], + "vm_id": vm["id"], + "kind": vm["kind"], + "cpuPlatform": vm["cpuPlatform"], + "zone": self._get_resource_name_from_resource_id(vm["zone"]), + "machineType": vm["machineType"], + "flavor": { + "id": self._get_resource_name_from_resource_id( + vm["machineType"] + ) + }, + "image": image, + } + out_vm["vim_info"] = str(vim_info) out_vm["status"] = self.provision_state2osm.get(vm["status"], "OTHER") # In Google Cloud the there is no difference between provision or power status, @@ -1229,6 +1284,7 @@ class vimconnector(vimconn.VimConnector): for network_interface in interfaces: interface_dict = {} interface_dict["vim_interface_id"] = network_interface["name"] + interface_dict["vim_net_id"] = network_interface["subnetwork"] ips = [] ips.append(network_interface["networkIP"])