-
Notifications
You must be signed in to change notification settings - Fork 330
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Azure Recovery Services VM Backup Policy (#271)
* Resolved #234 * Adjusted code as per review comments * Updated the main.yaml file extension and registered module in pr-pipelines.yml * Removed azure_rm_backupazurevm_info from pr-pipelines.yaml * Updated meta/main.yaml to meta/main.yml * removed meta/main.yaml * Updated module with latest review comments * Adjusted task/main.yml as per the recommendation * Adjusted long string with column size 80 * Update azure_rm_backupazurevm_info.py * Update azure_rm_backupazurevm_info.py * Updated azure_rm_backupazurevm_info with latest review comments * Updated tests/sanity/ignore-2.xx * Udpated tests/sanity/ignore-2.xx * Updated ignore-2.9.txt(removed lines 186-189) and tasks/main.yml(removed extra blank line) * Resolved #210 Recovery Service Vault * Adjusted the state and added provision for deleting RSV * Updated Class Name * Adjusted the code with latest review comments * Added new line at end of aliases main.yml files * Adjusted tasks/main.yml * removed line no 3 from tasks/main.yml * Read Recovery Vault Details Pre Creation Logic Integrated * Added idempotent test and adjusted module return type * Adjusted code as per review comments * '2016-06-01' is required for create, delete as per official doc * Adjusted code as per latest review comments * Adjusted indentation * Removed whitespace from line 175 * Added new module for VM Backup Policy #255 * Adjusted code as per review comments * Added recovery vault testcases in policy module * Documentation is updated * Updated code as per review comments * Updated sanity ignore files * Updated tasks/main.yml * Updated test cases Co-authored-by: Suyeb Ansari <> Co-authored-by: Fred-sun <37327967+Fred-sun@users.noreply.github.com> Co-authored-by: haiyuan_zhang <haiyuan.zhang1982@gmail.com>
- Loading branch information
1 parent
0dcdcaa
commit 7d13133
Showing
8 changed files
with
830 additions
and
1 deletion.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
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,267 @@ | ||
#!/usr/bin/python | ||
# | ||
# Copyright (c) 2020 Suyeb Ansari (@suyeb786) | ||
# | ||
# 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_vmbackuppolicy_info | ||
version_added: '1.1.0' | ||
short_description: Fetch Backup Policy Details | ||
description: | ||
- Get Backup Policy Details. | ||
options: | ||
name: | ||
description: | ||
- Policy Name. | ||
required: true | ||
type: str | ||
resource_group: | ||
description: | ||
- The name of the resource group. | ||
required: true | ||
type: str | ||
vault_name: | ||
description: | ||
- Recovery Service Vault Name. | ||
required: true | ||
type: str | ||
extends_documentation_fragment: | ||
- azure.azcollection.azure | ||
- azure.azcollection.azure_tags | ||
author: | ||
- Suyeb Ansari (@suyeb786) | ||
''' | ||
|
||
EXAMPLES = ''' | ||
azure_rm_backvmuppolicy_info: | ||
name: 'myBackupPolicy' | ||
vault_name: 'myVault' | ||
resource_group: 'myResourceGroup' | ||
''' | ||
|
||
RETURN = ''' | ||
response: | ||
description: | ||
- The response about the current state of the backup policy. | ||
returned: always | ||
type: complex | ||
contains: | ||
id: | ||
description: | ||
- Resource ID. | ||
returned: always | ||
type: str | ||
sample: "/subscriptions/xxxxxxx/resourceGroups/resourcegroup_name/ \ | ||
providers/Microsoft.RecoveryServices/vaults/myVault/backupPolicies/myBackup" | ||
name: | ||
description: | ||
- Backup Policy Name. | ||
returned: always | ||
type: str | ||
sample: "myBackup" | ||
properties: | ||
description: | ||
- The backup policy properties. | ||
returned: always | ||
type: dict | ||
sample: { | ||
"backupManagementType": "AzureIaasVM", | ||
"schedulePolicy": { | ||
"schedulePolicyType": "SimpleSchedulePolicy", | ||
"scheduleRunFrequency": "Weekly", | ||
"scheduleRunDays": [ | ||
"Monday", | ||
"Wednesday", | ||
"Thursday" | ||
], | ||
"scheduleRunTimes": [ | ||
"2018-01-24T10:00:00Z" | ||
], | ||
"scheduleWeeklyFrequency": 0 | ||
}, | ||
"retentionPolicy": { | ||
"retentionPolicyType": "LongTermRetentionPolicy", | ||
"weeklySchedule": { | ||
"daysOfTheWeek": [ | ||
"Monday", | ||
"Wednesday", | ||
"Thursday" | ||
], | ||
"retentionTimes": [ | ||
"2018-01-24T10:00:00Z" | ||
], | ||
"retentionDuration": { | ||
"count": 1, | ||
"durationType": "Weeks" | ||
} | ||
}, | ||
"monthlySchedule": { | ||
"retentionScheduleFormatType": "Weekly", | ||
"retentionScheduleWeekly": { | ||
"daysOfTheWeek": [ | ||
"Wednesday", | ||
"Thursday" | ||
], | ||
"weeksOfTheMonth": [ | ||
"First", | ||
"Third" | ||
] | ||
}, | ||
"retentionTimes": [ | ||
"2018-01-24T10:00:00Z" | ||
], | ||
"retentionDuration": { | ||
"count": 2, | ||
"durationType": "Months" | ||
} | ||
}, | ||
"yearlySchedule": { | ||
"retentionScheduleFormatType": "Weekly", | ||
"monthsOfYear": [ | ||
"February", | ||
"November" | ||
], | ||
"retentionScheduleWeekly": { | ||
"daysOfTheWeek": [ | ||
"Monday", | ||
"Thursday" | ||
], | ||
"weeksOfTheMonth": [ | ||
"Fourth" | ||
] | ||
}, | ||
"retentionTimes": [ | ||
"2018-01-24T10:00:00Z" | ||
], | ||
"retentionDuration": { | ||
"count": 4, | ||
"durationType": "Years" | ||
} | ||
} | ||
}, | ||
"timeZone": "Pacific Standard Time", | ||
"protectedItemsCount": 0 | ||
} | ||
type: | ||
description: | ||
- Resource type. | ||
returned: always | ||
type: str | ||
sample: "Microsoft.RecoveryServices/vaults/backupPolicies" | ||
''' | ||
|
||
from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_rest import GenericRestClient | ||
from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBaseExt | ||
import json | ||
|
||
try: | ||
from msrestazure.azure_exceptions import CloudError | ||
except ImportError: | ||
# This is handled in azure_rm_common | ||
pass | ||
|
||
|
||
class BackupPolicyVMInfo(AzureRMModuleBaseExt): | ||
def __init__(self): | ||
self.module_arg_spec = dict( | ||
resource_group=dict( | ||
type='str', | ||
required=True | ||
), | ||
name=dict( | ||
type='str', | ||
required=True | ||
), | ||
vault_name=dict( | ||
type='str', | ||
required=True | ||
) | ||
) | ||
|
||
self.resource_group = None | ||
self.name = None | ||
self.vault_name = None | ||
|
||
self.results = dict(changed=False) | ||
self.mgmt_client = None | ||
self.url = None | ||
self.status_code = [200, 202] | ||
|
||
self.query_parameters = {} | ||
self.query_parameters['api-version'] = '2019-05-13' | ||
self.header_parameters = {} | ||
self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' | ||
|
||
super(BackupPolicyVMInfo, self).__init__(derived_arg_spec=self.module_arg_spec, | ||
supports_check_mode=True, | ||
supports_tags=True | ||
) | ||
|
||
def get_url(self): | ||
return '/subscriptions/' \ | ||
+ self.subscription_id \ | ||
+ '/resourceGroups/' \ | ||
+ self.resource_group \ | ||
+ '/providers/Microsoft.RecoveryServices' \ | ||
+ '/vaults' + '/' \ | ||
+ self.vault_name + '/' \ | ||
+ "backupPolicies/" \ | ||
+ self.name | ||
|
||
def exec_module(self, **kwargs): | ||
for key in list(self.module_arg_spec.keys()): | ||
if hasattr(self, key): | ||
setattr(self, key, kwargs[key]) | ||
|
||
self.url = self.get_url() | ||
|
||
self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, | ||
base_url=self._cloud_environment.endpoints.resource_manager) | ||
|
||
response = self.get_resource() | ||
changed = False | ||
self.results['response'] = response | ||
self.results['changed'] = changed | ||
|
||
return self.results | ||
|
||
def get_resource(self): | ||
# self.log('Fetch Backup Policy Details {0}'.format(self.)) | ||
try: | ||
response = self.mgmt_client.query( | ||
self.url, | ||
'GET', | ||
self.query_parameters, | ||
self.header_parameters, | ||
None, | ||
self.status_code, | ||
600, | ||
30, | ||
) | ||
found = True | ||
except CloudError as e: | ||
self.log('Backup policy does not exist.') | ||
self.fail('Error in fetching VM Backup Policy {0}'.format(str(e))) | ||
try: | ||
response = json.loads(response.text) | ||
except Exception: | ||
response = {'text': response.text} | ||
|
||
return response | ||
|
||
|
||
def main(): | ||
BackupPolicyVMInfo() | ||
|
||
|
||
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/group12 | ||
destructive |
2 changes: 2 additions & 0 deletions
2
tests/integration/targets/azure_rm_vmbackuppolicy/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 |
78 changes: 78 additions & 0 deletions
78
tests/integration/targets/azure_rm_vmbackuppolicy/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,78 @@ | ||
- name: Fix resource prefix | ||
set_fact: | ||
name: "myPolicy{{ resource_group | hash('md5') | truncate(22, True, '') }}" | ||
vault_name: "myVault" | ||
location: "eastus" | ||
|
||
- name: Create Azure Recovery Service vault | ||
azure_rm_recoveryservicesvault: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ name }}" | ||
location: "{{ location }}" | ||
state: "present" | ||
register: vault | ||
|
||
- name: Create VM Backup Policy | ||
azure_rm_vmbackuppolicy: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ name }}" | ||
vault_name: "{{ vault.response.name }}" | ||
state: "present" | ||
register: output | ||
|
||
- name: Assert that output has changed | ||
assert: | ||
that: | ||
- output.changed | ||
|
||
- name: Create VM Backup Policy (idempotent) | ||
azure_rm_vmbackuppolicy: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ name }}" | ||
vault_name: "{{ vault.response.name }}" | ||
state: "present" | ||
register: output | ||
|
||
- name: Assert that output has no changed | ||
assert: | ||
that: | ||
- not output.changed | ||
|
||
- name: Get VM Backup Policy Details | ||
azure_rm_vmbackuppolicy_info: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ name }}" | ||
vault_name: "{{ vault.response.name }}" | ||
register: output | ||
|
||
- name: Assert that output has changed | ||
assert: | ||
that: | ||
- output.response.id != None | ||
- output.response.name != None | ||
|
||
- name: Delete VM Backup Policy | ||
azure_rm_vmbackuppolicy: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ name }}" | ||
vault_name: "{{ vault.response.name }}" | ||
state: "absent" | ||
register: output | ||
|
||
- name: Assert that output has changed | ||
assert: | ||
that: | ||
- output.changed | ||
|
||
- name: Delete Azure Recovery Service vault | ||
azure_rm_recoveryservicesvault: | ||
resource_group: "{{ resource_group }}" | ||
name: "{{ vault.response.name }}" | ||
location: "{{ location }}" | ||
state: "absent" | ||
register: output | ||
|
||
- name: Assert that output has changed | ||
assert: | ||
that: | ||
- output.changed |
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