1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4# (c) 2018, Simon Dodsley (simon@purestorage.com) 5# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 6 7from __future__ import absolute_import, division, print_function 8__metaclass__ = type 9 10ANSIBLE_METADATA = {'metadata_version': '1.1', 11 'status': ['preview'], 12 'supported_by': 'community'} 13 14DOCUMENTATION = r''' 15--- 16module: purefa_syslog 17version_added: '2.9' 18short_description: Configure Pure Storage FlashArray syslog settings 19description: 20- Configure syslog configuration for Pure Storage FlashArrays. 21- Add or delete an individual syslog server to the existing 22 list of serves. 23author: 24- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com> 25options: 26 state: 27 description: 28 - Create or delete syslog servers configuration 29 default: present 30 type: str 31 choices: [ absent, present ] 32 protocol: 33 description: 34 - Protocol which server uses 35 required: true 36 type: str 37 choices: [ tcp, tls, udp ] 38 port: 39 description: 40 - Port at which the server is listening. If no port is specified 41 the system will use 514 42 type: str 43 address: 44 description: 45 - Syslog server address. 46 This field supports IPv4, IPv6 or FQDN. 47 An invalid IP addresses will cause the module to fail. 48 No validation is performed for FQDNs. 49 type: str 50 required: true 51extends_documentation_fragment: 52- purestorage.fa 53''' 54 55EXAMPLES = r''' 56- name: Delete existing syslog server entries 57 purefa_syslog: 58 address: syslog1.com 59 protocol: tcp 60 state: absent 61 fa_url: 10.10.10.2 62 api_token: e31060a7-21fc-e277-6240-25983c6c4592 63 64- name: Set array syslog servers 65 purefa_syslog: 66 state: present 67 address: syslog1.com 68 protocol: udp 69 fa_url: 10.10.10.2 70 api_token: e31060a7-21fc-e277-6240-25983c6c4592 71''' 72 73RETURN = r''' 74''' 75 76from ansible.module_utils.basic import AnsibleModule 77from ansible.module_utils.pure import get_system, purefa_argument_spec 78 79 80def delete_syslog(module, array): 81 """Delete Syslog Server""" 82 changed = False 83 noport_address = module.params['protocol'] + "://" + module.params['address'] 84 85 if module.params['port']: 86 full_address = noport_address + ":" + module.params['port'] 87 else: 88 full_address = noport_address 89 90 address_list = array.get(syslogserver=True)['syslogserver'] 91 92 if address_list: 93 for address in range(0, len(address_list)): 94 if address_list[address] == full_address: 95 del address_list[address] 96 try: 97 array.set(syslogserver=address_list) 98 changed = True 99 break 100 except Exception: 101 module.fail_json(msg='Failed to remove syslog server: {0}'.format(full_address)) 102 103 module.exit_json(changed=changed) 104 105 106def add_syslog(module, array): 107 """Add Syslog Server""" 108 changed = False 109 noport_address = module.params['protocol'] + "://" + module.params['address'] 110 111 if module.params['port']: 112 full_address = noport_address + ":" + module.params['port'] 113 else: 114 full_address = noport_address 115 116 address_list = array.get(syslogserver=True)['syslogserver'] 117 exists = False 118 119 if address_list: 120 for address in range(0, len(address_list)): 121 if address_list[address] == full_address: 122 exists = True 123 break 124 if not exists: 125 try: 126 address_list.append(full_address) 127 array.set(syslogserver=address_list) 128 changed = True 129 except Exception: 130 module.fail_json(msg='Failed to add syslog server: {0}'.format(full_address)) 131 132 module.exit_json(changed=changed) 133 134 135def main(): 136 argument_spec = purefa_argument_spec() 137 argument_spec.update(dict( 138 address=dict(type='str', required=True), 139 protocol=dict(type='str', choices=['tcp', 'tls', 'udp'], required=True), 140 port=dict(type='str'), 141 state=dict(type='str', default='present', choices=['absent', 'present']), 142 )) 143 144 module = AnsibleModule(argument_spec, 145 supports_check_mode=False) 146 147 array = get_system(module) 148 149 if module.params['state'] == 'absent': 150 delete_syslog(module, array) 151 else: 152 add_syslog(module, array) 153 154 module.exit_json(changed=False) 155 156 157if __name__ == '__main__': 158 main() 159