forked from ansible/ansible
-
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.
new module: AIX rootvg backup image using mksysb (ansible#30460)
* new module: AIX rootvg backup image using mksysb This module is simple but very useful for AIX system administrators. Easy to construct playbooks to generate and manage rootvg backups using mksysb tool. * added module_check, pep8, non-written convention - implemented module_check; - fixed some pep8 and non-written convention * removed parameters as global variables and doc Moved global variables parameters to inside main() Better doc format for mentioned files
- Loading branch information
1 parent
402b095
commit 8415d2e
Showing
1 changed file
with
209 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,209 @@ | ||
#!/usr/bin/python | ||
# -*- coding: utf-8 -*- | ||
|
||
# (c) 2017, Kairo Araujo <[email protected]> | ||
# 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 = ''' | ||
--- | ||
author: Kairo Araujo (@kairoaraujo) | ||
module: mksysb | ||
short_description: Generates AIX mksysb rootvg backups. | ||
description: | ||
- This module manages a basic AIX mksysb (image) of rootvg. | ||
version_added: "2.5" | ||
options: | ||
backup_crypt_files: | ||
description: | ||
- Backup encrypted files. | ||
choices: ["yes", "no"] | ||
default: "yes" | ||
backup_dmapi_fs: | ||
description: | ||
- Back up DMAPI filesystem files. | ||
choices: ["yes", "no"] | ||
default: "yes" | ||
create_map_files: | ||
description: | ||
- Creates a new MAP files. | ||
choices: ["yes", "no"] | ||
default: "no" | ||
exclude_files: | ||
description: | ||
- Excludes files using C(/etc/rootvg.exclude). | ||
choices: ["yes", "no"] | ||
default: "no" | ||
exclude_wpar_files: | ||
description: | ||
- Excludes WPAR files. | ||
choices: ["yes", "no"] | ||
default: "no" | ||
extended_attrs: | ||
description: | ||
- Backup extended attributes. | ||
choices: ["yes", "no"] | ||
default: "yes" | ||
name: | ||
description: | ||
- Backup name | ||
required: true | ||
new_image_data: | ||
description: | ||
- Creates a new file data. | ||
choices: ["yes", "no"] | ||
default: "yes" | ||
software_packing: | ||
description: | ||
- Exclude files from packing option listed in | ||
C(/etc/exclude_packing.rootvg). | ||
choices: ["yes", "no"] | ||
default: "no" | ||
storage_path: | ||
description: | ||
- Storage path where the mksysb will stored. | ||
required: true | ||
use_snapshot: | ||
description: | ||
- Creates backup using snapshots. | ||
choices: ["yes", "no"] | ||
default: "no" | ||
''' | ||
|
||
EXAMPLES = ''' | ||
- name: Running a backup image mksysb | ||
mksysb: | ||
name: myserver | ||
storage_path: /repository/images | ||
exclude_files: yes | ||
exclude_wpar_files: yes | ||
''' | ||
|
||
RETURN = ''' | ||
changed: | ||
description: Return changed for mksysb actions as true or false. | ||
returned: always | ||
type: boolean | ||
version_added: 2.5 | ||
msg: | ||
description: Return message regarding the action. | ||
returned: always | ||
type: string | ||
version_added: 2.5 | ||
''' | ||
|
||
|
||
from ansible.module_utils.basic import AnsibleModule | ||
import os | ||
|
||
|
||
def main(): | ||
module = AnsibleModule( | ||
argument_spec=dict( | ||
backup_crypt_files=dict(type='bool', default=True), | ||
backup_dmapi_fs=dict(type='bool', default=True), | ||
create_map_files=dict(type='bool', default=False), | ||
exclude_files=dict(type='bool', default=False), | ||
exclude_wpar_files=dict(type='bool', default=False), | ||
extended_attrs=dict(type='bool', default=True), | ||
name=dict(required=True), | ||
new_image_data=dict(type='bool', default=True), | ||
software_packing=dict(type='bool', default=False), | ||
storage_path=dict(required=True), | ||
use_snapshot=dict(type='bool', default=False) | ||
), | ||
supports_check_mode=True, | ||
) | ||
|
||
# Command options. | ||
map_file_opt = { | ||
True: '-m', | ||
False: '' | ||
} | ||
|
||
use_snapshot_opt = { | ||
True: '-T', | ||
False: '' | ||
} | ||
|
||
exclude_files_opt = { | ||
True: '-e', | ||
False: '' | ||
} | ||
|
||
exclude_wpar_opt = { | ||
True: '-G', | ||
False: '' | ||
} | ||
|
||
new_image_data_opt = { | ||
True: '-i', | ||
False: '' | ||
} | ||
|
||
soft_packing_opt = { | ||
True: '', | ||
False: '-p' | ||
} | ||
|
||
extend_attr_opt = { | ||
True: '', | ||
False: '-a' | ||
} | ||
|
||
crypt_files_opt = { | ||
True: '', | ||
False: '-Z' | ||
} | ||
|
||
dmapi_fs_opt = { | ||
True: '-a', | ||
False: '' | ||
} | ||
|
||
backup_crypt_files = crypt_files_opt[module.params['backup_crypt_files']] | ||
backup_dmapi_fs = dmapi_fs_opt[module.params['backup_dmapi_fs']] | ||
create_map_files = map_file_opt[module.params['create_map_files']] | ||
exclude_files = exclude_files_opt[module.params['exclude_files']] | ||
exclude_wpar_files = exclude_wpar_opt[module.params['exclude_wpar_files']] | ||
extended_attrs = extend_attr_opt[module.params['extended_attrs']] | ||
name = module.params['name'] | ||
new_image_data = new_image_data_opt[module.params['new_image_data']] | ||
software_packing = soft_packing_opt[module.params['software_packing']] | ||
storage_path = module.params['storage_path'] | ||
use_snapshot = use_snapshot_opt[module.params['use_snapshot']] | ||
|
||
# Validate if storage_path is a valid directory. | ||
if os.path.isdir(storage_path): | ||
if not module.check_mode: | ||
# Generates the mksysb image backup. | ||
mksysb_cmd = module.get_bin_path('mksysb', True) | ||
rc, mksysb_output, err = module.run_command( | ||
"%s -X %s %s %s %s %s %s %s %s %s %s/%s" % ( | ||
mksysb_cmd, create_map_files, use_snapshot, exclude_files, | ||
exclude_wpar_files, software_packing, extended_attrs, | ||
backup_crypt_files, backup_dmapi_fs, new_image_data, | ||
storage_path, name)) | ||
if rc == 0: | ||
module.exit_json(changed=True, msg=mksysb_output) | ||
else: | ||
module.fail_json(msg="mksysb failed.", rc=rc, err=err) | ||
|
||
module.exit_json(changed=True) | ||
|
||
else: | ||
module.fail_json(msg="Storage path %s is not valid." % storage_path) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |