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