From 512b72d746d8ff422fa502288d9276fc5f90493a Mon Sep 17 00:00:00 2001
From: sguazt <marco.guazzone@gmail.com>
Date: Sat, 16 Jan 2021 18:15:19 +0100
Subject: [PATCH] Removed use of 'common.utility.make_dict_proxy_wrapper'
 (previously used to make an OpenStack instance look like a dictionary) as it
 is no longer needed: an instance of OpenStack's
 openstack.compute.v2.server.Server class can now be used as dictionary as its
 parent class (i.e., the openstack.resource.Resource class) implements the
 mapping protocol.

---
 easycloud/common/utility.py                         | 5 ++---
 easycloud/modules/chameleon_openstacksdk/manager.py | 5 +----
 easycloud/modules/openstack_openstacksdk/manager.py | 3 +--
 3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/easycloud/common/utility.py b/easycloud/common/utility.py
index 9f84b14..ca4b8d9 100644
--- a/easycloud/common/utility.py
+++ b/easycloud/common/utility.py
@@ -13,9 +13,8 @@ def make_dict_proxy_wrapper(obj):
     wrapper object in the same way as the wrapped object.
     For instance, if ``obj`` has a method ``m``, we can still invoke such
     method on the related wrapper object.
-
-    This is especially useful to enable the OpenStackInstance::extra
-    property to use the raw OpenStack instance as a dictionary.
+    Likewise, if ``obj'' has a property ``a``, we can retrieve its value
+    either by ``wrapped_obj.a`` or by ``wrapped_obj['a']``.
     """
     class Wrapper(obj.__class__):
         def __getitem__(self, key):
diff --git a/easycloud/modules/chameleon_openstacksdk/manager.py b/easycloud/modules/chameleon_openstacksdk/manager.py
index 093f003..5253a5c 100644
--- a/easycloud/modules/chameleon_openstacksdk/manager.py
+++ b/easycloud/modules/chameleon_openstacksdk/manager.py
@@ -3,7 +3,6 @@ EasyCloud Chameleon Cloud Manager.
 """
 
 import datetime
-from easycloud.common import utility
 from easycloud.core.actionbinder import bind_action
 from easycloud.core.compute import Instance, InstanceStatus
 from easycloud.core.metamanager import MetaManager
@@ -49,9 +48,7 @@ class OpenStackInstance(Instance):
         #       openstack.compute.v2.server.Server(OS-EXT-STS:task_state=None, addresses={'CH-820879-net': [{'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:c5:d0:e6', 'version': 4, 'addr': '10.185.189.137', 'OS-EXT-IPS:type': 'fixed'}]}, links=[{'href': 'https://kvm.tacc.chameleoncloud.org:8774/v2.1/servers/a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3', 'rel': 'self'}, {'href': 'https://kvm.tacc.chameleoncloud.org:8774/servers/a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3', 'rel': 'bookmark'}], image={'id': '206874ef-3d93-43c6-bc37-7335478a27a7', 'links': [{'href': 'https://kvm.tacc.chameleoncloud.org:8774/images/206874ef-3d93-43c6-bc37-7335478a27a7', 'rel': 'bookmark'}]}, OS-EXT-SRV-ATTR:user_data=None, OS-EXT-STS:vm_state=stopped, OS-EXT-SRV-ATTR:instance_name=instance-00001a28, OS-EXT-SRV-ATTR:root_device_name=/dev/vda, OS-SRV-USG:launched_at=2020-04-20T12:02:29.000000, flavor={'ephemeral': 0, 'ram': 512, 'original_name': 'm1.tiny', 'vcpus': 1, '_extraspecs': {}, 'swap': 0, 'disk': 1}, id=a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3, security_groups=[{'name': 'default'}], description=easycloud-047, user_id=520b8f26b6214b3d9b0fab8878e67e44, OS-EXT-SRV-ATTR:hostname=easycloud-047, OS-DCF:diskConfig=MANUAL, accessIPv4=, accessIPv6=, OS-EXT-SRV-ATTR:reservation_id=r-7wfc3f6v, OS-EXT-STS:power_state=4, OS-EXT-AZ:availability_zone=nova, config_drive=, status=SHUTOFF, OS-EXT-SRV-ATTR:ramdisk_id=, updated=2020-09-10T09:30:49Z, hostId=aa36609e24cc62db7565ad56156451578e6856b8b3e7c8e4cf8fa58f, OS-EXT-SRV-ATTR:host=c07-34, OS-SRV-USG:terminated_at=None, tags=[], key_name=sguazt _at_ wildcat, OS-EXT-SRV-ATTR:kernel_id=, locked=False, OS-EXT-SRV-ATTR:hypervisor_hostname=c07-34, name=easycloud-047, OS-EXT-SRV-ATTR:launch_index=0, created=2020-04-20T12:02:17Z, tenant_id=2c18b5d8ebfa4a08b603c151d967a04d, os-extended-volumes:volumes_attached=[], trusted_image_certificates=None, metadata={}, location=Munch({'cloud': 'chameleon', 'region_name': 'KVM@TACC', 'zone': 'nova', 'project': Munch({'id': '2c18b5d8ebfa4a08b603c151d967a04d', 'name': 'CH-820879', 'domain_id': 'default', 'domain_name': None})}))
 
         self._os_conn = os_conn
