Add HPA cpupining capabilities for titanium cloud 49/38349/1
authorYun Huang <yun.huang@windriver.com>
Mon, 26 Mar 2018 04:31:04 +0000 (12:31 +0800)
committerYun Huang <yun.huang@windriver.com>
Mon, 26 Mar 2018 04:31:04 +0000 (12:31 +0800)
Change-Id: Iee24fb0058f824aa39d44c5f961497ca45ba7b6e
Issue-ID: MULTICLOUD-200
Signed-off-by: Yun Huang <yun.huang@windriver.com>
windriver/titanium_cloud/registration/tests/test_registration.py
windriver/titanium_cloud/registration/views/registration.py

index 3dcbd54..3e8c561 100644 (file)
@@ -48,7 +48,9 @@ MOCK_GET_FLAVOR_RESPONSE = {
 MOCK_GET_FLAVOR_EXTRA_SPECS_RESPONSE = {
    "extra_specs" : {
       "aggregate_instance_extra_specs:storage" : "local_image",
-      "capabilities:cpu_info:model" : "Haswell"
+      "capabilities:cpu_info:model" : "Haswell",
+      "hw:cpu_policy" : "dedicated",
+      "hw:cpu_thread_policy" : "prefer"
    }
 }
 
index d735336..8a21cb5 100644 (file)
@@ -40,7 +40,7 @@ class Registry(newton_registration.Registry):
             cloud_owner, cloud_region_id = extsys.decode_vim_id(vimid)
             for flavor in self._get_list_resources(
                     "/flavors/detail", "compute", session, viminfo, vimid,
-                    "flavors"): 
+                    "flavors"):
                 flavor_info = {
                     'flavor-id': flavor['id'],
                     'flavor-name': flavor['name'],
@@ -88,13 +88,19 @@ class Registry(newton_registration.Registry):
             self._logger.debug("basic_capabilities_info: %s" % caps_dict)
             hpa_caps.append(caps_dict)
 
+        # cpupining capabilities
+        caps_dict = self._get_cpupining_capabilities(extra_specs)
+        if len(caps_dict) > 0:
+            self._logger.debug("cpupining_capabilities_info: %s" % caps_dict)
+            hpa_caps.append(caps_dict)
+
         return hpa_caps
 
     def _get_hpa_basic_capabilities(self, flavor):
         basic_capability = {}
         feature_uuid = uuid.uuid4()
-        basic_capability['hpaCapabilityID'] = str(feature_uuid)
 
+        basic_capability['hpaCapabilityID'] = str(feature_uuid)
         basic_capability['hpaFeature'] = 'basicCapabilities'
         basic_capability['hardwareArchitecture'] = 'generic'
         basic_capability['version'] = 'v1'
@@ -107,3 +113,23 @@ class Registry(newton_registration.Registry):
 
         return basic_capability
 
+    def _get_cpupining_capabilities(self, extra_specs):
+        cpupining_capability = {}
+        feature_uuid = uuid.uuid4()
+
+        if extra_specs.has_key('hw:cpu_policy') or extra_specs.has_key('hw:cpu_thread_policy'):
+            cpupining_capability['hpaCapabilityID'] = str(feature_uuid)
+            cpupining_capability['hpaFeature'] = 'cpuPining'
+            cpupining_capability['hardwareArchitecture'] = 'generic'
+            cpupining_capability['version'] = 'v1'
+
+            cpupining_capability['attributes'] = []
+            if extra_specs.has_key('hw:cpu_thread_policy'):
+                cpupining_capability['attributes'].append({'hpa-attribute-key': 'logicalCpuThreadPinningPolicy',
+                                                           'hpa-attribute-value':{'value': str(extra_specs['hw:cpu_thread_policy'])}})
+            if extra_specs.has_key('hw:cpu_policy'):
+                cpupining_capability['attributes'].append({'hpa-attribute-key':'logicalCpuPinningPolicy',
+                                                           'hpa-attribute-value': {'value':str(extra_specs['hw:cpu_policy'])}})
+
+        return cpupining_capability
+