forked from ansible-collections/azure
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Azure rm subscription info (ansible-collections#280)
* Azure rm subscription info (#2) Create module for azure_rm_subscription_info * Improved documentation with types and option tags. * added tag support for filtering lists. * added mutually_exclusive list. * azure_rm_subscription to pr-pipelines * azure_rm_subscription test * azure_rm_subscription_info added * visual formatting * visual formatting. * visual formatting * Update plugins/modules/azure_rm_subscription_info.py Co-authored-by: Fred-sun <[email protected]> * Update plugins/modules/azure_rm_subscription_info.py Co-authored-by: Fred-sun <[email protected]> * visual formatting * Update plugins/modules/azure_rm_subscription_info.py Co-authored-by: Fred-sun <[email protected]> * test information * whitespace formatting * test ignore azure_rm_subscription_info Co-authored-by: Fred-sun <[email protected]>
- Loading branch information
1 parent
43d8833
commit 060839b
Showing
8 changed files
with
282 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,224 @@ | ||
#!/usr/bin/python | ||
# | ||
# Copyright (c) 2020 Paul Aiton, < @paultaiton > | ||
# | ||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) | ||
|
||
from __future__ import absolute_import, division, print_function | ||
__metaclass__ = type | ||
|
||
|
||
ANSIBLE_METADATA = {'metadata_version': '1.1', | ||
'status': ['preview'], | ||
'supported_by': 'community'} | ||
|
||
|
||
DOCUMENTATION = ''' | ||
--- | ||
module: azure_rm_subscription_info | ||
version_added: "1.2.0" | ||
short_description: Get Azure Subscription facts | ||
description: | ||
- Get facts for a specific subscription or all subscriptions. | ||
options: | ||
id: | ||
description: | ||
- Limit results to a specific subscription by id. | ||
- Mutually exclusive with I(name). | ||
type: str | ||
name: | ||
description: | ||
- Limit results to a specific subscription by name. | ||
- Mutually exclusive with I(id). | ||
aliases: | ||
- subscription_name | ||
type: str | ||
all: | ||
description: | ||
- If true, will return all subscriptions. | ||
- If false will omit disabled subscriptions (default). | ||
- Option has no effect when searching by id or name, and will be silently ignored. | ||
default: False | ||
type: bool | ||
tags: | ||
description: | ||
- Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. | ||
- Option has no effect when searching by id or name, and will be silently ignored. | ||
type: list | ||
extends_documentation_fragment: | ||
- azure.azcollection.azure | ||
author: | ||
- Paul Aiton (@paultaiton) | ||
''' | ||
|
||
EXAMPLES = ''' | ||
- name: Get facts for one subscription by id | ||
azure_rm_subscription_info: | ||
id: 00000000-0000-0000-0000-000000000000 | ||
- name: Get facts for one subscription by name | ||
azure_rm_subscription_info: | ||
name: "my-subscription" | ||
- name: Get facts for all subscriptions, including ones that are disabled. | ||
azure_rm_subscription_info: | ||
all: True | ||
- name: Get facts for subscriptions containing tags provided. | ||
azure_rm_subscription_info: | ||
tags: | ||
- testing | ||
- foo:bar | ||
''' | ||
|
||
RETURN = ''' | ||
subscriptions: | ||
description: | ||
- List of subscription dicts. | ||
returned: always | ||
type: list | ||
contains: | ||
display_name: | ||
description: Subscription display name. | ||
returned: always | ||
type: str | ||
sample: my-subscription | ||
fqid: | ||
description: Subscription fully qualified id. | ||
returned: always | ||
type: str | ||
sample: "/subscriptions/00000000-0000-0000-0000-000000000000" | ||
subscription_id: | ||
description: Subscription guid. | ||
returned: always | ||
type: str | ||
sample: "00000000-0000-0000-0000-000000000000" | ||
state: | ||
description: Subscription state. | ||
returned: always | ||
type: str | ||
sample: "'Enabled' or 'Disabled'" | ||
tags: | ||
description: Tags assigned to resource group. | ||
returned: always | ||
type: dict | ||
sample: { "tag1": "value1", "tag2": "value2" } | ||
tenant_id: | ||
description: Subscription tenant id | ||
returned: always | ||
type: str | ||
sample: "00000000-0000-0000-0000-000000000000" | ||
''' | ||
|
||
try: | ||
from msrestazure.azure_exceptions import CloudError | ||
except Exception: | ||
# This is handled in azure_rm_common | ||
pass | ||
|
||
from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase | ||
|
||
|
||
AZURE_OBJECT_CLASS = 'Subscription' | ||
|
||
|
||
class AzureRMSubscriptionInfo(AzureRMModuleBase): | ||
|
||
def __init__(self): | ||
|
||
self.module_arg_spec = dict( | ||
name=dict(type='str', aliases=['subscription_name']), | ||
id=dict(type='str'), | ||
tags=dict(type='list', elements='dict'), | ||
all=dict(type='bool') | ||
) | ||
|
||
self.results = dict( | ||
changed=False, | ||
subscriptions=[] | ||
) | ||
|
||
self.name = None | ||
self.id = None | ||
self.tags = None | ||
self.all = False | ||
|
||
mutually_exclusive = [['name', 'id']] | ||
|
||
super(AzureRMSubscriptionInfo, self).__init__(self.module_arg_spec, | ||
supports_tags=False, | ||
mutually_exclusive=mutually_exclusive, | ||
facts_module=True) | ||
|
||
def exec_module(self, **kwargs): | ||
for key in self.module_arg_spec: | ||
setattr(self, key, kwargs[key]) | ||
|
||
if self.id and self.name: | ||
self.fail("Parameter error: cannot search subscriptions by both name and id.") | ||
|
||
result = [] | ||
|
||
if self.id: | ||
result = self.get_item() | ||
else: | ||
result = self.list_items() | ||
|
||
self.results['subscriptions'] = result | ||
return self.results | ||
|
||
def get_item(self): | ||
self.log('Get properties for {0}'.format(self.id)) | ||
item = None | ||
result = [] | ||
|
||
try: | ||
item = self.subscription_client.subscriptions.get(self.id) | ||
except CloudError: | ||
pass | ||
|
||
result = self.to_dict(item) | ||
|
||
return result | ||
|
||
def list_items(self): | ||
self.log('List all items') | ||
try: | ||
response = self.subscription_client.subscriptions.list() | ||
except CloudError as exc: | ||
self.fail("Failed to list all items - {0}".format(str(exc))) | ||
|
||
results = [] | ||
for item in response: | ||
# If the name matches, return result regardless of anything else. | ||
# If name is not defined and either state is Enabled or all is true, and tags match, return result. | ||
if self.name and self.name.lower() == item.display_name.lower(): | ||
results.append(self.to_dict(item)) | ||
elif not self.name and (self.all or item.state == "Enabled") and self.has_tags(item.tags, self.tags): | ||
results.append(self.to_dict(item)) | ||
|
||
return results | ||
|
||
def to_dict(self, subscription_object): | ||
return dict( | ||
display_name=subscription_object.display_name, | ||
fqid=subscription_object.id, | ||
state=subscription_object.state, | ||
subscription_id=subscription_object.subscription_id, | ||
tags=subscription_object.tags, | ||
tenant_id=subscription_object.tenant_id | ||
) | ||
|
||
|
||
def main(): | ||
AzureRMSubscriptionInfo() | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
cloud/azure | ||
shippable/azure/group2 | ||
destructive |
2 changes: 2 additions & 0 deletions
2
tests/integration/targets/azure_rm_subscription/meta/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
dependencies: | ||
- setup_azure |
24 changes: 24 additions & 0 deletions
24
tests/integration/targets/azure_rm_subscription/tasks/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
- name: Get list of all subscriptions | ||
azure_rm_subscription_info: | ||
all: True | ||
register: az_all_subscriptions | ||
|
||
- name: Get a subscription by id | ||
azure_rm_subscription_info: | ||
id: "{{ az_all_subscriptions.subscriptions[0].subscription_id }}" | ||
|
||
- name: Get a subscription by name | ||
azure_rm_subscription_info: | ||
name: "{{ az_all_subscriptions.subscriptions[0].display_name }}" | ||
|
||
- name: Test invalid name id combo | ||
azure_rm_subscription_info: | ||
name: "{{ az_all_subscriptions.subscriptions[0].display_name }}" | ||
id: "{{ az_all_subscriptions.subscriptions[0].subscription_id }}" | ||
register: invalid_name | ||
ignore_errors: yes | ||
|
||
- name: Assert task failed | ||
assert: | ||
that: | ||
- "invalid_name['failed'] == True" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters