summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/vmware/vmware_resource_pool.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/vmware/vmware_resource_pool.py')
-rw-r--r--lib/ansible/modules/cloud/vmware/vmware_resource_pool.py322
1 files changed, 0 insertions, 322 deletions
diff --git a/lib/ansible/modules/cloud/vmware/vmware_resource_pool.py b/lib/ansible/modules/cloud/vmware/vmware_resource_pool.py
deleted file mode 100644
index 5cc8e09a0a..0000000000
--- a/lib/ansible/modules/cloud/vmware/vmware_resource_pool.py
+++ /dev/null
@@ -1,322 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2017, Davis Phillips davis.phillips@gmail.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 = '''
----
-module: vmware_resource_pool
-short_description: Add/remove resource pools to/from vCenter
-description:
- - This module can be used to add/remove a resource pool to/from vCenter
-version_added: 2.3
-author:
-- Davis Phillips (@dav1x)
-notes:
- - Tested on vSphere 6.5
-requirements:
- - "python >= 2.6"
- - PyVmomi
-options:
- datacenter:
- description:
- - Name of the datacenter to add the host.
- required: True
- type: str
- cluster:
- description:
- - Name of the cluster to add the host.
- required: True
- type: str
- resource_pool:
- description:
- - Resource pool name to manage.
- required: True
- type: str
- cpu_expandable_reservations:
- description:
- - In a resource pool with an expandable reservation, the reservation on a resource pool can grow beyond the specified value.
- default: True
- type: bool
- cpu_reservation:
- description:
- - Amount of resource that is guaranteed available to the virtual machine or resource pool.
- default: 0
- type: int
- cpu_limit:
- description:
- - The utilization of a virtual machine/resource pool will not exceed this limit, even if there are available resources.
- - The default value -1 indicates no limit.
- default: -1
- type: int
- cpu_shares:
- description:
- - Memory shares are used in case of resource contention.
- choices:
- - high
- - custom
- - low
- - normal
- default: normal
- type: str
- mem_expandable_reservations:
- description:
- - In a resource pool with an expandable reservation, the reservation on a resource pool can grow beyond the specified value.
- default: True
- type: bool
- mem_reservation:
- description:
- - Amount of resource that is guaranteed available to the virtual machine or resource pool.
- default: 0
- type: int
- mem_limit:
- description:
- - The utilization of a virtual machine/resource pool will not exceed this limit, even if there are available resources.
- - The default value -1 indicates no limit.
- default: -1
- type: int
- mem_shares:
- description:
- - Memory shares are used in case of resource contention.
- choices:
- - high
- - custom
- - low
- - normal
- default: normal
- type: str
- state:
- description:
- - Add or remove the resource pool
- default: 'present'
- choices:
- - 'present'
- - 'absent'
- type: str
-extends_documentation_fragment: vmware.documentation
-'''
-
-EXAMPLES = '''
-- name: Add resource pool to vCenter
- vmware_resource_pool:
- hostname: '{{ vcenter_hostname }}'
- username: '{{ vcenter_username }}'
- password: '{{ vcenter_password }}'
- datacenter: '{{ datacenter_name }}'
- cluster: '{{ cluster_name }}'
- resource_pool: '{{ resource_pool_name }}'
- mem_shares: normal
- mem_limit: -1
- mem_reservation: 0
- mem_expandable_reservations: yes
- cpu_shares: normal
- cpu_limit: -1
- cpu_reservation: 0
- cpu_expandable_reservations: yes
- state: present
- delegate_to: localhost
-'''
-
-RETURN = """
-instance:
- description: metadata about the new resource pool
- returned: always
- type: dict
- sample: None
-"""
-
-try:
- from pyVmomi import vim, vmodl
- HAS_PYVMOMI = True
-except ImportError:
- HAS_PYVMOMI = False
-
-from ansible.module_utils.vmware import get_all_objs, connect_to_api, vmware_argument_spec, find_datacenter_by_name, \
- find_cluster_by_name, wait_for_task, find_host_by_cluster_datacenter
-from ansible.module_utils.basic import AnsibleModule
-
-
-class VMwareResourcePool(object):
-
- def __init__(self, module):
- self.module = module
- self.datacenter = module.params['datacenter']
- self.cluster = module.params['cluster']
- self.resource_pool = module.params['resource_pool']
- self.hostname = module.params['hostname']
- self.username = module.params['username']
- self.password = module.params['password']
- self.state = module.params['state']
- self.mem_shares = module.params['mem_shares']
- self.mem_limit = module.params['mem_limit']
- self.mem_reservation = module.params['mem_reservation']
- self.mem_expandable_reservations = module.params[
- 'cpu_expandable_reservations']
- self.cpu_shares = module.params['cpu_shares']
- self.cpu_limit = module.params['cpu_limit']
- self.cpu_reservation = module.params['cpu_reservation']
- self.cpu_expandable_reservations = module.params[
- 'cpu_expandable_reservations']
- self.dc_obj = None
- self.cluster_obj = None
- self.host_obj = None
- self.resource_pool_obj = None
- self.content = connect_to_api(module)
-
- def select_resource_pool(self, host):
- pool_obj = None
-
- resource_pools = get_all_objs(self.content, [vim.ResourcePool])
-
- pool_selections = self.get_obj(
- [vim.ResourcePool],
- self.resource_pool,
- return_all=True
- )
- if pool_selections:
- for p in pool_selections:
- if p in resource_pools:
- pool_obj = p
- break
- return pool_obj
-
- def get_obj(self, vimtype, name, return_all=False):
- obj = list()
- container = self.content.viewManager.CreateContainerView(
- self.content.rootFolder, vimtype, True)
-
- for c in container.view:
- if name in [c.name, c._GetMoId()]:
- if return_all is False:
- return c
- else:
- obj.append(c)
-
- if len(obj) > 0:
- return obj
- else:
- # for backwards-compat
- return None
-
- def process_state(self):
- try:
- rp_states = {
- 'absent': {
- 'present': self.state_remove_rp,
- 'absent': self.state_exit_unchanged,
- },
- 'present': {
- 'present': self.state_exit_unchanged,
- 'absent': self.state_add_rp,
- }
- }
-
- rp_states[self.state][self.check_rp_state()]()
-
- except vmodl.RuntimeFault as runtime_fault:
- self.module.fail_json(msg=runtime_fault.msg)
- except vmodl.MethodFault as method_fault:
- self.module.fail_json(msg=method_fault.msg)
- except Exception as e:
- self.module.fail_json(msg=str(e))
-
- def state_exit_unchanged(self):
- self.module.exit_json(changed=False)
-
- def state_remove_rp(self):
- changed = True
- result = None
- resource_pool = self.select_resource_pool(self.host_obj)
- try:
- task = self.resource_pool_obj.Destroy()
- success, result = wait_for_task(task)
-
- except Exception:
- self.module.fail_json(msg="Failed to remove resource pool '%s' '%s'" % (
- self.resource_pool, resource_pool))
- self.module.exit_json(changed=changed, result=str(result))
-
- def state_add_rp(self):
- changed = True
-
- rp_spec = vim.ResourceConfigSpec()
- cpu_alloc = vim.ResourceAllocationInfo()
- cpu_alloc.expandableReservation = self.cpu_expandable_reservations
- cpu_alloc.limit = int(self.cpu_limit)
- cpu_alloc.reservation = int(self.cpu_reservation)
- cpu_alloc_shares = vim.SharesInfo()
- cpu_alloc_shares.level = self.cpu_shares
- cpu_alloc.shares = cpu_alloc_shares
- rp_spec.cpuAllocation = cpu_alloc
- mem_alloc = vim.ResourceAllocationInfo()
- mem_alloc.limit = int(self.mem_limit)
- mem_alloc.expandableReservation = self.mem_expandable_reservations
- mem_alloc.reservation = int(self.mem_reservation)
- mem_alloc_shares = vim.SharesInfo()
- mem_alloc_shares.level = self.mem_shares
- mem_alloc.shares = mem_alloc_shares
- rp_spec.memoryAllocation = mem_alloc
-
- self.dc_obj = find_datacenter_by_name(self.content, self.datacenter)
- if self.dc_obj is None:
- self.module.fail_json(msg="Unable to find datacenter with name %s" % self.datacenter)
-
- self.cluster_obj = find_cluster_by_name(self.content, self.cluster, datacenter=self.dc_obj)
- if self.cluster_obj is None:
- self.module.fail_json(msg="Unable to find cluster with name %s" % self.cluster)
- rootResourcePool = self.cluster_obj.resourcePool
- rootResourcePool.CreateResourcePool(self.resource_pool, rp_spec)
-
- self.module.exit_json(changed=changed)
-
- def check_rp_state(self):
-
- self.host_obj, self.cluster_obj = find_host_by_cluster_datacenter(self.module, self.content, self.datacenter,
- self.cluster, self.hostname)
- self.resource_pool_obj = self.select_resource_pool(self.host_obj)
-
- if self.resource_pool_obj is None:
- return 'absent'
- else:
- return 'present'
-
-
-def main():
- argument_spec = vmware_argument_spec()
- argument_spec.update(dict(datacenter=dict(required=True, type='str'),
- cluster=dict(required=True, type='str'),
- resource_pool=dict(required=True, type='str'),
- mem_shares=dict(type='str', default="normal", choices=[
- 'high', 'custom', 'normal', 'low']),
- mem_limit=dict(type='int', default=-1),
- mem_reservation=dict(type='int', default=0),
- mem_expandable_reservations=dict(
- type='bool', default="True"),
- cpu_shares=dict(type='str', default="normal", choices=[
- 'high', 'custom', 'normal', 'low']),
- cpu_limit=dict(type='int', default=-1),
- cpu_reservation=dict(type='int', default=0),
- cpu_expandable_reservations=dict(
- type='bool', default="True"),
- state=dict(default='present', choices=['present', 'absent'], type='str')))
-
- module = AnsibleModule(argument_spec=argument_spec,
- supports_check_mode=True)
-
- if not HAS_PYVMOMI:
- module.fail_json(msg='pyvmomi is required for this module')
-
- vmware_rp = VMwareResourcePool(module)
- vmware_rp.process_state()
-
-
-if __name__ == '__main__':
- main()