Make xenserver_facts actually work (#35821) (#40552)

* 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

(cherry picked from commit d45b044992)
pull/40602/head
Sam Doran 7 years ago committed by GitHub
parent dbcecb64b8
commit 02e66617f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -263,6 +263,8 @@ 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
$modules/cloud/openstack/os_project.py: $team_openstack agireud
@ -1224,7 +1226,14 @@ files:
keywords:
- validate-modules
docs/:
labels: docs_pull_request
labels: docs
docs/docsite/rst/network/:
labels: networking
maintainers:
- acozine
- gundalow
docs/docsite/rst/scenario_guides/guide_aci.rst:
maintainers: $team_aci
notify: dharmabumstead
packaging/:
test/:

@ -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…
Cancel
Save