Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Module vsphere_facts to add facts from a VMWare vSphere guest #1230

Merged
merged 1 commit into from
Oct 4, 2012
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
138 changes: 138 additions & 0 deletions library/vsphere_facts
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright 2012 Dag Wieers <dag@wieers.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.

DOCUMENTATION = '''
---
author: Dag Wieers
module: vsphere_facts
short_description: Gather facts for a guest on VMWare vSphere
description:
- This module gathers facts for a specific guest on VMWare vSphere.
These facts include hardware and network related information useful
for provisioning (e.g. macaddress, uuid).
- This module requires the pysphere python module.
version_added: "0.8"
options:
host:
description:
- The vSphere server from the cluster the virtual server is located on.
required: true
login:
description:
- The login name to authenticate on the vSphere cluster.
required: true
password:
description:
- The password to authenticate on the vSphere cluster.
required: true
guest:
description:
- The virtual server to gather facts for on the vSphere cluster.
required: true
examples:
- code: |
local_action: vsphere_facts host=$esxserver login=$esxlogin password=$esxpassword guest=$inventory_hostname_short
only_if: "'$cmdb_hwmodel'.startswith('VMWare ')
description: Task to gather facts from a vSphere cluster only if the system is a VMWare guest
- code:
- hw_eth0:
- addresstype: "assigned"
label: "Network adapter 1"
macaddress: "00:11:22:33:44:55"
macaddress_dash: "00-11-22-33-44-55"
summary: "VLAN-321"
hw_guest_full_name: "Red Hat Enterprise Linux 6 (64-bit)"
hw_guest_id: "rhel6_64Guest"
hw_memtotal_mb: 2048
hw_name: "centos6"
hw_processor_count: 1
hw_product_uuid: "ef50bac8-2845-40ff-81d9-675315501dac"
description: Typical output of a vsphere_facts run on a guest
notes:
- This module ought to be run from a system that can access vSphere directly.
Either by using C(local_action), or C(using delegate)_to.
'''

import sys
try:
import pysphere
except ImportError:
print "failed=True msg='pysphere python module unavailable'"
sys.exit(1)

def main():

module = AnsibleModule(
argument_spec=dict(
host = dict(required=True),
login = dict(required=True),
password = dict(required=True),
guest = dict(required=True),
)
)

host = module.params['host']
login = module.params['login']
password = module.params['password']
guest = module.params['guest']

server = pysphere.VIServer()
try:
# server.connect(host, login, password, trace_file='debug.txt')
server.connect(host, login, password)
except Exception, e:
module.fail_json(rc=1, msg='Failed to connect to %s: %s' % (host, e))

try:
vm = server.get_vm_by_name(guest)
except pysphere.resources.vi_exception.VIException, e:
module.fail_json(rc=2, msg=e.message)

data = vm.get_properties()
facts = {
'hw_name': vm.properties.name,
'hw_guest_full_name': vm.properties.config.guestFullName,
'hw_guest_id': vm.properties.config.guestId,
'hw_product_uuid': vm.properties.config.uuid,
'hw_processor_count': vm.properties.config.hardware.numCPU,
'hw_memtotal_mb': vm.properties.config.hardware.memoryMB,
}

ifidx = 0
for entry in vm.properties.config.hardware.device:

if not hasattr(entry, 'macAddress'): continue

factname = 'hw_eth' + str(ifidx)
facts[factname] = {
'addresstype': entry.addressType,
'label': entry.deviceInfo.label,
'macaddress': entry.macAddress,
'macaddress_dash': entry.macAddress.replace(':', '-'),
'summary': entry.deviceInfo.summary,
}

ifidx += 1

module.exit_json(ansible_facts=facts)

# this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>>
main()