-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcustomize_vm.py
More file actions
71 lines (61 loc) · 2.54 KB
/
customize_vm.py
File metadata and controls
71 lines (61 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/python
from ansible.module_utils.basic import AnsibleModule
import VI # Ensure pyVmomi is installed
from VIServer import VIServer
def main():
module = AnsibleModule(
argument_spec=dict(
host=dict(required=True),
user=dict(required=True),
password=dict(required=True),
target_vm=dict(required=True),
ip_address=dict(required=True),
netmask=dict(required=True),
domain=dict(required=True),
),
supports_check_mode=False
)
host = module.params['host']
user = module.params['user']
password = module.params['password']
target_vm = module.params['target_vm']
ip_address = module.params['ip_address']
netmask = module.params['netmask']
domain = module.params['domain']
try:
server = VIServer()
server.connect(host, user, password)
vm_obj = server.get_vm_by_name(target_vm)
request = VI.CustomizeVM_TaskRequestMsg()
_this = request.new__this(vm_obj._mor)
_this.set_attribute_type(vm_obj._mor.get_attribute_type())
request.set_element__this(_this)
spec = request.new_spec()
globalIPSettings = spec.new_globalIPSettings()
spec.set_element_globalIPSettings(globalIPSettings)
nicSetting = spec.new_nicSettingMap()
adapter = nicSetting.new_adapter()
fixedip = VI.ns0.CustomizationFixedIp_Def("ipAddress").pyclass()
fixedip.set_element_ipAddress(ip_address)
adapter.set_element_ip(fixedip)
adapter.set_element_subnetMask(netmask)
nicSetting.set_element_adapter(adapter)
spec.set_element_nicSettingMap([nicSetting])
identity = VI.ns0.CustomizationLinuxPrep_Def("identity").pyclass()
identity.set_element_domain(domain)
hostName = VI.ns0.CustomizationFixedName_Def("hostName").pyclass()
hostName.set_element_name(target_vm.replace("_", ""))
identity.set_element_hostName(hostName)
spec.set_element_identity(identity)
request.set_element_spec(spec)
task = server._proxy.CustomizeVM_Task(request)._returnval
vi_task = VITask(task, server)
status = vi_task.wait_for_state([vi_task.STATE_SUCCESS, vi_task.STATE_ERROR], 300)
if status == vi_task.STATE_SUCCESS:
module.exit_json(changed=True, msg="Customization successful.")
else:
module.fail_json(msg="Customization failed.")
except Exception as e:
module.fail_json(msg=f"Error: {str(e)}")
if __name__ == '__main__':
main()