mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-09 09:54:02 -07:00
Implement vmware_argument_spec for required params (#25731)
Without the fix hostname, username and password params used to skip required check. Fixes #25696 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
007a3b9c9b
commit
ede82e2130
5 changed files with 83 additions and 118 deletions
|
@ -311,12 +311,11 @@ instance:
|
||||||
sample: None
|
sample: None
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
|
|
||||||
|
import time
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.pycompat24 import get_exception
|
from ansible.module_utils.pycompat24 import get_exception
|
||||||
from ansible.module_utils.vmware import connect_to_api, find_obj, gather_vm_facts, get_all_objs, compile_folder_path_for_object
|
from ansible.module_utils.vmware import connect_to_api, find_obj, gather_vm_facts, get_all_objs, compile_folder_path_for_object, vmware_argument_spec
|
||||||
from ansible.module_utils.vmware import serialize_spec
|
from ansible.module_utils.vmware import serialize_spec
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -1461,42 +1460,40 @@ class PyVmomiHelper(object):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module = AnsibleModule(
|
argument_spec = vmware_argument_spec()
|
||||||
argument_spec=dict(
|
argument_spec.update(
|
||||||
hostname=dict(type='str', default=os.environ.get('VMWARE_HOST')),
|
state=dict(type='str', default='present',
|
||||||
username=dict(type='str', default=os.environ.get('VMWARE_USER')),
|
choices=['absent', 'poweredoff', 'poweredon', 'present', 'rebootguest', 'restarted', 'shutdownguest', 'suspended']),
|
||||||
password=dict(type='str', default=os.environ.get('VMWARE_PASSWORD'), no_log=True),
|
template=dict(type='str', aliases=['template_src']),
|
||||||
state=dict(type='str', default='present',
|
is_template=dict(type='bool', default=False),
|
||||||
choices=['absent', 'poweredoff', 'poweredon', 'present', 'rebootguest', 'restarted', 'shutdownguest', 'suspended']),
|
annotation=dict(type='str', aliases=['notes']),
|
||||||
validate_certs=dict(type='bool', default=True),
|
customvalues=dict(type='list', default=[]),
|
||||||
template=dict(type='str', aliases=['template_src']),
|
name=dict(type='str', required=True),
|
||||||
is_template=dict(type='bool', default=False),
|
name_match=dict(type='str', default='first'),
|
||||||
annotation=dict(type='str', aliases=['notes']),
|
uuid=dict(type='str'),
|
||||||
customvalues=dict(type='list', default=[]),
|
folder=dict(type='str', default='/vm'),
|
||||||
name=dict(type='str', required=True),
|
guest_id=dict(type='str'),
|
||||||
name_match=dict(type='str', default='first'),
|
disk=dict(type='list', default=[]),
|
||||||
uuid=dict(type='str'),
|
hardware=dict(type='dict', default={}),
|
||||||
folder=dict(type='str', default='/vm'),
|
force=dict(type='bool', default=False),
|
||||||
guest_id=dict(type='str'),
|
datacenter=dict(type='str', default='ha-datacenter'),
|
||||||
disk=dict(type='list', default=[]),
|
esxi_hostname=dict(type='str'),
|
||||||
hardware=dict(type='dict', default={}),
|
cluster=dict(type='str'),
|
||||||
force=dict(type='bool', default=False),
|
wait_for_ip_address=dict(type='bool', default=False),
|
||||||
datacenter=dict(type='str', default='ha-datacenter'),
|
snapshot_src=dict(type='str'),
|
||||||
esxi_hostname=dict(type='str'),
|
linked_clone=dict(type='bool', default=False),
|
||||||
cluster=dict(type='str'),
|
networks=dict(type='list', default=[]),
|
||||||
wait_for_ip_address=dict(type='bool', default=False),
|
resource_pool=dict(type='str'),
|
||||||
snapshot_src=dict(type='str'),
|
customization=dict(type='dict', default={}, no_log=True),
|
||||||
linked_clone=dict(type='bool', default=False),
|
|
||||||
networks=dict(type='list', default=[]),
|
|
||||||
resource_pool=dict(type='str'),
|
|
||||||
customization=dict(type='dict', default={}, no_log=True),
|
|
||||||
),
|
|
||||||
supports_check_mode=True,
|
|
||||||
mutually_exclusive=[
|
|
||||||
['cluster', 'esxi_hostname'],
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
|
supports_check_mode=True,
|
||||||
|
mutually_exclusive=[
|
||||||
|
['cluster', 'esxi_hostname'],
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
result = {'failed': False, 'changed': False}
|
result = {'failed': False, 'changed': False}
|
||||||
|
|
||||||
# FindByInventoryPath() does not require an absolute path
|
# FindByInventoryPath() does not require an absolute path
|
||||||
|
|
|
@ -41,6 +41,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM to work with
|
- Name of the VM to work with
|
||||||
|
- This is required if UUID is not supplied.
|
||||||
name_match:
|
name_match:
|
||||||
description:
|
description:
|
||||||
- If multiple VMs matching the name, use the first or last found
|
- If multiple VMs matching the name, use the first or last found
|
||||||
|
@ -95,10 +96,9 @@ instance:
|
||||||
sample: None
|
sample: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.vmware import connect_to_api, find_vm_by_id, gather_vm_facts
|
|
||||||
from ansible.module_utils._text import to_text
|
from ansible.module_utils._text import to_text
|
||||||
|
from ansible.module_utils.vmware import connect_to_api, find_vm_by_id, gather_vm_facts, vmware_argument_spec
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
|
@ -152,29 +152,16 @@ class PyVmomiHelper(object):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module = AnsibleModule(
|
argument_spec = vmware_argument_spec()
|
||||||
argument_spec=dict(
|
argument_spec.update(
|
||||||
hostname=dict(
|
name=dict(type='str'),
|
||||||
type='str',
|
name_match=dict(type='str', default='first'),
|
||||||
default=os.environ.get('VMWARE_HOST')
|
uuid=dict(type='str'),
|
||||||
),
|
folder=dict(type='str', default='/vm'),
|
||||||
username=dict(
|
datacenter=dict(type='str', required=True),
|
||||||
type='str',
|
|
||||||
default=os.environ.get('VMWARE_USER')
|
|
||||||
),
|
|
||||||
password=dict(
|
|
||||||
type='str', no_log=True,
|
|
||||||
default=os.environ.get('VMWARE_PASSWORD')
|
|
||||||
),
|
|
||||||
validate_certs=dict(required=False, type='bool', default=True),
|
|
||||||
name=dict(required=False, type='str'),
|
|
||||||
name_match=dict(required=False, type='str', default='first'),
|
|
||||||
uuid=dict(required=False, type='str'),
|
|
||||||
folder=dict(required=False, type='str', default='/vm'),
|
|
||||||
datacenter=dict(required=True, type='str'),
|
|
||||||
),
|
|
||||||
required_one_of=[['name', 'uuid']],
|
|
||||||
)
|
)
|
||||||
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
|
required_one_of=[['name', 'uuid']])
|
||||||
|
|
||||||
# FindByInventoryPath() does not require an absolute path
|
# FindByInventoryPath() does not require an absolute path
|
||||||
# so we should leave the input folder path unmodified
|
# so we should leave the input folder path unmodified
|
||||||
|
|
|
@ -76,11 +76,9 @@ RETURN = """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# import module snippets
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils._text import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.module_utils.vmware import connect_to_api, gather_vm_facts, get_all_objs, compile_folder_path_for_object
|
from ansible.module_utils.vmware import connect_to_api, gather_vm_facts, get_all_objs, compile_folder_path_for_object, vmware_argument_spec
|
||||||
|
|
||||||
|
|
||||||
HAS_PYVMOMI = False
|
HAS_PYVMOMI = False
|
||||||
|
@ -230,27 +228,15 @@ def get_obj(content, vimtype, name):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module = AnsibleModule(
|
argument_spec = vmware_argument_spec()
|
||||||
argument_spec=dict(
|
argument_spec.update(
|
||||||
hostname=dict(
|
name=dict(type='str'),
|
||||||
type='str',
|
uuid=dict(type='str'),
|
||||||
default=os.environ.get('VMWARE_HOST')
|
datacenter=dict(type='str', required=True)
|
||||||
),
|
|
||||||
username=dict(
|
|
||||||
type='str',
|
|
||||||
default=os.environ.get('VMWARE_USER')
|
|
||||||
),
|
|
||||||
password=dict(
|
|
||||||
type='str', no_log=True,
|
|
||||||
default=os.environ.get('VMWARE_PASSWORD')
|
|
||||||
),
|
|
||||||
validate_certs=dict(required=False, type='bool', default=True),
|
|
||||||
name=dict(required=False, type='str'),
|
|
||||||
uuid=dict(required=False, type='str'),
|
|
||||||
datacenter=dict(required=True, type='str'),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
|
required_one_of=[['name', 'uuid']])
|
||||||
pyv = PyVmomiHelper(module)
|
pyv = PyVmomiHelper(module)
|
||||||
# Check if the VM exists before continuing
|
# Check if the VM exists before continuing
|
||||||
folders = pyv.getvm_folder_paths(
|
folders = pyv.getvm_folder_paths(
|
||||||
|
|
|
@ -172,13 +172,11 @@ instance:
|
||||||
sample: None
|
sample: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
|
|
||||||
# import module snippets
|
import time
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible.module_utils.vmware import connect_to_api
|
|
||||||
from ansible.module_utils._text import to_native
|
from ansible.module_utils._text import to_native
|
||||||
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
from ansible.module_utils.vmware import connect_to_api, vmware_argument_spec
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
|
@ -321,37 +319,21 @@ class PyVmomiHelper(object):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module = AnsibleModule(
|
argument_spec = vmware_argument_spec()
|
||||||
argument_spec=dict(
|
argument_spec.update(
|
||||||
hostname=dict(
|
state=dict(default='present', choices=['present', 'absent', 'revert', 'remove_all']),
|
||||||
type='str',
|
name=dict(required=True, type='str'),
|
||||||
default=os.environ.get('VMWARE_HOST')
|
name_match=dict(type='str', default='first'),
|
||||||
),
|
uuid=dict(type='str'),
|
||||||
username=dict(
|
folder=dict(type='str', default='/vm'),
|
||||||
type='str',
|
datacenter=dict(required=True, type='str'),
|
||||||
default=os.environ.get('VMWARE_USER')
|
snapshot_name=dict(type='str'),
|
||||||
),
|
description=dict(type='str', default=''),
|
||||||
password=dict(
|
quiesce=dict(type='bool', default=False),
|
||||||
type='str', no_log=True,
|
memory_dump=dict(type='bool', default=False),
|
||||||
default=os.environ.get('VMWARE_PASSWORD')
|
remove_children=dict(type='bool', default=False),
|
||||||
),
|
|
||||||
state=dict(
|
|
||||||
required=False,
|
|
||||||
choices=['present', 'absent', 'revert', 'remove_all'],
|
|
||||||
default='present'),
|
|
||||||
validate_certs=dict(required=False, type='bool', default=True),
|
|
||||||
name=dict(required=True, type='str'),
|
|
||||||
name_match=dict(required=False, type='str', default='first'),
|
|
||||||
uuid=dict(required=False, type='str'),
|
|
||||||
folder=dict(required=False, type='str', default='/vm'),
|
|
||||||
datacenter=dict(required=True, type='str'),
|
|
||||||
snapshot_name=dict(required=False, type='str'),
|
|
||||||
description=dict(required=False, type='str', default=''),
|
|
||||||
quiesce=dict(type='bool', default=False),
|
|
||||||
memory_dump=dict(type='bool', default=False),
|
|
||||||
remove_children=dict(type='bool', default=False),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
module = AnsibleModule(argument_spec=argument_spec)
|
||||||
|
|
||||||
# Prepend /vm if it was missing from the folder path, also strip trailing slashes
|
# Prepend /vm if it was missing from the folder path, also strip trailing slashes
|
||||||
if not module.params['folder'].startswith('/vm') and module.params['folder'].startswith('/'):
|
if not module.params['folder'].startswith('/vm') and module.params['folder'].startswith('/'):
|
||||||
|
|
|
@ -8,14 +8,27 @@
|
||||||
vcsim: "{{ lookup('env', 'vcenter_host') }}"
|
vcsim: "{{ lookup('env', 'vcenter_host') }}"
|
||||||
- debug: var=vcsim
|
- debug: var=vcsim
|
||||||
|
|
||||||
|
- name: wait for flask server
|
||||||
|
wait_for:
|
||||||
|
host: "{{ vcsim }}"
|
||||||
|
port: 5000
|
||||||
|
state: started
|
||||||
|
|
||||||
- name: kill vcsim
|
- name: kill vcsim
|
||||||
uri:
|
uri:
|
||||||
url: "{{ 'http://' + vcsim + ':5000/killall' }}"
|
url: "{{ 'http://' + vcsim + ':5000/killall' }}"
|
||||||
|
|
||||||
- name: start vcsim
|
- name: start vcsim
|
||||||
uri:
|
uri:
|
||||||
url: "{{ 'http://' + vcsim + ':5000/spawn?cluster=2' }}"
|
url: "{{ 'http://' + vcsim + ':5000/spawn?cluster=2' }}"
|
||||||
register: vcsim_instance
|
register: vcsim_instance
|
||||||
|
|
||||||
|
- name: wait for vcsim server
|
||||||
|
wait_for:
|
||||||
|
host: "{{ vcsim }}"
|
||||||
|
port: 443
|
||||||
|
state: started
|
||||||
|
|
||||||
- name: get a list of VMS from vcsim
|
- name: get a list of VMS from vcsim
|
||||||
uri:
|
uri:
|
||||||
url: "{{ 'http://' + vcsim + ':5000/govc_find?filter=VM' }}"
|
url: "{{ 'http://' + vcsim + ':5000/govc_find?filter=VM' }}"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue