Skip to content

Instantly share code, notes, and snippets.

@metacoma
Last active March 3, 2016 16:57
Show Gist options
  • Save metacoma/e8544d3948e579917f18 to your computer and use it in GitHub Desktop.
Save metacoma/e8544d3948e579917f18 to your computer and use it in GitHub Desktop.
controller upgrade
def router_data(node, router_id):
stdout, _ = ssh.call(["/bin/bash", "-c", ". /root/openrc &&"
"neutron l3-agent-list-hosting-router "
"{0} -f json".format(router_id)],
stdout=subprocess.PIPE, node=node)
try:
return json.loads(stdout)[0]
except:
raise Exception("Invalid data "
"for router {0}".format(router_id))
def ban_l3_agent(node):
ssh.call(['pcs', 'resource', 'ban', 'p_neutron-l3-agent',
node.data['fqdn']], stdout = subprocess.PIPE,
node = node)
def wait_for_router_migration(node, router_id):
for i in range(0, 30):
router = router_data(node, router_id)
print router
if node.data['fqdn'] != router['host']:
if router['admin_state_up'] and router['alive'] == ":-)":
return
time.sleep(3)
raise Exception("Timeout for router migration")
def neutron_routers(node):
node_routers = []
output, _ = ssh.call(["/bin/bash", "-c", ". /root/openrc &&"
"neutron router-list -f json",],
stdout=subprocess.PIPE, node=node)
try:
env_routers = json.loads(output)
except:
raise Exception("Invalid data from router list")
for i in range(0, len(env_routers)):
router_id = env_routers[i]['id']
router = router_data(node, router_id)
if (router['host'] == node.data['fqdn']):
node_routers.append(router_id)
return node_routers
n = node_obj.Node(9)
routers = neutron_routers(n)
if (routers):
ban_l3_agent(n)
for i in xrange(0, len(routers)):
wait_router_migration(n, routers[i])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment