X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fvimconn_aws.py;h=5ee75e4e4b3184e6747f69db32a8320ce639fab3;hb=refs%2Fchanges%2F81%2F5481%2F5;hp=22d041241cc21620c3f8a8b23e91c84a4275cd5f;hpb=59cc65820ddbbb2963fd483c6d194c0a7b076bec;p=osm%2FRO.git diff --git a/osm_ro/vimconn_aws.py b/osm_ro/vimconn_aws.py index 22d04124..5ee75e4e 100644 --- a/osm_ro/vimconn_aws.py +++ b/osm_ro/vimconn_aws.py @@ -44,7 +44,7 @@ except: class vimconnector(vimconn.vimconnector): def __init__(self, uuid, name, tenant_id, tenant_name, url, url_admin=None, user=None, passwd=None, log_level=None, - config={}): + config={}, persistent_info={}): """ Params: uuid - id asigned to this VIM name - name assigned to this VIM, can be used for logging tenant_id - ID to be used for tenant @@ -57,10 +57,15 @@ class vimconnector(vimconn.vimconnector): region_name - name of region to deploy the instances vpc_cidr_block - default CIDR block for VPC security_groups - default security group to specify this instance + persistent_info - dict where the class can store information that will be available among class + destroy/creation cycles. This info is unique per VIM/credential. At first call it will contain an + empty dict. Useful to store login/tokens information for speed up communication """ vimconn.vimconnector.__init__(self, uuid, name, tenant_id, tenant_name, url, url_admin, user, passwd, log_level, - config) + config, persistent_info) + + self.persistent_info = persistent_info self.a_creds = {} if user: self.a_creds['aws_access_key_id'] = user @@ -112,7 +117,7 @@ class vimconnector(vimconn.vimconnector): except IOError as e: raise vimconn.vimconnException("Error reading file '{}': {}".format(flavor_data[1:], e)) elif isinstance(flavor_data, dict): - self.flavor_data = flavor_data + self.flavor_info = flavor_data self.logger = logging.getLogger('openmano.vim.aws') if log_level: @@ -346,12 +351,12 @@ class vimconnector(vimconn.vimconnector): if filter_dict != {}: if 'tenant_id' in filter_dict: tfilters['vpcId'] = filter_dict['tenant_id'] - subnets = self.conn_vpc.get_all_subnets(subnet_ids=filter_dict.get('id', None), filters=tfilters) + subnets = self.conn_vpc.get_all_subnets(subnet_ids=filter_dict.get('name', None), filters=tfilters) net_list = [] for net in subnets: net_list.append( {'id': str(net.id), 'name': str(net.id), 'status': str(net.state), 'vpc_id': str(net.vpc_id), - 'cidr_block': str(net.cidr_block)}) + 'cidr_block': str(net.cidr_block), 'type': 'bridge'}) return net_list except Exception as e: self.format_vimconn_exception(e) @@ -466,17 +471,17 @@ class vimconnector(vimconn.vimconnector): try: flavor = None for key, values in self.flavor_info.iteritems(): - if (values["memory"], values["cores"], values["disk"]) == ( - flavor_dict["ram"], flavor_dict["cpus"], flavor_dict["disk"]): + if (values["ram"], values["cpus"], values["disk"]) == ( + flavor_dict["ram"], flavor_dict["vcpus"], flavor_dict["disk"]): flavor = (key, values) break - elif (values["memory"], values["cores"], values["disk"]) >= ( - flavor_dict["ram"], flavor_dict["cpus"], flavor_dict["disk"]): + elif (values["ram"], values["cpus"], values["disk"]) >= ( + flavor_dict["ram"], flavor_dict["vcpus"], flavor_dict["disk"]): if not flavor: flavor = (key, values) else: - if (flavor[1]["memory"], flavor[1]["cores"], flavor[1]["disk"]) >= ( - values["memory"], values["cores"], values["disk"]): + if (flavor[1]["ram"], flavor[1]["cpus"], flavor[1]["disk"]) >= ( + values["ram"], values["cpus"], values["disk"]): flavor = (key, values) if flavor: return flavor[0] @@ -585,7 +590,7 @@ class vimconnector(vimconn.vimconnector): self.format_vimconn_exception(e) def new_vminstance(self, name, description, start, image_id, flavor_id, net_list, cloud_config=None, - disk_list=None): + disk_list=None, availability_zone_index=None, availability_zone_list=None): """Create a new VM/instance in AWS Params: name decription @@ -636,52 +641,7 @@ class vimconnector(vimconn.vimconnector): try: self._reload_connection() instance = None - userdata = None - if isinstance(cloud_config, dict): - if cloud_config.get("user-data"): - userdata = cloud_config["user-data"] - if cloud_config.get("config-files") or cloud_config.get("users") or cloud_config.get("key-pairs"): - if userdata: - raise vimconn.vimconnConflictException( - "Cloud-config cannot contain both 'userdata' and 'config-files'/'users'/'key-pairs'") - userdata_dict = {} - # default user - if cloud_config.get("key-pairs"): - userdata_dict["ssh-authorized-keys"] = cloud_config["key-pairs"] - userdata_dict["users"] = [{"default": None, "ssh-authorized-keys": cloud_config["key-pairs"]}] - if cloud_config.get("users"): - if "users" not in userdata_dict: - userdata_dict["users"] = ["default"] - for user in cloud_config["users"]: - user_info = { - "name": user["name"], - "sudo": "ALL = (ALL)NOPASSWD:ALL" - } - if "user-info" in user: - user_info["gecos"] = user["user-info"] - if user.get("key-pairs"): - user_info["ssh-authorized-keys"] = user["key-pairs"] - userdata_dict["users"].append(user_info) - - if cloud_config.get("config-files"): - userdata_dict["write_files"] = [] - for file in cloud_config["config-files"]: - file_info = { - "path": file["dest"], - "content": file["content"] - } - if file.get("encoding"): - file_info["encoding"] = file["encoding"] - if file.get("permissions"): - file_info["permissions"] = file["permissions"] - if file.get("owner"): - file_info["owner"] = file["owner"] - userdata_dict["write_files"].append(file_info) - userdata = "#cloud-config\n" - userdata += yaml.safe_dump(userdata_dict, indent=4, default_flow_style=False) - self.logger.debug("userdata: %s", userdata) - elif isinstance(cloud_config, str): - userdata = cloud_config + _, userdata = self._create_user_data(cloud_config) if not net_list: reservation = self.conn.run_instances( @@ -791,7 +751,10 @@ class vimconnector(vimconn.vimconnector): interface_dict['vim_interface_id'] = interface.id interface_dict['vim_net_id'] = interface.subnet_id interface_dict['mac_address'] = interface.mac_address - interface_dict['ip_address'] = interface.private_ip_address + if hasattr(interface, 'publicIp') and interface.publicIp != None: + interface_dict['ip_address'] = interface.publicIp + ";" + interface.private_ip_address + else: + interface_dict['ip_address'] = interface.private_ip_address instance_dict['interfaces'].append(interface_dict) except Exception as e: self.logger.error("Exception getting vm status: %s", str(e), exc_info=True)