Server IP : 85.214.239.14 / Your IP : 3.147.60.193 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/purestorage/flashblade/plugins/modules/ |
Upload File : |
#!/usr/bin/python # -*- coding: utf-8 -*- # (c) 2021, 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: purefb_tz version_added: '1.10.0' short_description: Configure Pure Storage FlashBlade timezone description: - Configure the timezone for a Pure Storage FlashBlade. author: - Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com> options: timezone: description: - If not provided, the module will attempt to get the current local timezone from the server type: str extends_documentation_fragment: - purestorage.flashblade.purestorage.fb """ EXAMPLES = r""" - name: Set FlashBlade Timezone to Americas/Los_Angeles purestorage.flashblade.purefb_tz: timezone: "America/Los_Angeles" fb_url: 10.10.10.2 api_token: T-68618f31-0c9e-4e57-aa44-5306a2cf10e3 """ RETURN = r""" """ HAS_PURESTORAGE = True try: from pypureclient import flashblade except ImportError: HAS_PURESTORAGE = False HAS_PYTZ = True try: import pytz except ImportError: HAS_PYTX = False import os import re import platform from ansible.module_utils.common.process import get_bin_path from ansible.module_utils.facts.utils import get_file_content from ansible.module_utils.basic import AnsibleModule from ansible_collections.purestorage.flashblade.plugins.module_utils.purefb import ( get_system, purefb_argument_spec, ) MIN_REQUIRED_API_VERSION = "2.0" def _findstr(text, match): for line in text.splitlines(): if match in line: found = line return found def _get_local_tz(module, timezone="UTC"): """ We will attempt to get the local timezone of the server running the module and use that. If we can't get the timezone then we will set the default to be UTC Linnux has been tested and other opersting systems should be OK. Failures cause assumption of UTC Windows is not supported and will assume UTC """ if platform.system() == "Linux": timedatectl = get_bin_path("timedatectl") if timedatectl is not None: rcode, stdout, stderr = module.run_command(timedatectl) if rcode == 0 and stdout: line = _findstr(stdout, "Time zone") full_tz = line.split(":", 1)[1].rstrip() timezone = full_tz.split()[0] return timezone else: module.warn("Incorrect timedatectl output. Timezone will be set to UTC") else: if os.path.exists("/etc/timezone"): timezone = get_file_content("/etc/timezone") else: module.warn("Could not find /etc/timezone. Assuming UTC") elif platform.system() == "SunOS": if os.path.exists("/etc/default/init"): for line in get_file_content("/etc/default/init", "").splitlines(): if line.startswith("TZ="): timezone = line.split("=", 1)[1] return timezone else: module.warn("Could not find /etc/default/init. Assuming UTC") elif re.match("^Darwin", platform.platform()): systemsetup = get_bin_path("systemsetup") if systemsetup is not None: rcode, stdout, stderr = module.execute(systemsetup, "-gettimezone") if rcode == 0 and stdout: timezone = stdout.split(":", 1)[1].lstrip() else: module.warn("Could not run systemsetup. Assuming UTC") else: module.warn("Could not find systemsetup. Assuming UTC") elif re.match("^(Free|Net|Open)BSD", platform.platform()): if os.path.exists("/etc/timezone"): timezone = get_file_content("/etc/timezone") else: module.warn("Could not find /etc/timezone. Assuming UTC") elif platform.system() == "AIX": aix_oslevel = int(platform.version() + platform.release()) if aix_oslevel >= 61: if os.path.exists("/etc/environment"): for line in get_file_content("/etc/environment", "").splitlines(): if line.startswith("TZ="): timezone = line.split("=", 1)[1] return timezone else: module.warn("Could not find /etc/environment. Assuming UTC") else: module.warn( "Cannot determine timezone when AIX os level < 61. Assuming UTC" ) else: module.warn("Could not find /etc/timezone. Assuming UTC") return timezone def set_timezone(module, blade): """Set timezone""" changed = True if not module.check_mode: res = blade.patch_arrays(flashblade.Array(time_zone=module.params["timezone"])) if res.status_code != 200: module.fail_json( msg="Failed to timezone. Error: {0}".format(res.errors[0].message) ) module.exit_json(changed=changed) def main(): argument_spec = purefb_argument_spec() argument_spec.update( dict( timezone=dict(type="str"), ) ) module = AnsibleModule(argument_spec, supports_check_mode=True) if not HAS_PURESTORAGE: module.fail_json(msg="py-pure-client sdk is required for this module") if not HAS_PYTZ: module.fail_json(msg="pytz is required for this module") blade = get_system(module) api_version = list(blade.get_versions().items) if MIN_REQUIRED_API_VERSION not in api_version: module.fail_json( msg="FlashBlade REST version not supported. " "Minimum version required: {0}".format(MIN_REQUIRED_API_VERSION) ) if not module.params["timezone"]: module.params["timezone"] = _get_local_tz(module) if module.params["timezone"] not in pytz.all_timezones_set: module.fail_json( msg="Timezone {0} is not valid".format(module.params["timezone"]) ) blade = get_system(module) current_tz = list(blade.get_arrays().items)[0].time_zone if current_tz != module.params["timezone"]: set_timezone(module, blade) module.exit_json(changed=False) if __name__ == "__main__": main()