summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/storage/purestorage/purefa_snmp.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/storage/purestorage/purefa_snmp.py')
-rw-r--r--lib/ansible/modules/storage/purestorage/purefa_snmp.py333
1 files changed, 0 insertions, 333 deletions
diff --git a/lib/ansible/modules/storage/purestorage/purefa_snmp.py b/lib/ansible/modules/storage/purestorage/purefa_snmp.py
deleted file mode 100644
index c2479de861..0000000000
--- a/lib/ansible/modules/storage/purestorage/purefa_snmp.py
+++ /dev/null
@@ -1,333 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2019, Simon Dodsley (simon@purestorage.com)
-# 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 = r'''
----
-module: purefa_snmp
-version_added: '2.9'
-short_description: Configure FlashArray SNMP Managers
-description:
-- Manage SNMP managers on a Pure Storage FlashArray.
-- Changing of a named SNMP managers version is not supported.
-- This module is not idempotent and will always modify an
- existing SNMP manager due to hidden parameters that cannot
- be compared to the play parameters.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-options:
- name:
- description:
- - Name of SNMP Manager
- required: True
- type: str
- state:
- description:
- - Create or delete SNMP manager
- type: str
- default: present
- choices: [ absent, present ]
- auth_passphrase:
- type: str
- description:
- - SNMPv3 only. Passphrase of 8 - 32 characters.
- auth_protocol:
- type: str
- description:
- - SNMP v3 only. Hash algorithm to use
- choices: [ MD5, SHA ]
- community:
- type: str
- description:
- - SNMP v2c only. Manager community ID. Between 1 and 32 characters long.
- host:
- type: str
- description:
- - IPv4 or IPv6 address or FQDN to send trap messages to.
- required: True
- user:
- type: str
- description:
- - SNMP v3 only. User ID recognized by the specified SNMP manager.
- Must be between 1 and 32 characters.
- version:
- type: str
- description:
- - Version of SNMP protocol to use for the manager.
- choices: [ v2c, v3 ]
- default: v2c
- notification:
- type: str
- description:
- - Action to perform on event.
- default: trap
- choices: [ inform, trap ]
- privacy_passphrase:
- type: str
- description:
- - SNMPv3 only. Passphrase to encrypt SNMP messages.
- Must be between 8 and 63 non-space ASCII characters.
- privacy_protocol:
- type: str
- description:
- - SNMP v3 only. Encryption protocol to use
- choices: [ AES, DES ]
-extends_documentation_fragment:
-- purestorage.fa
-'''
-
-EXAMPLES = r'''
-- name: Delete existing SNMP manager
- purefa_snmp:
- name: manager1
- state: absent
- fa_url: 10.10.10.2
- api_token: e31060a7-21fc-e277-6240-25983c6c4592
-
-- name: Create v2c SNMP manager
- purefa_snmp:
- name: manager1
- community: public
- host: 10.21.22.23
- fa_url: 10.10.10.2
- api_token: e31060a7-21fc-e277-6240-25983c6c4592
-
-- name: Create v3 SNMP manager
- purefa_snmp:
- name: manager2
- version: v3
- auth_protocol: MD5
- auth_passphrase: password
- host: 10.21.22.23
- fa_url: 10.10.10.2
- api_token: e31060a7-21fc-e277-6240-25983c6c4592
-
-- name: Update existing SNMP manager
- purefa_snmp:
- name: manager1
- community: private
- fa_url: 10.10.10.2
- api_token: e31060a7-21fc-e277-6240-25983c6c4592
-'''
-
-RETURN = r'''
-'''
-
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.pure import get_system, purefa_argument_spec
-
-
-def update_manager(module, array):
- """Update SNMP Manager"""
- changed = True
- if not module.check_mode:
- try:
- mgr = array.get_snmp_manager(module.params['name'])
- except Exception:
- module.fail_json(msg="Failed to get current configuration for SNMP manager {0}.".format(module.params['name']))
- if mgr['version'] != module.params['version']:
- module.fail_json(msg="Changing an SNMP managers version is not supported.")
- elif module.params['version'] == "v2c":
- try:
- array.set_snmp_manager(module.params['name'],
- community=module.params['community'],
- notification=module.params['notification'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to update SNMP manager {0}.".format(module.params['name']))
- else:
- if module.params['auth_protocol'] and module.params['privacy_protocol']:
- try:
- array.set_snmp_manager(module.params['name'],
- auth_passphrase=module.params['auth_passphrase'],
- auth_protocol=module.params['auth_protocol'],
- privacy_passphrase=module.params['privacy_passphrase'],
- privacy_protocol=module.params['privacy_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to update SNMP manager {0}.".format(module.params['name']))
- elif module.params['auth_protocol'] and not module.params['privacy_protocol']:
- try:
- array.set_snmp_manager(module.params['name'],
- version=module.params['version'],
- auth_passphrase=module.params['auth_passphrase'],
- auth_protocol=module.params['auth_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to update SNMP manager {0}.".format(module.params['name']))
- elif not module.params['auth_protocol'] and module.params['privacy_protocol']:
- try:
- array.set_snmp_manager(module.params['name'],
- version=module.params['version'],
- privacy_passphrase=module.params['privacy_passphrase'],
- privacy_protocol=module.params['privacy_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to update SNMP manager {0}.".format(module.params['name']))
- elif not module.params['auth_protocol'] and not module.params['privacy_protocol']:
- try:
- array.set_snmp_manager(module.params['name'],
- version=module.params['version'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to update SNMP manager {0}.".format(module.params['name']))
- else:
- module.fail_json(msg="Invalid parameters selected in update. Please raise issue in Ansible GitHub")
-
- module.exit_json(changed=changed)
-
-
-def delete_manager(module, array):
- """Delete SNMP Manager"""
- changed = True
- if not module.check_mode:
- try:
- array.delete_snmp_manager(module.params['name'])
- except Exception:
- module.fail_json(msg='Delete SNMP manager {0} failed'.format(module.params['name']))
- module.exit_json(changed=changed)
-
-
-def create_manager(module, array):
- """Create SNMP Manager"""
- changed = True
- if not module.check_mode:
- if module.params['version'] == "v2c":
- try:
- array.create_snmp_manager(module.params['name'],
- version=module.params['version'],
- community=module.params['community'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to create SNMP manager {0}.".format(module.params['name']))
- else:
- if module.params['auth_protocol'] and module.params['privacy_protocol']:
- try:
- array.create_snmp_manager(module.params['name'],
- version=module.params['version'],
- auth_passphrase=module.params['auth_passphrase'],
- auth_protocol=module.params['auth_protocol'],
- privacy_passphrase=module.params['privacy_passphrase'],
- privacy_protocol=module.params['privacy_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to create SNMP manager {0}.".format(module.params['name']))
- elif module.params['auth_protocol'] and not module.params['privacy_protocol']:
- try:
- array.create_snmp_manager(module.params['name'],
- version=module.params['version'],
- auth_passphrase=module.params['auth_passphrase'],
- auth_protocol=module.params['auth_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to create SNMP manager {0}.".format(module.params['name']))
- elif not module.params['auth_protocol'] and module.params['privacy_protocol']:
- try:
- array.create_snmp_manager(module.params['name'],
- version=module.params['version'],
- privacy_passphrase=module.params['privacy_passphrase'],
- privacy_protocol=module.params['privacy_protocol'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to create SNMP manager {0}.".format(module.params['name']))
- elif not module.params['auth_protocol'] and not module.params['privacy_protocol']:
- try:
- array.create_snmp_manager(module.params['name'],
- version=module.params['version'],
- notification=module.params['notification'],
- user=module.params['user'],
- host=module.params['host']
- )
- except Exception:
- module.fail_json(msg="Failed to create SNMP manager {0}.".format(module.params['name']))
- else:
- module.fail_json(msg="Invalid parameters selected in create. Please raise issue in Ansible GitHub")
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = purefa_argument_spec()
- argument_spec.update(dict(
- name=dict(type='str', required=True),
- host=dict(type='str', required=True),
- state=dict(type='str', default='present', choices=['absent', 'present']),
- user=dict(type='str'),
- notification=dict(type='str', choices=['inform', 'trap'], default='trap'),
- auth_passphrase=dict(type='str', no_log=True),
- auth_protocol=dict(type='str', choices=['MD5', 'SHA']),
- privacy_passphrase=dict(type='str', no_log=True),
- privacy_protocol=dict(type='str', choices=['AES', 'DES']),
- version=dict(type='str', default='v2c', choices=['v2c', 'v3']),
- community=dict(type='str'),
- ))
-
- required_together = [['auth_passphrase', 'auth_protocol'],
- ['privacy_passphrase', 'privacy_protocol']]
- required_if = [['version', 'v2c', ['community', 'host']],
- ['version', 'v3', ['host', 'user']]]
-
- module = AnsibleModule(argument_spec,
- required_together=required_together,
- required_if=required_if,
- supports_check_mode=True)
-
- state = module.params['state']
- array = get_system(module)
- mgr_configured = False
- mgrs = array.list_snmp_managers()
- for mgr in range(0, len(mgrs)):
- if mgrs[mgr]['name'] == module.params['name']:
- mgr_configured = True
- break
- if module.params['version'] == "v3":
- if module.params['auth_passphrase'] and (8 > len(module.params['auth_passphrase']) > 32):
- module.fail_json(msg="auth_password must be between 8 and 32 characters")
- if module.params['privacy_passphrase'] and 8 > len(module.params['privacy_passphrase']) > 63:
- module.fail_json(msg="privacy_password must be between 8 and 63 characters")
- if state == 'absent' and mgr_configured:
- delete_manager(module, array)
- elif mgr_configured and state == 'present':
- update_manager(module, array)
- elif not mgr_configured and state == 'present':
- create_manager(module, array)
- else:
- module.exit_json(changed=False)
-
-
-if __name__ == '__main__':
- main()