-        # NOTE: the wrapper is needed to let the ``extra`` property work as
-        #       expected (i.e., to access members of the raw OpenStack instance in a dictionary-like way)
-        self._os_inst = utility.make_dict_proxy_wrapper(os_instance)
+        self._os_inst = os_instance
         self._status = self._NODE_STATUS_MAP.get(os_instance.status, InstanceStatus.UNKNOWN)
         self._private_ips = []
         self._public_ips = [] #TODO
diff --git a/easycloud/modules/openstack_openstacksdk/manager.py b/easycloud/modules/openstack_openstacksdk/manager.py
index 46df16c..35dce83 100644
--- a/easycloud/modules/openstack_openstacksdk/manager.py
+++ b/easycloud/modules/openstack_openstacksdk/manager.py
@@ -3,7 +3,6 @@ EasyCloud OpenStack Manager
 """
 
 import datetime
-from easycloud.common import utility
 from easycloud.core.actionbinder import bind_action
 from easycloud.core.compute import Instance, InstanceStatus
 from easycloud.core.metamanager import MetaManager
@@ -48,7 +47,7 @@ class OpenStackInstance(Instance):
         # Example: --- Server: openstack.compute.v2.server.Server(OS-EXT-STS:task_state=None, addresses={'CH-820879-net': [{'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:c5:d0:e6', 'version': 4, 'addr': '10.185.189.137', 'OS-EXT-IPS:type': 'fixed'}]}, links=[{'href': 'https://kvm.tacc.chameleoncloud.org:8774/v2.1/servers/a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3', 'rel': 'self'}, {'href': 'https://kvm.tacc.chameleoncloud.org:8774/servers/a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3', 'rel': 'bookmark'}], image={'id': '206874ef-3d93-43c6-bc37-7335478a27a7', 'links': [{'href': 'https://kvm.tacc.chameleoncloud.org:8774/images/206874ef-3d93-43c6-bc37-7335478a27a7', 'rel': 'bookmark'}]}, OS-EXT-SRV-ATTR:user_data=None, OS-EXT-STS:vm_state=stopped, OS-EXT-SRV-ATTR:instance_name=instance-00001a28, OS-EXT-SRV-ATTR:root_device_name=/dev/vda, OS-SRV-USG:launched_at=2020-04-20T12:02:29.000000, flavor={'ephemeral': 0, 'ram': 512, 'original_name': 'm1.tiny', 'vcpus': 1, 'extra_specs': {}, 'swap': 0, 'disk': 1}, id=a0a9cdbb-a8f6-42fc-af4b-0e6c68d70ec3, security_groups=[{'name': 'default'}], description=easycloud-047, user_id=520b8f26b6214b3d9b0fab8878e67e44, OS-EXT-SRV-ATTR:hostname=easycloud-047, OS-DCF:diskConfig=MANUAL, accessIPv4=, accessIPv6=, OS-EXT-SRV-ATTR:reservation_id=r-7wfc3f6v, OS-EXT-STS:power_state=4, OS-EXT-AZ:availability_zone=nova, config_drive=, status=SHUTOFF, OS-EXT-SRV-ATTR:ramdisk_id=, updated=2020-09-10T09:30:49Z, hostId=aa36609e24cc62db7565ad56156451578e6856b8b3e7c8e4cf8fa58f, OS-EXT-SRV-ATTR:host=c07-34, OS-SRV-USG:terminated_at=None, tags=[], key_name=sguazt _at_ wildcat, OS-EXT-SRV-ATTR:kernel_id=, locked=False, OS-EXT-SRV-ATTR:hypervisor_hostname=c07-34, name=easycloud-047, OS-EXT-SRV-ATTR:launch_index=0, created=2020-04-20T12:02:17Z, tenant_id=2c18b5d8ebfa4a08b603c151d967a04d, os-extended-volumes:volumes_attached=[], trusted_image_certificates=None, metadata={}, location=Munch({'cloud': 'chameleon', 'region_name': 'KVM@TACC', 'zone': 'nova', 'project': Munch({'id': '2c18b5d8ebfa4a08b603c151d967a04d', 'name': 'CH-820879', 'domain_id': 'default', 'domain_name': None})}))
 
         self._os_conn = os_conn
-        self._os_inst = utility.make_dict_proxy_wrapper(os_instance)
+        self._os_inst = os_instance
         self._status = self._NODE_STATUS_MAP.get(os_instance.status, InstanceStatus.UNKNOWN)
         self._private_ips = []
         self._public_ips = []
-- 
GitLab