Skip to content

Instantly share code, notes, and snippets.

@g-ramirez
Last active February 27, 2020 23:00
Show Gist options
  • Save g-ramirez/4a2c9a655d3ad2cc95c4ec0527df291c to your computer and use it in GitHub Desktop.
Save g-ramirez/4a2c9a655d3ad2cc95c4ec0527df291c to your computer and use it in GitHub Desktop.
import subprocess
import sys
import json
def run(cmd, output=True, shell=True):
print(cmd)
if output:
return subprocess.check_output(cmd, shell=shell).strip()
return subprocess.call(cmd, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=shell)
def generate_computes():
command = 'openstack compute service list --service nova-compute -c Host -c IP -f value'
computes = run(command)
return computes.split('\n')
def compute_ip_dict():
computes = generate_computes()
computes_to_ip_dict = []
temp_list = []
hypervisor_list_json = json.loads(run("openstack hypervisor list -f json"))
for compute in computes:
for hypervisor_dict in hypervisor_list_json:
if compute in hypervisor_dict["Hypervisor Hostname"] and hypervisor_dict['State'] == 'up':
computes_to_ip_dict.append({ 'ip' : hypervisor_dict["Host IP"], 'hostname' : compute, 'openstack_virsh_list' : []
,"Hypervisor Hostname" : hypervisor_dict["Hypervisor Hostname"] })
print 'printing computes to ip'
print computes_to_ip_dict
return computes_to_ip_dict
def server_list_per_compute(compute_host):
openstack_virsh_list = []
command = "openstack server list --all-projects --host {} -c ID -f value".format(compute_host)
server_uuids = run(command).split('\n')
if server_uuids[0] !='':
for server in server_uuids:
openstack_virsh_list.append(server)
return openstack_virsh_list
def actual_virsh_list(compute_ip):
try:
return run("juju ssh ubuntu@{} 'sudo virsh list --all --uuid'".format(compute_ip)).split('\n')
except:
pass
def find_openstack_host(virsh_instance, computes_to_ip_dict_list):
string_to_print1 = ''
string_to_print2 = ''
for compute in computes_to_ip_dict_list:
if virsh_instance in compute['openstack_virsh_list']:
query1 = "update nova.instances set host='{}', node='{}' where uuid='%s'" % (virsh_instance)
query2 = "delete from nova.migrations where uuid='%s'" % (virsh_instance)
string_to_print1 = "VM in virsh list is running in {} but openstack/novadb shows it in %s" % compute['hostname']
string_to_print2 = "Please run : \n----------\n{};\n".format(query1) + "delete from nova.migrations where instance_uuid='%s';" % (virsh_instance)
break
return (string_to_print1,string_to_print2)
'''need to update node = hostname and host=hypervior-hostname'''
def main():
computes_to_ip_dict = compute_ip_dict()
for compute in range(len(computes_to_ip_dict)):
computes_to_ip_dict[compute]['openstack_virsh_list'] = server_list_per_compute(computes_to_ip_dict[compute]['hostname'])
computes_to_ip_dict[compute]['actual_virsh_list'] = actual_virsh_list(computes_to_ip_dict[compute]['ip'])
for compute in range(len(computes_to_ip_dict)):
if (computes_to_ip_dict[compute]['openstack_virsh_list'] != computes_to_ip_dict[compute]['actual_virsh_list']):
for virsh_instance in computes_to_ip_dict[compute]['actual_virsh_list']:
temp_tup = find_openstack_host(virsh_instance,computes_to_ip_dict)
print(temp_tup[0].format(computes_to_ip_dict[compute]['hostname']))
print(temp_tup[1].format(computes_to_ip_dict[compute]['hostname'], computes_to_ip_dict[compute]['Hypervisor Hostname']))
print(' ----------')
print("\nMoving onto next one...")
break
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment