Просмотр исходного кода

Single GCE Instance create operation

almahmoud 7 лет назад
Родитель
Сommit
a667bef569
2 измененных файлов с 22 добавлено и 41 удалено
  1. 0 38
      cloudbridge/cloud/providers/gce/resources.py
  2. 22 3
      cloudbridge/cloud/providers/gce/services.py

+ 0 - 38
cloudbridge/cloud/providers/gce/resources.py

@@ -1092,44 +1092,6 @@ class GCEInstance(BaseInstance):
                     return item.get("value").split(" ")[-1]
                     return item.get("value").split(" ")[-1]
         return None
         return None
 
 
-    @key_pair_id.setter
-    # pylint:disable=arguments-differ
-    def key_pair_id(self, value):
-        key_pair = value
-        if not isinstance(value, GCEKeyPair):
-            key_pair = self._provider.security.key_pairs.get(value)
-        if key_pair:
-            kp = key_pair._key_pair
-            kp_entry = {
-                "key": "ssh-keys",
-                # Format is not removed from public key portion
-                "value": "{}:{} {}".format(self._provider.vm_default_user_name,
-                                           kp.public_key,
-                                           kp.name)
-            }
-            items = self._gce_instance['metadata'].get('items', [])
-            items.append(kp_entry)
-            config = {
-                "items": items,
-                "fingerprint": self._gce_instance['metadata']['fingerprint']
-            }
-            try:
-                response = (self._provider
-                            .gce_compute
-                            .instances()
-                            .setMetadata(project=self._provider.project_name,
-                                         zone=self.zone_name,
-                                         instance=self.name,
-                                         body=config)
-                            .execute())
-                self._provider.wait_for_operation(response,
-                                                  zone=self.zone_name)
-            except Exception as e:
-                cb.log.warning('Exception while setting instance key pair: %s',
-                               e)
-                raise e
-            self.refresh()
-
     @property
     @property
     def inet_gateway(self):
     def inet_gateway(self):
         if self._inet_gateway:
         if self._inet_gateway:

+ 22 - 3
cloudbridge/cloud/providers/gce/services.py

@@ -451,6 +451,28 @@ class GCEInstanceService(BaseInstanceService):
             entry = {'key': 'startup-script', 'value': user_data}
             entry = {'key': 'startup-script', 'value': user_data}
             config['metadata'] = {'items': [entry]}
             config['metadata'] = {'items': [entry]}
 
 
+        if key_pair:
+            if not isinstance(key_pair, GCEKeyPair):
+                key_pair = self._provider.security.key_pairs.get(key_pair)
+            if key_pair:
+                kp = key_pair._key_pair
+                kp_entry = {
+                    "key": "ssh-keys",
+                    # Format is not removed from public key portion
+                    "value": "{}:{} {}".format(
+                        self.provider.vm_default_user_name,
+                        kp.public_key,
+                        kp.name)
+                    }
+                meta = config.get('metadata', {})
+                if meta:
+                    items = meta.get('items', [])
+                    items.append(kp_entry)
+                else:
+                    config['metadata'] = {'items': [kp_entry]}
+
+        config['labels'] = {'cblabel': label}
+
         operation = (self.provider
         operation = (self.provider
                          .gce_compute.instances()
                          .gce_compute.instances()
                          .insert(project=self.provider.project_name,
                          .insert(project=self.provider.project_name,
@@ -460,9 +482,6 @@ class GCEInstanceService(BaseInstanceService):
         instance_id = operation.get('targetLink')
         instance_id = operation.get('targetLink')
         self.provider.wait_for_operation(operation, zone=zone_name)
         self.provider.wait_for_operation(operation, zone=zone_name)
         cb_inst = self.get(instance_id)
         cb_inst = self.get(instance_id)
-        cb_inst.label = label
-        if key_pair:
-            cb_inst.key_pair_id = key_pair
         return cb_inst
         return cb_inst
 
 
     def get(self, instance_id):
     def get(self, instance_id):