Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Azure _info modules: fix returned ansible_facts when called as _info #61805

Merged
merged 4 commits into from Sep 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 7 additions & 0 deletions changelogs/fragments/61805-azure-facts-info.yml
@@ -0,0 +1,7 @@
bugfixes:
- "azure_rm_dnsrecordset_info - no longer returns empty ``azure_dnsrecordset`` facts when called as ``_info`` module."
- "azure_rm_resourcegroup_info - no longer returns ``azure_resourcegroups`` facts when called as ``_info`` module."
- "azure_rm_storageaccount_info - no longer returns empty ``azure_storageaccounts`` facts when called as ``_info`` module."
- "azure_rm_virtualmachineimage_info - no longer returns empty ``azure_vmimages`` facts when called as ``_info`` module."
- "azure_rm_virtualmachinescaleset_info - fix wrongly empty result, or ``ansible_facts`` result, when called as ``_info`` module."
- "azure_rm_virtualnetwork_info - no longer returns empty ``azure_virtualnetworks`` facts when called as ``_info`` module."
Expand Up @@ -202,7 +202,6 @@ def __init__(self):
# store the results of the module operation
self.results = dict(
changed=False,
ansible_facts=dict()
)
self.resource_group = None
self.name = None
Expand Down
5 changes: 3 additions & 2 deletions lib/ansible/modules/cloud/azure/azure_rm_dnsrecordset_info.py
Expand Up @@ -179,7 +179,6 @@ def __init__(self):
# store the results of the module operation
self.results = dict(
changed=False,
ansible_info=dict(azure_dnsrecordset=[])
)

self.relative_name = None
Expand Down Expand Up @@ -221,7 +220,9 @@ def exec_module(self, **kwargs):
results = self.list_zone()

if is_old_facts:
self.results['ansible_facts']['azure_dnsrecordset'] = self.serialize_list(results)
self.results['ansible_facts'] = {
'azure_dnsrecordset': self.serialize_list(results)
}
self.results['dnsrecordsets'] = self.curated_list(results)
felixfontein marked this conversation as resolved.
Show resolved Hide resolved
return self.results

Expand Down
14 changes: 9 additions & 5 deletions lib/ansible/modules/cloud/azure/azure_rm_resourcegroup_info.py
Expand Up @@ -154,7 +154,6 @@ def __init__(self):

self.results = dict(
changed=False,
ansible_facts=dict(azure_resourcegroups=[]),
resourcegroups=[]
)

Expand All @@ -167,20 +166,25 @@ def __init__(self):
facts_module=True)

def exec_module(self, **kwargs):
is_old_facts = self.module._name == 'azure_rm_resourcegroup_facts'
if is_old_facts:
self.module.deprecate("The 'azure_rm_resourcegroup_facts' module has been renamed to 'azure_rm_resourcegroup_info'", version='2.13')

for key in self.module_arg_spec:
setattr(self, key, kwargs[key])

if self.name:
self.results['ansible_facts']['azure_resourcegroups'] = self.get_item()
result = self.get_item()
else:
self.results['ansible_facts']['azure_resourcegroups'] = self.list_items()
result = self.list_items()

if self.list_resources:
for item in self.results['ansible_facts']['azure_resourcegroups']:
for item in result:
item['resources'] = self.list_by_rg(item['name'])

self.results['resourcegroups'] = self.results['ansible_facts']['azure_resourcegroups']
if is_old_facts:
self.results['ansible_facts']['azure_resourcegroups'] = result
self.results['resourcegroups'] = result
felixfontein marked this conversation as resolved.
Show resolved Hide resolved

return self.results

Expand Down
1 change: 0 additions & 1 deletion lib/ansible/modules/cloud/azure/azure_rm_sqlserver_info.py
Expand Up @@ -138,7 +138,6 @@ def __init__(self):
# store the results of the module operation
self.results = dict(
changed=False,
ansible_facts=dict()
)
self.resource_group = None
self.server_name = None
Expand Down
Expand Up @@ -371,7 +371,6 @@ def __init__(self):

self.results = dict(
changed=False,
ansible_facts=dict(azure_storageaccounts=[]),
storageaccounts=[]
)

