10 from fabric.context_managers import settings
11 from fabric.api import *
19 def __init__(self, file="onap_docker_upgrade.conf"):
22 Method to read from conf file specific options
26 self.config = ConfigParser.SafeConfigParser()
27 self.config.readfp(open(file))
29 def read_option(self, group, name):
33 value = self.config.get(group, name)
37 def getToken(url, osuser, ostenant, ospassword):
40 Returns a token to the user given a tenant,
41 user name, password, and OpenStack API URL.
44 tokenRequest = urllib2.Request(url)
45 tokenRequest.add_header("Content-type", "application/json")
46 jsonPayload = json.dumps({'auth' : {'tenantName' : ostenant, 'passwordCredentials' : {'username' : osuser, 'password' : ospassword}}})
48 request = urllib2.urlopen(tokenRequest, jsonPayload)
49 json_data = json.loads(request.read())
52 return json.dumps(json_data)
54 def getServers(url, token):
56 Returns a list of server in a given tenant
58 url = url + '/servers'
59 #handler=urllib2.HTTPHandler(debuglevel=1)
60 #opener = urllib2.build_opener(handler)
61 #urllib2.install_opener(opener)
62 nova_server_request = urllib2.Request(url)
63 nova_server_request.add_header("Content-type", "application/json")
64 nova_server_request.add_header("X-Auth-Token", token)
65 request = urllib2.urlopen(nova_server_request)
66 json_data = json.loads(request.read())
69 return json.dumps(json_data)
71 def getServerInfo(url, token, server):
73 Returns the server information in a given tenant
75 url = url + '/servers/' + server
76 #handler=urllib2.HTTPHandler(debuglevel=1)
77 #opener = urllib2.build_opener(handler)
78 #urllib2.install_opener(opener)
79 nova_server_request = urllib2.Request(url)
80 nova_server_request.add_header("Content-type", "application/json")
81 nova_server_request.add_header("X-Auth-Token", token)
82 request = urllib2.urlopen(nova_server_request)
83 json_data = json.loads(request.read())
86 return json.dumps(json_data)
88 conf_file = ReadConfFile()
90 #Reading keystone_auth
91 url=conf_file.read_option('keystone_auth', 'url')
92 user=conf_file.read_option('keystone_auth', 'user')
93 password=conf_file.read_option('keystone_auth', 'password')
94 tenant=conf_file.read_option('keystone_auth', 'tenant')
97 instance_prefix=conf_file.read_option('onap', 'instance_prefix')
98 deployment_type=conf_file.read_option('onap', 'deployment_type')
99 if deployment_type in ("1-nic-float" or "2-nic"):
100 onap_net_name=conf_file.read_option('onap', 'onap_net_name')
101 dcae_key_path=conf_file.read_option('onap', 'dcae_key_path')
102 onap_key_path=conf_file.read_option('onap', 'onap_key_path')
105 nova_url=conf_file.read_option('nova', 'url')
107 # Since we return a raw JSON payload from getToken,
108 # we need to load it into a readable object.
109 adminToken = json.loads(getToken(url, user, tenant, password))
111 # Access the token portion of the JSON payload and grab the token and tenant ID
112 adminTokenID = adminToken['access']['token']['id']
113 adminTokenTenantID = adminToken['access']['token']['tenant']['id']
115 for item in adminToken['access']['serviceCatalog']:
117 The "name" of each OpenStack service catalog item from
118 the item list changed between versions. Things like
119 "glance" became "volume" and "keystone" became "identity".
120 You will need to update this based on your installation.
123 adminNovaURL = nova_url + "/" + adminTokenTenantID
124 elif item['name'] == "nova":
125 adminNovaURL = item['endpoints'][0]['adminURL']
127 print "------ Admin information ------"
128 print "Token ID = ", adminTokenID
129 print "Tenant ID = ", adminTokenTenantID
130 print "Nova URL = ", adminNovaURL
131 print "------ End Admin info ---------"
133 get_nova_servers = json.loads(getServers(adminNovaURL, adminTokenID))
134 #print get_nova_servers
135 #print get_nova_servers['servers'][0]['id']
137 for item in get_nova_servers['servers']:
138 #print item['id'], item['name']
139 if instance_prefix in item['name']:
140 print "Found matching server name: %s with id %s" % (item['name'], item['id'])
141 get_server_info = json.loads(getServerInfo(adminNovaURL, adminTokenID, item['id']))
142 for net_info in get_server_info['server']['addresses']:
143 if deployment_type in ("1-nic-float" or "2-nic"):
144 if onap_net_name not in net_info:
145 server_ip = get_server_info['server']['addresses'][net_info][0]['addr']
146 elif deployment_type in "1-nic-nofloat":
147 server_ip = get_server_info['server']['addresses'][net_info][1]['addr']
148 server_name = item['name']
149 if "robot" in server_name:
151 elif "aai-inst1" in server_name:
153 is_aai2_executed = False
154 if not is_aai2_executed:
156 aai1_server_name = server_name
159 elif "aai-inst2" in server_name:
161 is_aai2_executed = True
162 print "IP address of vm %s is %s" % (item['name'], server_ip)
164 with settings(warnings=True, skip_bad_hosts=True):
165 if "dcae-controller" in server_name:
166 execute(upgrade_docker, server_name, hosts=server_ip, my_env={'key_filename':dcae_key_path, 'user':'ubuntu'})
168 if "aai-inst1" not in server_name:
169 execute(upgrade_docker, server_name, hosts=server_ip, my_env={'key_filename':onap_key_path, 'user':'ubuntu'})
171 execute(upgrade_docker, server_name, hosts=server_ip, my_env={'key_filename':onap_key_path, 'user':'ubuntu'})
173 print "Skipping %s upgrade until aai2 finishes upgrade" % server_name
175 with settings(warnings=True):
177 print "Starting %s upgrade" % aai1_ip
178 execute(upgrade_docker, aai1_server_name, hosts=aai1_ip, my_env={'key_filename':onap_key_path, 'user':'ubuntu'})
180 execute(health_checks_robot, hosts=robot_ip, my_env={'key_filename':onap_key_path, 'user':'ubuntu'})