diff --git a/lib/ansible/module_utils/gcp_utils.py b/lib/ansible/module_utils/gcp_utils.py index 35800386616468..c29e9339222f4c 100644 --- a/lib/ansible/module_utils/gcp_utils.py +++ b/lib/ansible/module_utils/gcp_utils.py @@ -158,6 +158,9 @@ def _credentials(self): elif cred_type == 'serviceaccount' and self.module.params.get('service_account_file'): path = os.path.realpath(os.path.expanduser(self.module.params['service_account_file'])) return service_account.Credentials.from_service_account_file(path).with_scopes(self.module.params['scopes']) + elif cred_type == 'serviceaccount' and self.module.params.get('service_account_contents'): + cred = json.loads(self.module.params.get('service_account_contents')) + return service_account.Credentials.from_service_account_info(cred).with_scopes(self.module.params['scopes']) elif cred_type == 'machineaccount': return google.auth.compute_engine.Credentials( self.module.params['service_account_email']) diff --git a/lib/ansible/plugins/doc_fragments/gcp.py b/lib/ansible/plugins/doc_fragments/gcp.py index 110d2795958379..84cf9e24483555 100644 --- a/lib/ansible/plugins/doc_fragments/gcp.py +++ b/lib/ansible/plugins/doc_fragments/gcp.py @@ -27,7 +27,11 @@ class ModuleDocFragment(object): service_account_file: description: - The path of a Service Account JSON file if serviceaccount is selected as type. - type: path + service_account_contents: + description: + - A string representing the contents of a Service Account JSON file. + - This should not be passed in as a dictionary, but a string has + the exact contents of a service account json file (valid JSON). service_account_email: description: - An optional service account email address if machineaccount is selected @@ -38,8 +42,10 @@ class ModuleDocFragment(object): - Array of scopes to be used. type: list notes: - - For authentication, you can set service_account_file using the - C(GCP_SERVICE_ACCOUNT_FILE) env variable. + - for authentication, you can set service_account_file using the + c(gcp_service_account_file) env variable. + - for authentication, you can set service_account_contents using the + c(GCP_SERVICE_ACCOUNT_CONTENTS) env variable. - For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL) env variable. - For authentication, you can set service_account_contents using the