1#!/usr/local/bin/python3.8 2# -*- coding: utf-8 -*- 3 4# (c) 2019, 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 9__metaclass__ = type 10 11ANSIBLE_METADATA = { 12 "metadata_version": "1.1", 13 "status": ["preview"], 14 "supported_by": "community", 15} 16 17DOCUMENTATION = r""" 18--- 19module: purefb_proxy 20version_added: '1.0.0' 21author: 22 - Pure Storage ansible Team (@sdodsley) <pure-ansible-team@purestorage.com> 23short_description: Configure FlashBlade phonehome HTTPs proxy settings 24description: 25- Set or erase configuration for the HTTPS phonehome proxy settings. 26options: 27 state: 28 description: 29 - Set or delete proxy configuration 30 default: present 31 type: str 32 choices: [ absent, present ] 33 host: 34 description: 35 - The proxy host name. 36 type: str 37 port: 38 description: 39 - The proxy TCP/IP port number. 40 type: int 41extends_documentation_fragment: 42- purestorage.flashblade.purestorage.fb 43""" 44 45EXAMPLES = r""" 46- name: Delete exisitng proxy settings 47 purefb_proxy: 48 state: absent 49 fb_url: 10.10.10.2 50 api_token: e31060a7-21fc-e277-6240-25983c6c4592 51 52- name: Set proxy settings 53 purefb_proxy: 54 host: purestorage.com 55 port: 8080 56 fb_url: 10.10.10.2 57 api_token: e31060a7-21fc-e277-6240-25983c6c4592 58""" 59 60RETURN = r""" 61""" 62 63HAS_PURITY_FB = True 64try: 65 from purity_fb import Support 66except ImportError: 67 HAS_PURITY_FB = False 68 69 70from ansible.module_utils.basic import AnsibleModule 71from ansible_collections.purestorage.flashblade.plugins.module_utils.purefb import ( 72 get_blade, 73 purefb_argument_spec, 74) 75 76 77def delete_proxy(module, blade): 78 """Delete proxy settings""" 79 changed = False 80 current_proxy = blade.support.list_support().items[0].proxy 81 if current_proxy != "": 82 changed = True 83 if not module.check_mode: 84 try: 85 proxy_settings = Support(proxy="") 86 blade.support.update_support(support=proxy_settings) 87 except Exception: 88 module.fail_json(msg="Delete proxy settigs failed") 89 module.exit_json(changed=changed) 90 91 92def create_proxy(module, blade): 93 """Set proxy settings""" 94 changed = False 95 current_proxy = blade.support.list_support().items[0].proxy 96 if current_proxy is not None: 97 changed = True 98 if not module.check_mode: 99 new_proxy = ( 100 "https://" + module.params["host"] + ":" + str(module.params["port"]) 101 ) 102 if new_proxy != current_proxy: 103 try: 104 proxy_settings = Support(proxy=new_proxy) 105 blade.support.update_support(support=proxy_settings) 106 except Exception: 107 module.fail_json(msg="Set phone home proxy failed.") 108 109 module.exit_json(changed=changed) 110 111 112def main(): 113 argument_spec = purefb_argument_spec() 114 argument_spec.update( 115 dict( 116 state=dict(type="str", default="present", choices=["absent", "present"]), 117 host=dict(type="str"), 118 port=dict(type="int"), 119 ) 120 ) 121 122 required_together = [["host", "port"]] 123 124 module = AnsibleModule( 125 argument_spec, required_together=required_together, supports_check_mode=True 126 ) 127 128 if not HAS_PURITY_FB: 129 module.fail_json(msg="purity_fb SDK is required for this module") 130 131 state = module.params["state"] 132 blade = get_blade(module) 133 134 if state == "absent": 135 delete_proxy(module, blade) 136 elif state == "present": 137 create_proxy(module, blade) 138 else: 139 module.exit_json(changed=False) 140 141 142if __name__ == "__main__": 143 main() 144