Expand Down Expand Up @@ -407,8 +406,10 @@ def exec_module(self, **kwargs):
filtered = self.filter_tag(results)

if is_old_facts:
self.results['ansible_facts']['azure_storageaccounts'] = self.serialize(filtered)
self.results['ansible_facts']['storageaccounts'] = self.format_to_dict(filtered)
self.results['ansible_facts'] = {
'azure_storageaccounts': self.serialize(filtered),
'storageaccounts': self.format_to_dict(filtered),
}
self.results['storageaccounts'] = self.format_to_dict(filtered)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should only be returned on _info calls.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one did not return storageaccounts in stable-2.8: https://github.com/ansible/ansible/blob/stable-2.8/lib/ansible/modules/cloud/azure/azure_rm_storageaccount_facts.py#L335

The Azure team apparently did decide to change that for 2.9.

return self.results

Expand Down
Expand Up @@ -139,7 +139,6 @@ def __init__(self, **kwargs):

self.results = dict(
changed=False,
ansible_facts=dict(azure_vmimages=[])
)

self.location = None
Expand All @@ -159,6 +158,7 @@ def exec_module(self, **kwargs):
setattr(self, key, kwargs[key])

if is_old_facts:
self.results['ansible_facts'] = dict()
if self.location and self.publisher and self.offer and self.sku and self.version:
self.results['ansible_facts']['azure_vmimages'] = self.get_item()
elif self.location and self.publisher and self.offer and self.sku:
Expand Down
Expand Up @@ -280,9 +280,6 @@ def __init__(self):

self.results = dict(
changed=False,
ansible_facts=dict(
azure_vmss=[]
)
)

self.name = None
Expand All @@ -308,20 +305,14 @@ def exec_module(self, **kwargs):
if self.name and not self.resource_group:
self.fail("Parameter error: resource group required when filtering by name.")

if is_old_facts:
if self.name:
self.results['ansible_facts']['azure_vmss'] = self.get_item()
else:
self.results['ansible_facts']['azure_vmss'] = self.list_items()
if self.name:
result = self.get_item()
else:
if self.name:
self.results['vmss'] = self.get_item()
else:
self.results['vmss'] = self.list_items()
result = self.list_items()

if self.format == 'curated':
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this go before the part above this where you are setting self.results. I'm struggling to see how this even affects the results in the facts module case.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't want to reorganize the code :) but yes, it makes more sense. result is a list, so even after assinging it to self.results, modifying it will affect the output.

I'll change the order.

for index in range(len(self.results['ansible_facts']['azure_vmss'])):
vmss = self.results['ansible_facts']['azure_vmss'][index]
for index in range(len(result)):
vmss = result[index]
subnet_name = None
load_balancer_name = None
virtual_network_name = None
Expand Down Expand Up @@ -385,13 +376,18 @@ def exec_module(self, **kwargs):
'tags': vmss.get('tags')
}

self.results['ansible_facts']['azure_vmss'][index] = updated
result[index] = updated

# proper result format we want to support in the future
# dropping 'ansible_facts' and shorter name 'vmss'
self.results['vmss'] = self.results['ansible_facts']['azure_vmss']
if not is_old_facts:
self.results.pop('ansible_facts', None)
if is_old_facts:
self.results['ansible_facts'] = {
'azure_vmss': result
}
if self.format == 'curated':
# proper result format we want to support in the future
# dropping 'ansible_facts' and shorter name 'vmss'
self.results['vmss'] = result
else:
self.results['vmss'] = result

return self.results

Expand Down
Expand Up @@ -214,7 +214,6 @@ def __init__(self):

self.results = dict(
changed=False,
ansible_facts=dict(azure_virtualnetworks=[]),
virtualnetworks=[]
)

Expand Down Expand Up @@ -242,7 +241,9 @@ def exec_module(self, **kwargs):
results = self.list_items()

if is_old_facts:
self.results['ansible_facts']['azure_virtualnetworks'] = self.serialize(results)
self.results['ansible_facts'] = {
'azure_virtualnetworks': self.serialize(results)
}
self.results['virtualnetworks'] = self.curated(results)
felixfontein marked this conversation as resolved.
Show resolved Hide resolved

return self.results
Expand Down