folder support on gcp_compute (#66511)
* folder support on gcp_compute * fixed issues associated with projects with no vms * linter fix * more linter * linter
This commit is contained in:
parent
965854fbd2
commit
cba0feab18
1 changed files with 43 additions and 11 deletions
|
@ -27,10 +27,14 @@ DOCUMENTATION = """
|
||||||
description: A list of regions in which to describe GCE instances.
|
description: A list of regions in which to describe GCE instances.
|
||||||
If none provided, it defaults to all zones available to a given project.
|
If none provided, it defaults to all zones available to a given project.
|
||||||
type: list
|
type: list
|
||||||
|
folders:
|
||||||
|
description: A folder that contains many projects
|
||||||
|
type: list
|
||||||
|
required: False
|
||||||
projects:
|
projects:
|
||||||
description: A list of projects in which to describe GCE instances.
|
description: A list of projects in which to describe GCE instances.
|
||||||
type: list
|
type: list
|
||||||
required: True
|
required: False
|
||||||
filters:
|
filters:
|
||||||
description: >
|
description: >
|
||||||
A list of filter value pairs. Available filters are listed here
|
A list of filter value pairs. Available filters are listed here
|
||||||
|
@ -329,6 +333,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
resp = self._return_if_object(
|
resp = self._return_if_object(
|
||||||
self.fake_module, self.auth_session.get(link, params={"filter": query})
|
self.fake_module, self.auth_session.get(link, params={"filter": query})
|
||||||
)
|
)
|
||||||
|
if resp:
|
||||||
lists.append(resp.get("items"))
|
lists.append(resp.get("items"))
|
||||||
while resp.get("nextPageToken"):
|
while resp.get("nextPageToken"):
|
||||||
resp = self._return_if_object(
|
resp = self._return_if_object(
|
||||||
|
@ -498,6 +503,24 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
|
|
||||||
return self._project_disks
|
return self._project_disks
|
||||||
|
|
||||||
|
def fetch_projects(self, params, link, query):
|
||||||
|
module = GcpMockModule(params)
|
||||||
|
auth = GcpSession(module, 'cloudresourcemanager')
|
||||||
|
response = auth.get(link, params={'filter': query})
|
||||||
|
return self._return_if_object(module, response)
|
||||||
|
|
||||||
|
def projects_for_folder(self, config_data, folder):
|
||||||
|
link = 'https://cloudresourcemanager.googleapis.com/v1/projects'.format()
|
||||||
|
query = 'parent.id = {0}'.format(folder)
|
||||||
|
projects = []
|
||||||
|
config_data['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
||||||
|
projects_response = self.fetch_projects(config_data, link, query)
|
||||||
|
|
||||||
|
if 'projects' in projects_response:
|
||||||
|
for item in projects_response.get('projects'):
|
||||||
|
projects.append(item['name'])
|
||||||
|
return projects
|
||||||
|
|
||||||
def parse(self, inventory, loader, path, cache=True):
|
def parse(self, inventory, loader, path, cache=True):
|
||||||
|
|
||||||
if not HAS_GOOGLE_LIBRARIES:
|
if not HAS_GOOGLE_LIBRARIES:
|
||||||
|
@ -520,6 +543,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
params = {
|
params = {
|
||||||
"filters": self.get_option("filters"),
|
"filters": self.get_option("filters"),
|
||||||
"projects": self.get_option("projects"),
|
"projects": self.get_option("projects"),
|
||||||
|
"folders": self.get_option("folders"),
|
||||||
"scopes": self.get_option("scopes"),
|
"scopes": self.get_option("scopes"),
|
||||||
"zones": self.get_option("zones"),
|
"zones": self.get_option("zones"),
|
||||||
"auth_kind": self.get_option("auth_kind"),
|
"auth_kind": self.get_option("auth_kind"),
|
||||||
|
@ -560,9 +584,17 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
cache_needs_update = True
|
cache_needs_update = True
|
||||||
|
|
||||||
|
projects = []
|
||||||
|
if params["projects"]:
|
||||||
|
projects = projects + params["projects"]
|
||||||
|
|
||||||
|
if params["folders"]:
|
||||||
|
for folder in params["folders"]:
|
||||||
|
projects = projects + self.projects_for_folder(config_data, folder)
|
||||||
|
|
||||||
if not cache or cache_needs_update:
|
if not cache or cache_needs_update:
|
||||||
cached_data = {}
|
cached_data = {}
|
||||||
for project in params["projects"]:
|
for project in projects:
|
||||||
cached_data[project] = {}
|
cached_data[project] = {}
|
||||||
params["project"] = project
|
params["project"] = project
|
||||||
zones = params["zones"]
|
zones = params["zones"]
|
||||||
|
|
Loading…
Reference in a new issue