summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorThe Magician <magic-modules@google.com>2019-03-15 11:11:17 -0700
committeransibot <ansibot@users.noreply.github.com>2019-03-15 14:11:17 -0400
commitea780b7e1822572a9c83136842f4ec7376964b70 (patch)
treebea1b46f8effc4351108fe3d2f619e1dd6072dd9 /lib
parent85138a78a85430dd947cdc17c6e7ba521c5b3660 (diff)
downloadansible-ea780b7e1822572a9c83136842f4ec7376964b70.tar.gz
New Module: gcp_iam_role_facts (#53877)
Diffstat (limited to 'lib')
-rw-r--r--lib/ansible/module_utils/gcp_utils.py24
-rw-r--r--lib/ansible/modules/cloud/google/gcp_iam_role_facts.py152
2 files changed, 176 insertions, 0 deletions
diff --git a/lib/ansible/module_utils/gcp_utils.py b/lib/ansible/module_utils/gcp_utils.py
index d5a5b184a3..d3dce29ee6 100644
--- a/lib/ansible/module_utils/gcp_utils.py
+++ b/lib/ansible/module_utils/gcp_utils.py
@@ -299,6 +299,8 @@ class GcpRequest(object):
diff = self._compare_lists(value1, value2)
elif isinstance(value2, dict):
diff = self._compare_dicts(value1, value2)
+ elif isinstance(value1, bool):
+ diff = self._compare_boolean(value1, value2)
# Always use to_text values to avoid unicode issues.
elif to_text(value1) != to_text(value2):
diff = value1
@@ -308,3 +310,25 @@ class GcpRequest(object):
pass
return diff
+
+ def _compare_boolean(self, value1, value2):
+ try:
+ # Both True
+ if value1 and isinstance(value2, bool) and value2:
+ return None
+ # Value1 True, value2 'true'
+ elif value1 and to_text(value2) == 'true':
+ return None
+ # Both False
+ elif not value1 and isinstance(value2, bool) and not value2:
+ return None
+ # Value1 False, value2 'false'
+ elif not value1 and to_text(value2) == 'false':
+ return None
+ else:
+ return value2
+
+ # to_text may throw UnicodeErrors.
+ # These errors shouldn't crash Ansible and should be hidden.
+ except UnicodeError:
+ return None
diff --git a/lib/ansible/modules/cloud/google/gcp_iam_role_facts.py b/lib/ansible/modules/cloud/google/gcp_iam_role_facts.py
new file mode 100644
index 0000000000..9e24ebd65d
--- /dev/null
+++ b/lib/ansible/modules/cloud/google/gcp_iam_role_facts.py
@@ -0,0 +1,152 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2017 Google
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+# ----------------------------------------------------------------------------
+#
+# *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
+#
+# ----------------------------------------------------------------------------
+#
+# This file is automatically generated by Magic Modules and manual
+# changes will be clobbered when the file is regenerated.
+#
+# Please read more about how to change this file at
+# https://www.github.com/GoogleCloudPlatform/magic-modules
+#
+# ----------------------------------------------------------------------------
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+################################################################################
+# Documentation
+################################################################################
+
+ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
+
+DOCUMENTATION = '''
+---
+module: gcp_iam_role_facts
+description:
+- Gather facts for GCP Role
+short_description: Gather facts for GCP Role
+version_added: 2.8
+author: Google Inc. (@googlecloudplatform)
+requirements:
+- python >= 2.6
+- requests >= 2.18.4
+- google-auth >= 1.3.0
+options: {}
+extends_documentation_fragment: gcp
+'''
+
+EXAMPLES = '''
+- name: " a role facts"
+ gcp_iam_role_facts:
+ project: test_project
+ auth_kind: serviceaccount
+ service_account_file: "/tmp/auth.pem"
+ state: facts
+'''
+
+RETURN = '''
+items:
+ description: List of items
+ returned: always
+ type: complex
+ contains:
+ name:
+ description:
+ - The name of the role.
+ returned: success
+ type: str
+ title:
+ description:
+ - A human-readable title for the role. Typically this is limited to 100 UTF-8
+ bytes.
+ returned: success
+ type: str
+ description:
+ description:
+ - Human-readable description for the role.
+ returned: success
+ type: str
+ includedPermissions:
+ description:
+ - Names of permissions this role grants when bound in an IAM policy.
+ returned: success
+ type: list
+ stage:
+ description:
+ - The current launch stage of the role.
+ returned: success
+ type: str
+ deleted:
+ description:
+ - The current deleted state of the role.
+ returned: success
+ type: bool
+'''
+
+################################################################################
+# Imports
+################################################################################
+from ansible.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
+import json
+
+################################################################################
+# Main
+################################################################################
+
+
+def main():
+ module = GcpModule(argument_spec=dict())
+
+ if not module.params['scopes']:
+ module.params['scopes'] = ['https://www.googleapis.com/auth/iam']
+
+ items = fetch_list(module, collection(module))
+ if items.get('roles'):
+ items = items.get('roles')
+ else:
+ items = []
+ return_value = {'items': items}
+ module.exit_json(**return_value)
+
+
+def collection(module):
+ return "https://iam.googleapis.com/v1/projects/{project}/roles".format(**module.params)
+
+
+def fetch_list(module, link):
+ auth = GcpSession(module, 'iam')
+ response = auth.get(link)
+ return return_if_object(module, response)
+
+
+def return_if_object(module, response):
+ # If not found, return nothing.
+ if response.status_code == 404:
+ return None
+
+ # If no content, return nothing.
+ if response.status_code == 204:
+ return None
+
+ try:
+ module.raise_for_status(response)
+ result = response.json()
+ except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst:
+ module.fail_json(msg="Invalid JSON response with error: %s" % inst)
+
+ if navigate_hash(result, ['error', 'errors']):
+ module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
+
+ return result
+
+
+if __name__ == "__main__":
+ main()