diff options
Diffstat (limited to 'utils/lab-reconfiguration/reconfigUcsNet.py')
-rwxr-xr-x | utils/lab-reconfiguration/reconfigUcsNet.py | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/utils/lab-reconfiguration/reconfigUcsNet.py b/utils/lab-reconfiguration/reconfigUcsNet.py index 282eca0cf..01c4b8340 100755 --- a/utils/lab-reconfiguration/reconfigUcsNet.py +++ b/utils/lab-reconfiguration/reconfigUcsNet.py @@ -34,6 +34,8 @@ import time from UcsSdk import * from collections import defaultdict +POD_PREFIX = "POD-2" +INSTALLER = "POD-21" def getpassword(prompt): if platform.system() == "Linux": @@ -51,15 +53,32 @@ def get_servers(handle=None): orgObj = handle.GetManagedObject(None, OrgOrg.ClassId(), {OrgOrg.DN : "org-root"})[0] servers = handle.GetManagedObject(orgObj, LsServer.ClassId()) for server in servers: - if server.Type == 'instance' and "POD-2" in server.Dn: + if server.Type == 'instance' and POD_PREFIX in server.Dn: yield server +def set_boot_policy(handle=None, server=None, policy=None): + """ + Modify Boot policy of server + """ + obj = handle.GetManagedObject(None, LsServer.ClassId(), { + LsServer.DN: server.Dn}) + handle.SetManagedObject(obj, LsServer.ClassId(), { + LsServer.BOOT_POLICY_NAME: policy} ) + print " Configured boot policy: {}".format(policy) + + def ack_pending(handle=None, server=None): """ Acknowledge pending state of server """ - handle.AddManagedObject(server, LsmaintAck.ClassId(), {LsmaintAck.DN: server.Dn + "/ack", LsmaintAck.DESCR:"", LsmaintAck.ADMIN_STATE:"trigger-immediate", LsmaintAck.SCHEDULER:"", LsmaintAck.POLICY_OWNER:"local"}, True) + handle.AddManagedObject(server, LsmaintAck.ClassId(), { + LsmaintAck.DN: server.Dn + "/ack", + LsmaintAck.DESCR:"", + LsmaintAck.ADMIN_STATE:"trigger-immediate", + LsmaintAck.SCHEDULER:"", + LsmaintAck.POLICY_OWNER:"local"}, True) + print " Pending-reboot -> Acknowledged." def get_vnics(handle=None, server=None): @@ -78,6 +97,7 @@ def get_network_config(handle=None): print " d - default, t - tagged" for server in get_servers(handle): print ' {}'.format(server.Name) + print ' Boot policy: {}'.format(server.OperBootPolicyName) for vnic in get_vnics(handle, server): print ' {}'.format(vnic.Name) print ' {}'.format(vnic.Addr) @@ -134,10 +154,14 @@ def set_network(handle=None, yamlFile=None): """ # add interfaces and bind them with vNIC templates print "\nRECONFIGURING VNICs..." - network = read_yaml_file(yamlFile) + pod_data = read_yaml_file(yamlFile) + network = pod_data['network'] + for index, server in enumerate(get_servers(handle)): + # Assign template to interface for iface, data in network.iteritems(): add_interface(handle, server.Dn, iface, data['template'], data['order'], data['mac-list'][index]) + # Remove other interfaces which have not assigned required vnic template vnics = get_vnics(handle, server) for vnic in vnics: @@ -145,6 +169,10 @@ def set_network(handle=None, yamlFile=None): remove_interface(handle, vnic.Dn) print " {} removed, template: {}".format(vnic.Name, vnic.OperNwTemplName) + # Set boot policy template + if not INSTALLER in server.Dn: + set_boot_policy(handle, server, pod_data['boot-policy']) + if __name__ == "__main__": # Latest urllib2 validate certs by default @@ -180,26 +208,22 @@ if __name__ == "__main__": # Change vnic template if specified in cli option if (options.yamlFile != None): set_network(handle, options.yamlFile) - - time.sleep(3) - - print "\nCheck if acknowledge is needed..." - for server in get_servers(handle): - print " {}: {}".format(server.Dn, server.OperState) - if server.OperState == "pending-reboot": - ack_pending(handle,server) - print " Acknowledged." + time.sleep(5) print "\nWait until Overall Status of all nodes is OK..." - timeout = time.time() + 60*5 #5 minutes timeout + timeout = time.time() + 60*10 #10 minutes timeout while True: list_of_states = [] for server in get_servers(handle): + if server.OperState == "pending-reboot": + ack_pending(handle,server) list_of_states.append(server.OperState) - print " {}".format(list_of_states) - if all(state == "ok" for state in list_of_states) or time.time() > timeout: + print " {}, {} seconds remains.".format(list_of_states, round(timeout-time.time())) + if all(state == "ok" for state in list_of_states): break - time.sleep(2) + if time.time() > timeout: + raise Exception("Timeout reached while waiting for OK status.") + time.sleep(5) # Show current vnic MACs and VLANs get_network_config(handle) |