Last active
February 27, 2020 23:00
-
-
Save g-ramirez/4a2c9a655d3ad2cc95c4ec0527df291c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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