summaryrefslogtreecommitdiffstats
path: root/utils/lab-reconfiguration/reconfigUcsNet.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/lab-reconfiguration/reconfigUcsNet.py')
-rwxr-xr-xutils/lab-reconfiguration/reconfigUcsNet.py56
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)