From c1e70660aa756965836f9deb23580bed28118df2 Mon Sep 17 00:00:00 2001 From: Simon Dodsley Date: Sun, 9 Jun 2019 12:10:04 +0200 Subject: [PATCH] purefa: new module purefa_syslog (#57486) --- .../storage/purestorage/purefa_syslog.py | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 lib/ansible/modules/storage/purestorage/purefa_syslog.py diff --git a/lib/ansible/modules/storage/purestorage/purefa_syslog.py b/lib/ansible/modules/storage/purestorage/purefa_syslog.py new file mode 100644 index 00000000000..12c86f732ab --- /dev/null +++ b/lib/ansible/modules/storage/purestorage/purefa_syslog.py @@ -0,0 +1,158 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# (c) 2018, 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_syslog +version_added: '2.9' +short_description: Configure Pure Storage FlashArray syslog settings +description: +- Configure syslog configuration for Pure Storage FlashArrays. +- Add or delete an individual syslog server to the existing + list of serves. +author: +- Pure Storage Ansible Team (@sdodsley) +options: + state: + description: + - Create or delete syslog servers configuration + default: present + type: str + choices: [ absent, present ] + protocol: + description: + - Protocol which server uses + required: true + type: str + choices: [ tcp, tls, udp ] + port: + description: + - Port at which the server is listening. If no port is specified + the system will use 514 + type: str + address: + description: + - Syslog server address. + This field supports IPv4, IPv6 or FQDN. + An invalid IP addresses will cause the module to fail. + No validation is performed for FQDNs. + type: str + required: true +extends_documentation_fragment: +- purestorage.fa +''' + +EXAMPLES = r''' +- name: Delete exisitng syslog server entries + purefa_syslog: + address: syslog1.com + protocol: tcp + state: absent + fa_url: 10.10.10.2 + api_token: e31060a7-21fc-e277-6240-25983c6c4592 + +- name: Set array syslog servers + purefa_syslog: + state: present + address: syslog1.com + protocol: udp + 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 delete_syslog(module, array): + """Delete Syslog Server""" + changed = False + noport_address = module.params['protocol'] + "://" + module.params['address'] + + if module.params['port']: + full_address = noport_address + ":" + module.params['port'] + else: + full_address = noport_address + + address_list = array.get(syslogserver=True)['syslogserver'] + + if address_list: + for address in range(0, len(address_list)): + if address_list[address] == full_address: + del address_list[address] + try: + array.set(syslogserver=address_list) + changed = True + break + except Exception: + module.fail_json(msg='Failed to remove syslog server: {0}'.format(full_address)) + + module.exit_json(changed=changed) + + +def add_syslog(module, array): + """Add Syslog Server""" + changed = False + noport_address = module.params['protocol'] + "://" + module.params['address'] + + if module.params['port']: + full_address = noport_address + ":" + module.params['port'] + else: + full_address = noport_address + + address_list = array.get(syslogserver=True)['syslogserver'] + exists = False + + if address_list: + for address in range(0, len(address_list)): + if address_list[address] == full_address: + exists = True + break + if not exists: + try: + address_list.append(full_address) + array.set(syslogserver=address_list) + changed = True + except Exception: + module.fail_json(msg='Failed to add syslog server: {0}'.format(full_address)) + + module.exit_json(changed=changed) + + +def main(): + argument_spec = purefa_argument_spec() + argument_spec.update(dict( + address=dict(type='str', required=True), + protocol=dict(type='str', choices=['tcp', 'tls', 'udp'], required=True), + port=dict(type='str'), + state=dict(type='str', default='present', choices=['absent', 'present']), + )) + + module = AnsibleModule(argument_spec, + supports_check_mode=False) + + array = get_system(module) + + if module.params['state'] == 'absent': + delete_syslog(module, array) + else: + add_syslog(module, array) + + module.exit_json(changed=False) + + +if __name__ == '__main__': + main()