VMware: Add advanced settings to vmware_cluster_drs (#66233)
* VMware: Add advanced settings to vmware_cluster_drs * Add DRS advcanced settings example
This commit is contained in:
parent
9b7198d25e
commit
864a3fd59d
3 changed files with 81 additions and 12 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- vmware_cluster_drs - Implemented DRS advanced settings (https://github.com/ansible/ansible/issues/66217)
|
|
@ -70,6 +70,12 @@ options:
|
||||||
type: int
|
type: int
|
||||||
default: 3
|
default: 3
|
||||||
choices: [ 1, 2, 3, 4, 5 ]
|
choices: [ 1, 2, 3, 4, 5 ]
|
||||||
|
advanced_settings:
|
||||||
|
version_added: "2.10"
|
||||||
|
description:
|
||||||
|
- A dictionary of advanced DRS settings.
|
||||||
|
default: {}
|
||||||
|
type: dict
|
||||||
extends_documentation_fragment: vmware.documentation
|
extends_documentation_fragment: vmware.documentation
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -84,6 +90,18 @@ EXAMPLES = r"""
|
||||||
enable_drs: yes
|
enable_drs: yes
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Enable DRS and distribute a more even number of virtual machines across hosts for availability
|
||||||
|
vmware_cluster_drs:
|
||||||
|
hostname: '{{ vcenter_hostname }}'
|
||||||
|
username: '{{ vcenter_username }}'
|
||||||
|
password: '{{ vcenter_password }}'
|
||||||
|
datacenter_name: datacenter
|
||||||
|
cluster_name: cluster
|
||||||
|
enable_drs: yes
|
||||||
|
advanced_settings:
|
||||||
|
'TryBalanceVmsPerHost': '1'
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: Enable DRS and set default VM behavior to partially automated
|
- name: Enable DRS and set default VM behavior to partially automated
|
||||||
vmware_cluster_drs:
|
vmware_cluster_drs:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -107,7 +125,7 @@ except ImportError:
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.vmware import (PyVmomi, TaskError, find_datacenter_by_name,
|
from ansible.module_utils.vmware import (PyVmomi, TaskError, find_datacenter_by_name,
|
||||||
vmware_argument_spec, wait_for_task)
|
vmware_argument_spec, wait_for_task, option_diff)
|
||||||
from ansible.module_utils._text import to_native
|
from ansible.module_utils._text import to_native
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,6 +146,12 @@ class VMwareCluster(PyVmomi):
|
||||||
if self.cluster is None:
|
if self.cluster is None:
|
||||||
self.module.fail_json(msg="Cluster %s does not exist." % self.cluster_name)
|
self.module.fail_json(msg="Cluster %s does not exist." % self.cluster_name)
|
||||||
|
|
||||||
|
self.advanced_settings = self.params.get('advanced_settings')
|
||||||
|
if self.advanced_settings:
|
||||||
|
self.changed_advanced_settings = option_diff(self.advanced_settings, self.cluster.configurationEx.drsConfig.option)
|
||||||
|
else:
|
||||||
|
self.changed_advanced_settings = None
|
||||||
|
|
||||||
def check_drs_config_diff(self):
|
def check_drs_config_diff(self):
|
||||||
"""
|
"""
|
||||||
Check DRS configuration diff
|
Check DRS configuration diff
|
||||||
|
@ -141,6 +165,10 @@ class VMwareCluster(PyVmomi):
|
||||||
drs_config.defaultVmBehavior != self.params.get('drs_default_vm_behavior') or \
|
drs_config.defaultVmBehavior != self.params.get('drs_default_vm_behavior') or \
|
||||||
drs_config.vmotionRate != self.params.get('drs_vmotion_rate'):
|
drs_config.vmotionRate != self.params.get('drs_vmotion_rate'):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
if self.changed_advanced_settings:
|
||||||
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def configure_drs(self):
|
def configure_drs(self):
|
||||||
|
@ -158,6 +186,10 @@ class VMwareCluster(PyVmomi):
|
||||||
cluster_config_spec.drsConfig.enableVmBehaviorOverrides = self.params.get('drs_enable_vm_behavior_overrides')
|
cluster_config_spec.drsConfig.enableVmBehaviorOverrides = self.params.get('drs_enable_vm_behavior_overrides')
|
||||||
cluster_config_spec.drsConfig.defaultVmBehavior = self.params.get('drs_default_vm_behavior')
|
cluster_config_spec.drsConfig.defaultVmBehavior = self.params.get('drs_default_vm_behavior')
|
||||||
cluster_config_spec.drsConfig.vmotionRate = self.params.get('drs_vmotion_rate')
|
cluster_config_spec.drsConfig.vmotionRate = self.params.get('drs_vmotion_rate')
|
||||||
|
|
||||||
|
if self.changed_advanced_settings:
|
||||||
|
cluster_config_spec.drsConfig.option = self.changed_advanced_settings
|
||||||
|
|
||||||
try:
|
try:
|
||||||
task = self.cluster.ReconfigureComputeResource_Task(cluster_config_spec, True)
|
task = self.cluster.ReconfigureComputeResource_Task(cluster_config_spec, True)
|
||||||
changed, result = wait_for_task(task)
|
changed, result = wait_for_task(task)
|
||||||
|
@ -190,6 +222,7 @@ def main():
|
||||||
drs_vmotion_rate=dict(type='int',
|
drs_vmotion_rate=dict(type='int',
|
||||||
choices=range(1, 6),
|
choices=range(1, 6),
|
||||||
default=3),
|
default=3),
|
||||||
|
advanced_settings=dict(type='dict', default=dict(), required=False),
|
||||||
))
|
))
|
||||||
|
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
|
|
|
@ -50,14 +50,48 @@
|
||||||
that:
|
that:
|
||||||
- "{{ cluster_drs_result_0002.changed == true }}"
|
- "{{ cluster_drs_result_0002.changed == true }}"
|
||||||
|
|
||||||
# Delete test cluster
|
- when: vcsim is not defined
|
||||||
- name: Delete test cluster
|
block:
|
||||||
vmware_cluster:
|
- name: Change advanced setting "TryBalanceVmsPerHost" (check-mode)
|
||||||
validate_certs: False
|
vmware_cluster_drs: &change_balance_vms
|
||||||
hostname: "{{ vcenter_hostname }}"
|
validate_certs: False
|
||||||
username: "{{ vcenter_username }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
password: "{{ vcenter_password }}"
|
username: "{{ vcenter_username }}"
|
||||||
datacenter_name: "{{ dc1 }}"
|
password: "{{ vcenter_password }}"
|
||||||
cluster_name: test_cluster_drs
|
datacenter_name: "{{ dc1 }}"
|
||||||
state: absent
|
cluster_name: test_cluster_drs
|
||||||
when: vcsim is not defined
|
advanced_settings:
|
||||||
|
'TryBalanceVmsPerHost': '1'
|
||||||
|
check_mode: yes
|
||||||
|
register: change_balance_vms_check
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- change_balance_vms_check.changed
|
||||||
|
|
||||||
|
- name: Change advanced setting "TryBalanceVmsPerHost"
|
||||||
|
vmware_cluster_drs: *change_balance_vms
|
||||||
|
register: change_balance_vms
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- change_balance_vms.changed
|
||||||
|
|
||||||
|
- name: Change advanced setting "TryBalanceVmsPerHost" again
|
||||||
|
vmware_cluster_drs: *change_balance_vms
|
||||||
|
register: change_balance_vms_again
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- not change_balance_vms_again.changed
|
||||||
|
|
||||||
|
# Delete test cluster
|
||||||
|
- name: Delete test cluster
|
||||||
|
vmware_cluster:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter_name: "{{ dc1 }}"
|
||||||
|
cluster_name: test_cluster_drs
|
||||||
|
state: absent
|
||||||
|
|
Loading…
Reference in a new issue