2
0
Эх сурвалжийг харах

Use from_json_keyfile_dict when credentials_dict is available.

baizhang 10 жил өмнө
parent
commit
f564235a7f

+ 11 - 3
cloudbridge/cloud/providers/gce/provider.py

@@ -31,6 +31,14 @@ class GCECloudProvider(BaseCloudProvider):
             'gce_project_name', os.environ.get('GCE_PROJECT_NAME'))
             'gce_project_name', os.environ.get('GCE_PROJECT_NAME'))
         self.credentials_file = self._get_config_value(
         self.credentials_file = self._get_config_value(
             'gce_service_creds_file', os.environ.get('GCE_SERVICE_CREDS_FILE'))
             'gce_service_creds_file', os.environ.get('GCE_SERVICE_CREDS_FILE'))
+        self.credentials_dict = self._get_config_value(
+            'gce_service_creds_dict', {})
+        # If 'gce_service_creds_dict' is not passed in from config and
+        # self.credentials_file is available, read and parse the json file to
+        # self.credentials_dict.
+        if self.credentials_file and not self.credentials_dict:
+            with open(self.credentials_file) as creds_file:
+                self.credentials_dict = json.load(creds_file)
         self.default_zone = self._get_config_value(
         self.default_zone = self._get_config_value(
             'gce_default_zone', os.environ.get('GCE_DEFAULT_ZONE'))
             'gce_default_zone', os.environ.get('GCE_DEFAULT_ZONE'))
 
 
@@ -71,9 +79,9 @@ class GCECloudProvider(BaseCloudProvider):
         return self._gce_compute
         return self._gce_compute
 
 
     def _connect_gce_compute(self):
     def _connect_gce_compute(self):
-        if self.credentials_file:
-            credentials = ServiceAccountCredentials.from_json_keyfile_name(
-                self.credentials_file)
+        if self.credentials_dict:
+            credentials = ServiceAccountCredentials.from_json_keyfile_dict(
+                self.credentials_dict)
         else:
         else:
             credentials = GoogleCredentials.get_application_default()
             credentials = GoogleCredentials.get_application_default()
         return discovery.build('compute', 'v1', credentials=credentials)
         return discovery.build('compute', 'v1', credentials=credentials)