summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py')
-rw-r--r--lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py235
1 files changed, 0 insertions, 235 deletions
diff --git a/lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py b/lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py
deleted file mode 100644
index c3e1f510ef..0000000000
--- a/lib/ansible/modules/cloud/vmware/vmware_host_powermgmt_policy.py
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2018, Christian Kotte <christian.kotte@gmx.de>
-#
-# 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: vmware_host_powermgmt_policy
-short_description: Manages the Power Management Policy of an ESXI host system
-description:
-- This module can be used to manage the Power Management Policy of ESXi host systems in given vCenter infrastructure.
-version_added: 2.8
-author:
-- Christian Kotte (@ckotte) <christian.kotte@gmx.de>
-notes:
-- Tested on vSphere 6.5
-requirements:
-- python >= 2.6
-- PyVmomi
-options:
- policy:
- description:
- - Set the Power Management Policy of the host system.
- choices: [ 'high-performance', 'balanced', 'low-power', 'custom' ]
- default: 'balanced'
- type: str
- esxi_hostname:
- description:
- - Name of the host system to work with.
- - This is required parameter if C(cluster_name) is not specified.
- type: str
- cluster_name:
- description:
- - Name of the cluster from which all host systems will be used.
- - This is required parameter if C(esxi_hostname) is not specified.
- type: str
-extends_documentation_fragment: vmware.documentation
-'''
-
-EXAMPLES = r'''
-- name: Set the Power Management Policy of a host system to high-performance
- vmware_host_powermgmt_policy:
- hostname: '{{ vcenter_hostname }}'
- username: '{{ vcenter_username }}'
- password: '{{ vcenter_password }}'
- esxi_hostname: '{{ esxi_host }}'
- policy: high-performance
- validate_certs: no
- delegate_to: localhost
-
-- name: Set the Power Management Policy of all host systems from cluster to high-performance
- vmware_host_powermgmt_policy:
- hostname: '{{ vcenter_hostname }}'
- username: '{{ vcenter_username }}'
- password: '{{ vcenter_password }}'
- cluster_name: '{{ cluster_name }}'
- policy: high-performance
- validate_certs: no
- delegate_to: localhost
-'''
-
-RETURN = r'''
-result:
- description: metadata about host system's Power Management Policy
- returned: always
- type: dict
- sample: {
- "changed": true,
- "result": {
- "esxi01": {
- "changed": true,
- "current_state": "high-performance",
- "desired_state": "high-performance",
- "msg": "Power policy changed",
- "previous_state": "balanced"
- }
- }
- }
-'''
-
-try:
- from pyVmomi import vim, vmodl
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec
-from ansible.module_utils._text import to_native
-
-
-class VmwareHostPowerManagement(PyVmomi):
- """
- Class to manage power management policy of an ESXi host system
- """
- def __init__(self, module):
- super(VmwareHostPowerManagement, self).__init__(module)
- cluster_name = self.params.get('cluster_name')
- esxi_host_name = self.params.get('esxi_hostname')
- self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name)
- if not self.hosts:
- self.module.fail_json(msg="Failed to find host system with given configuration.")
-
- def ensure(self):
- """
- Manage power management policy of an ESXi host system
- """
- results = dict(changed=False, result=dict())
- policy = self.params.get('policy')
- host_change_list = []
- power_policies = {
- 'high-performance': {
- 'key': 1,
- 'short_name': 'static'
- },
- 'balanced': {
- 'key': 2,
- 'short_name': 'dynamic'
- },
- 'low-power': {
- 'key': 3,
- 'short_name': 'low'
- },
- 'custom': {
- 'key': 4,
- 'short_name': 'custom'
- }
- }
-
- for host in self.hosts:
- changed = False
- results['result'][host.name] = dict(msg='')
-
- power_system = host.configManager.powerSystem
-
- # get current power policy
- power_system_info = power_system.info
- current_host_power_policy = power_system_info.currentPolicy
-
- # the "name" and "description" parameters are pretty useless
- # they store only strings containing "PowerPolicy.<shortName>.name" and "PowerPolicy.<shortName>.description"
- if current_host_power_policy.shortName == "static":
- current_policy = 'high-performance'
- elif current_host_power_policy.shortName == "dynamic":
- current_policy = 'balanced'
- elif current_host_power_policy.shortName == "low":
- current_policy = 'low-power'
- elif current_host_power_policy.shortName == "custom":
- current_policy = 'custom'
-
- results['result'][host.name]['desired_state'] = policy
-
- # Don't do anything if the power policy is already configured
- if current_host_power_policy.key == power_policies[policy]['key']:
- results['result'][host.name]['changed'] = changed
- results['result'][host.name]['previous_state'] = current_policy
- results['result'][host.name]['current_state'] = policy
- results['result'][host.name]['msg'] = "Power policy is already configured"
- else:
- # get available power policies and check if policy is included
- supported_policy = False
- power_system_capability = power_system.capability
- available_host_power_policies = power_system_capability.availablePolicy
- for available_policy in available_host_power_policies:
- if available_policy.shortName == power_policies[policy]['short_name']:
- supported_policy = True
- if supported_policy:
- if not self.module.check_mode:
- try:
- power_system.ConfigurePowerPolicy(key=power_policies[policy]['key'])
- changed = True
- results['result'][host.name]['changed'] = True
- results['result'][host.name]['msg'] = "Power policy changed"
- except vmodl.fault.InvalidArgument:
- self.module.fail_json(msg="Invalid power policy key provided for host '%s'" % host.name)
- except vim.fault.HostConfigFault as host_config_fault:
- self.module.fail_json(msg="Failed to configure power policy for host '%s': %s" %
- (host.name, to_native(host_config_fault.msg)))
- else:
- changed = True
- results['result'][host.name]['changed'] = True
- results['result'][host.name]['msg'] = "Power policy will be changed"
- results['result'][host.name]['previous_state'] = current_policy
- results['result'][host.name]['current_state'] = policy
- else:
- changed = False
- results['result'][host.name]['changed'] = changed
- results['result'][host.name]['previous_state'] = current_policy
- results['result'][host.name]['current_state'] = current_policy
- self.module.fail_json(msg="Power policy '%s' isn't supported for host '%s'" %
- (policy, host.name))
-
- host_change_list.append(changed)
-
- if any(host_change_list):
- results['changed'] = True
- self.module.exit_json(**results)
-
-
-def main():
- """
- Main
- """
- argument_spec = vmware_argument_spec()
- argument_spec.update(
- policy=dict(type='str', default='balanced',
- choices=['high-performance', 'balanced', 'low-power', 'custom']),
- esxi_hostname=dict(type='str', required=False),
- cluster_name=dict(type='str', required=False),
- )
-
- module = AnsibleModule(argument_spec=argument_spec,
- required_one_of=[
- ['cluster_name', 'esxi_hostname'],
- ],
- supports_check_mode=True
- )
-
- host_power_management = VmwareHostPowerManagement(module)
- host_power_management.ensure()
-
-
-if __name__ == '__main__':
- main()