Make xenserver_facts actually work (#35821)
* Get the str value of xmlrpc.client.DateTime * get_all_records should be used instead of get_all * Facts returned with 'ansible_facts' * Remove some redundant code * Add cheese as maintainer * Add changelog entry
This commit is contained in:
parent
d5dbd8c76d
commit
d45b044992
3 changed files with 21 additions and 20 deletions
1
.github/BOTMETA.yml
vendored
1
.github/BOTMETA.yml
vendored
|
@ -268,6 +268,7 @@ files:
|
|||
$modules/cloud/misc/virt_pool.py: drybjed
|
||||
$modules/cloud/misc/xenserver_facts.py:
|
||||
ignored: andyhky
|
||||
maintainers: cheese
|
||||
$modules/cloud/opennebula/: ilicmilan kustodian
|
||||
$modules/cloud/openstack/: $team_openstack
|
||||
$modules/cloud/openstack/os_keystone_service.py: $team_openstack SamYaple
|
||||
|
|
2
changelogs/fragments/xenserver-facts-fix.yaml
Normal file
2
changelogs/fragments/xenserver-facts-fix.yaml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- xenserver_facts - ensure module works with newer versions of XenServer (https://github.com/ansible/ansible/pull/35821)
|
|
@ -22,12 +22,13 @@ description:
|
|||
author:
|
||||
- Andy Hill (@andyhky)
|
||||
- Tim Rupp
|
||||
- Robin Lee (@cheese)
|
||||
options: {}
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: Gather facts from xenserver
|
||||
xenserver:
|
||||
xenserver_facts:
|
||||
|
||||
- name: Print running VMs
|
||||
debug:
|
||||
|
@ -91,11 +92,8 @@ def get_xenapi_session():
|
|||
|
||||
def get_networks(session):
|
||||
recs = session.xenapi.network.get_all_records()
|
||||
xs_networks = {}
|
||||
networks = change_keys(recs, key='uuid')
|
||||
for network in networks.values():
|
||||
xs_networks[network['name_label']] = network
|
||||
return xs_networks
|
||||
networks = change_keys(recs, key='name_label')
|
||||
return networks
|
||||
|
||||
|
||||
def get_pifs(session):
|
||||
|
@ -132,6 +130,13 @@ def change_keys(recs, key='uuid', filter_func=None):
|
|||
if filter_func is not None and not filter_func(rec):
|
||||
continue
|
||||
|
||||
for param_name, param_value in rec.items():
|
||||
# param_value may be of type xmlrpc.client.DateTime,
|
||||
# which is not simply convertable to str.
|
||||
# Use 'value' attr to get the str value,
|
||||
# following an example in xmlrpc.client.DateTime document
|
||||
if hasattr(param_value, "value"):
|
||||
rec[param_name] = param_value.value
|
||||
new_recs[rec[key]] = rec
|
||||
new_recs[rec[key]]['ref'] = ref
|
||||
|
||||
|
@ -146,26 +151,19 @@ def get_host(session):
|
|||
|
||||
|
||||
def get_vms(session):
|
||||
xs_vms = {}
|
||||
recs = session.xenapi.VM.get_all()
|
||||
recs = session.xenapi.VM.get_all_records()
|
||||
if not recs:
|
||||
return None
|
||||
|
||||
vms = change_keys(recs, key='uuid')
|
||||
for vm in vms.values():
|
||||
xs_vms[vm['name_label']] = vm
|
||||
return xs_vms
|
||||
vms = change_keys(recs, key='name_label')
|
||||
return vms
|
||||
|
||||
|
||||
def get_srs(session):
|
||||
xs_srs = {}
|
||||
recs = session.xenapi.SR.get_all()
|
||||
recs = session.xenapi.SR.get_all_records()
|
||||
if not recs:
|
||||
return None
|
||||
srs = change_keys(recs, key='uuid')
|
||||
for sr in srs.values():
|
||||
xs_srs[sr['name_label']] = sr
|
||||
return xs_srs
|
||||
srs = change_keys(recs, key='name_label')
|
||||
return srs
|
||||
|
||||
|
||||
def main():
|
||||
|
@ -204,7 +202,7 @@ def main():
|
|||
if xs_srs:
|
||||
data['xs_srs'] = xs_srs
|
||||
|
||||
module.exit_json(ansible=data)
|
||||
module.exit_json(ansible_facts=data)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Reference in a new issue