Skip to content

Commit 71b7db7

Browse files
authored
vmware_host_acceptance: Remove acceptance_level (#1877)
vmware_host_acceptance: Remove acceptance_level SUMMARY Fixes #1872 Removing acceptance_level and move its options to state so that acceptance_level: 'community' state: present will become state: 'community' This also means there won't be a state list anymore. In order to get information about the current acceptance level, I will introduce a new module vmware_host_acceptance_info. ISSUE TYPE Bugfix Pull Request COMPONENT NAME vmware_host_acceptance vmware_host_acceptance_info ADDITIONAL INFORMATION Reviewed-by: Alexander Nikitin <ihumster@ihumster.ru>
1 parent 1699bcf commit 71b7db7

File tree

9 files changed

+185
-73
lines changed

9 files changed

+185
-73
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
breaking_changes:
2+
- vmware_host_acceptance - Removed `acceptance_level` and used its options in `state`. This also means there will be no `state` `list` anymore.
3+
In order to get information about the current acceptance level, use the new module `vmware_host_acceptance_info`
4+
(https://github.com/ansible-collections/community.vmware/issues/1872).

meta/runtime.yml

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ action_groups:
8787
- vmware_guest_video
8888
- vmware_host
8989
- vmware_host_acceptance
90+
- vmware_host_acceptance_info
9091
- vmware_host_active_directory
9192
- vmware_host_auto_start
9293
- vmware_host_capability_info

plugins/modules/vmware_host_acceptance.py

+19-58
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,12 @@
3333
type: str
3434
state:
3535
description:
36-
- Set or list acceptance level of the given ESXi host.
37-
- 'If set to C(list), then will return current acceptance level of given host system/s.'
38-
- If set to C(present), then will set given acceptance level.
39-
choices: [ list, present ]
40-
required: false
41-
default: 'list'
42-
type: str
43-
acceptance_level:
44-
description:
45-
- Name of acceptance level.
4636
- If set to C(partner), then accept only partner and VMware signed and certified VIBs.
4737
- If set to C(vmware_certified), then accept only VIBs that are signed and certified by VMware.
4838
- If set to C(vmware_accepted), then accept VIBs that have been accepted by VMware.
4939
- If set to C(community), then accept all VIBs, even those that are not signed.
5040
choices: [ community, partner, vmware_accepted, vmware_certified ]
51-
required: false
41+
required: true
5242
type: str
5343
extends_documentation_fragment:
5444
- community.vmware.vmware.documentation
@@ -62,8 +52,7 @@
6252
username: '{{ vcenter_username }}'
6353
password: '{{ vcenter_password }}'
6454
cluster_name: cluster_name
65-
acceptance_level: 'community'
66-
state: present
55+
state: 'community'
6756
delegate_to: localhost
6857
register: cluster_acceptance_level
6958
@@ -73,18 +62,7 @@
7362
username: '{{ vcenter_username }}'
7463
password: '{{ vcenter_password }}'
7564
esxi_hostname: '{{ esxi_hostname }}'
76-
acceptance_level: 'vmware_accepted'
77-
state: present
78-
delegate_to: localhost
79-
register: host_acceptance_level
80-
81-
- name: Get acceptance level from the given ESXi Host
82-
community.vmware.vmware_host_acceptance:
83-
hostname: '{{ vcenter_hostname }}'
84-
username: '{{ vcenter_username }}'
85-
password: '{{ vcenter_password }}'
86-
esxi_hostname: '{{ esxi_hostname }}'
87-
state: list
65+
state: 'vmware_accepted'
8866
delegate_to: localhost
8967
register: host_acceptance_level
9068
'''
@@ -115,9 +93,9 @@ def __init__(self, module):
11593
self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name)
11694
self.desired_state = self.params.get('state')
11795
self.hosts_facts = {}
118-
self.acceptance_level = self.params.get('acceptance_level')
11996

120-
def gather_acceptance_facts(self):
97+
def set_acceptance_level(self):
98+
change = []
12199
for host in self.hosts:
122100
self.hosts_facts[host.name] = dict(level='', error='NA')
123101
host_image_config_mgr = host.configManager.imageConfigManager
@@ -126,60 +104,43 @@ def gather_acceptance_facts(self):
126104
self.hosts_facts[host.name]['level'] = host_image_config_mgr.HostImageConfigGetAcceptance()
127105
except vim.fault.HostConfigFault as e:
128106
self.hosts_facts[host.name]['error'] = to_native(e.msg)
129-
130-
def set_acceptance_level(self):
131-
change = []
132-
for host in self.hosts:
133107
host_changed = False
134-
if self.hosts_facts[host.name]['level'] != self.acceptance_level:
135-
host_image_config_mgr = host.configManager.imageConfigManager
136-
if host_image_config_mgr:
137-
try:
138-
if self.module.check_mode:
139-
self.hosts_facts[host.name]['level'] = self.acceptance_level
140-
else:
141-
host_image_config_mgr.UpdateHostImageAcceptanceLevel(newAcceptanceLevel=self.acceptance_level)
142-
self.hosts_facts[host.name]['level'] = host_image_config_mgr.HostImageConfigGetAcceptance()
143-
host_changed = True
144-
except vim.fault.HostConfigFault as e:
145-
self.hosts_facts[host.name]['error'] = to_native(e.msg)
108+
if self.hosts_facts[host.name]['level'] != self.desired_state:
109+
try:
110+
if self.module.check_mode:
111+
self.hosts_facts[host.name]['level'] = self.desired_state
112+
else:
113+
host_image_config_mgr.UpdateHostImageAcceptanceLevel(newAcceptanceLevel=self.desired_state)
114+
self.hosts_facts[host.name]['level'] = host_image_config_mgr.HostImageConfigGetAcceptance()
115+
host_changed = True
116+
except vim.fault.HostConfigFault as e:
117+
self.hosts_facts[host.name]['error'] = to_native(e.msg)
146118

147119
change.append(host_changed)
148120
self.module.exit_json(changed=any(change), facts=self.hosts_facts)
149121

150-
def check_acceptance_state(self):
151-
self.gather_acceptance_facts()
152-
if self.desired_state == 'list':
153-
self.module.exit_json(changed=False, facts=self.hosts_facts)
154-
self.set_acceptance_level()
155-
156122

157123
def main():
158124
argument_spec = vmware_argument_spec()
159125
argument_spec.update(
160126
cluster_name=dict(type='str', required=False),
161127
esxi_hostname=dict(type='str', required=False),
162-
acceptance_level=dict(type='str',
163-
choices=['community', 'partner', 'vmware_accepted', 'vmware_certified']
164-
),
165128
state=dict(type='str',
166-
choices=['list', 'present'],
167-
default='list'),
129+
choices=['community', 'partner', 'vmware_accepted', 'vmware_certified'],
130+
required=True
131+
),
168132
)
169133

170134
module = AnsibleModule(
171135
argument_spec=argument_spec,
172136
required_one_of=[
173137
['cluster_name', 'esxi_hostname'],
174138
],
175-
required_if=[
176-
['state', 'present', ['acceptance_level']],
177-
],
178139
supports_check_mode=True
179140
)
180141

181142
vmware_host_accept_config = VMwareAccpetanceManager(module)
182-
vmware_host_accept_config.check_acceptance_state()
143+
vmware_host_accept_config.set_acceptance_level()
183144

184145

185146
if __name__ == "__main__":
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
3+
4+
# Copyright: (c) 2018, Abhijeet Kasurde <akasurde@redhat.com>
5+
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
6+
# SPDX-License-Identifier: GPL-3.0-or-later
7+
8+
from __future__ import absolute_import, division, print_function
9+
__metaclass__ = type
10+
11+
12+
DOCUMENTATION = r'''
13+
---
14+
module: vmware_host_acceptance_info
15+
short_description: Manage the host acceptance level of an ESXi host
16+
description:
17+
- This module can be used to manage the host acceptance level of an ESXi host.
18+
- The host acceptance level controls the acceptance level of each VIB on a ESXi host.
19+
author:
20+
- Abhijeet Kasurde (@Akasurde)
21+
options:
22+
cluster_name:
23+
description:
24+
- Name of the cluster.
25+
- Acceptance level of all ESXi host system in the given cluster will be managed.
26+
- If C(esxi_hostname) is not given, this parameter is required.
27+
type: str
28+
esxi_hostname:
29+
description:
30+
- ESXi hostname.
31+
- Acceptance level of this ESXi host system will be managed.
32+
- If C(cluster_name) is not given, this parameter is required.
33+
type: str
34+
extends_documentation_fragment:
35+
- community.vmware.vmware.documentation
36+
37+
'''
38+
39+
EXAMPLES = r'''
40+
- name: Get acceptance level from the given ESXi Host
41+
community.vmware.vmware_host_acceptance_info:
42+
hostname: '{{ vcenter_hostname }}'
43+
username: '{{ vcenter_username }}'
44+
password: '{{ vcenter_password }}'
45+
esxi_hostname: '{{ esxi_hostname }}'
46+
delegate_to: localhost
47+
register: host_acceptance_level
48+
'''
49+
50+
RETURN = r'''
51+
host_acceptance_info:
52+
description:
53+
- dict with hostname as key and dict with acceptance level facts, error as value
54+
returned: facts
55+
type: dict
56+
sample: { "facts": { "localhost.localdomain": { "error": "NA", "level": "vmware_certified" }}}
57+
'''
58+
59+
try:
60+
from pyVmomi import vim
61+
except ImportError:
62+
pass
63+
from ansible.module_utils.basic import AnsibleModule
64+
from ansible_collections.community.vmware.plugins.module_utils.vmware import vmware_argument_spec, PyVmomi
65+
from ansible.module_utils._text import to_native
66+
67+
68+
class VMwareAccpetanceManager(PyVmomi):
69+
def __init__(self, module):
70+
super(VMwareAccpetanceManager, self).__init__(module)
71+
cluster_name = self.params.get('cluster_name', None)
72+
esxi_host_name = self.params.get('esxi_hostname', None)
73+
self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name)
74+
self.hosts_facts = {}
75+
76+
def gather_acceptance_info(self):
77+
for host in self.hosts:
78+
self.hosts_facts[host.name] = dict(level='', error='NA')
79+
host_image_config_mgr = host.configManager.imageConfigManager
80+
if host_image_config_mgr:
81+
try:
82+
self.hosts_facts[host.name]['level'] = host_image_config_mgr.HostImageConfigGetAcceptance()
83+
except vim.fault.HostConfigFault as e:
84+
self.hosts_facts[host.name]['error'] = to_native(e.msg)
85+
self.module.exit_json(changed=False, host_acceptance_info=self.hosts_facts)
86+
87+
88+
def main():
89+
argument_spec = vmware_argument_spec()
90+
argument_spec.update(
91+
cluster_name=dict(type='str', required=False),
92+
esxi_hostname=dict(type='str', required=False),
93+
)
94+
95+
module = AnsibleModule(
96+
argument_spec=argument_spec,
97+
required_one_of=[
98+
['cluster_name', 'esxi_hostname'],
99+
],
100+
supports_check_mode=True
101+
)
102+
103+
vmware_host_accept_config = VMwareAccpetanceManager(module)
104+
vmware_host_accept_config.gather_acceptance_info()
105+
106+
107+
if __name__ == "__main__":
108+
main()

tests/integration/targets/vmware_host_acceptance/tasks/main.yml

+28-13
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,48 @@
77
vars:
88
setup_attach_host: true
99

10-
- name: Change acceptance level of given hosts
10+
- name: Change acceptance level of given host in check mode
1111
vmware_host_acceptance:
1212
hostname: "{{ vcenter_hostname }}"
1313
username: "{{ vcenter_username }}"
1414
password: "{{ vcenter_password }}"
1515
esxi_hostname: '{{ esxi1 }}'
1616
validate_certs: false
17-
acceptance_level: community
18-
state: present
19-
register: host_acceptance_info
20-
- debug: var=host_acceptance_info
17+
state: community
18+
register: host_acceptance_community_check_mode
19+
check_mode: true
20+
- debug: var=host_acceptance_community_check_mode
2121
- assert:
2222
that:
23-
- host_acceptance_info.facts is defined
23+
- host_acceptance_community_check_mode.facts is defined
24+
- host_acceptance_community_check_mode.changed
2425

25-
- name: Change acceptance level of given hosts in check mode
26+
- name: Change acceptance level of given host
2627
vmware_host_acceptance:
2728
hostname: "{{ vcenter_hostname }}"
2829
username: "{{ vcenter_username }}"
2930
password: "{{ vcenter_password }}"
3031
esxi_hostname: '{{ esxi1 }}'
3132
validate_certs: false
32-
acceptance_level: community
33-
state: present
34-
register: host_acceptance_info_check_mode
35-
check_mode: true
36-
- debug: var=host_acceptance_info_check_mode
33+
state: community
34+
register: host_acceptance_community
35+
- debug: var=host_acceptance_community
36+
- assert:
37+
that:
38+
- host_acceptance_community.facts is defined
39+
- host_acceptance_community.changed
40+
41+
- name: Change acceptance level of given host again (idempotency)
42+
vmware_host_acceptance:
43+
hostname: "{{ vcenter_hostname }}"
44+
username: "{{ vcenter_username }}"
45+
password: "{{ vcenter_password }}"
46+
esxi_hostname: '{{ esxi1 }}'
47+
validate_certs: false
48+
state: community
49+
register: host_acceptance_community_again
50+
- debug: var=host_acceptance_community_again
3751
- assert:
3852
that:
39-
- host_acceptance_info_check_mode.facts is defined
53+
- host_acceptance_community_again.facts is defined
54+
- host_acceptance_community_again.changed is false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloud/vcenter
2+
needs/target/prepare_vmware_tests
3+
zuul/vmware/vcenter_1esxi
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Test code for the vmware_host_acceptance module.
2+
# Copyright: (c) 2018, Abhijeet Kasurde <akasurde@redhat.com>
3+
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4+
5+
- import_role:
6+
name: prepare_vmware_tests
7+
vars:
8+
setup_attach_host: true
9+
10+
- name: Gather acceptance level of given host
11+
vmware_host_acceptance_info:
12+
hostname: "{{ vcenter_hostname }}"
13+
username: "{{ vcenter_username }}"
14+
password: "{{ vcenter_password }}"
15+
esxi_hostname: '{{ esxi1 }}'
16+
validate_certs: false
17+
register: result
18+
- debug: var=result
19+
- assert:
20+
that:
21+
- result.host_acceptance_info is defined
22+
- result.changed is false

tests/sanity/ignore-2.15.txt

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
plugins/modules/vmware_deploy_ovf.py replace-urlopen!skip
22
plugins/modules/vmware_deploy_ovf.py use-argspec-type-path!skip
3-
plugins/modules/vmware_host_acceptance.py validate-modules:parameter-state-invalid-choice

tests/sanity/ignore-2.16.txt

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
plugins/modules/vmware_deploy_ovf.py replace-urlopen!skip
22
plugins/modules/vmware_deploy_ovf.py use-argspec-type-path!skip
3-
plugins/modules/vmware_host_acceptance.py validate-modules:parameter-state-invalid-choice

0 commit comments

Comments
 (0)