Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.43 KB | None | 0 0
  1. from os import environ as env
  2. from keystoneauth1 import loading
  3. from keystoneauth1 import session
  4. from novaclient import client as nvclient
  5. from cinderclient import client as cdclient
  6. from keystoneclient import client as ksclient
  7. import pymysql
  8. import time
  9.  
  10.  
  11. #################Openstack COnnection######################
  12.  
  13. loader = loading.get_plugin_loader('password')
  14. auth = loader.load_from_options(auth_url=env['OS_AUTH_URL'],username=env['OS_USERNAME'],password=env['OS_PASSWORD'],project_id='1760223f21b241979daf7a12b1af7b60',  user_domain_name=env['OS_USER_DOMAIN_NAME'])
  15. sess = session.Session(auth=auth)
  16. nova = nvclient.Client('2', session=sess)
  17. cinder = cdclient.Client('2', session=sess)
  18. keystone = ksclient.Client('3', session=sess)
  19.  
  20. #########Database Connection##########################
  21.  
  22. connection = pymysql.connect(host='localhost', user='root', password='Ro3118086', db='billing', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
  23.  
  24. ######## General List ####################################
  25.  
  26. instances=nova.servers.list(search_opts={'all_tenants': 1})
  27. flavors_list=nova.flavors.list()
  28. users=keystone.users.list()
  29. volumes=cinder.volumes.list(search_opts={'all_tenants': 1})
  30.  
  31. ###############Cycles to be executed#################################
  32.  
  33. def find_dbobject_by_id (table_name,column_id,value_id):
  34.     cursor=connection.cursor()
  35.     sql_query=f"SELECT COUNT(1) AS QTY FROM {table_name} where {column_id} = '{value_id}'"
  36.     cursor.execute(sql_query)
  37.     qty=0
  38.     for row in cursor:
  39.         qty=row['QTY']
  40.     return qty
  41.  
  42.  
  43. for flavor in flavors:
  44.     flavor_id=flavor.id
  45.     flavor_name=flavor.name
  46.     qty=find_dbobject_by_id("flavor","id", flavor_id)
  47.     if qty == 0 :
  48.         sql= ("INSERT INTO flavor (id,name) VALUES (%s,%s)")
  49.         cursor.execute(sql,(flavor_id,flavor_name))
  50.         connection.commit()
  51.     elif qty ==1 :
  52.         sql_2= "UPDATE flavor set name = %s where id = %s"
  53.         cursor.execute(sql_2,(flavor_name,flavor_id))
  54.         connection.commit()
  55.     else:
  56.         print(f"Flavor ID : {flavor_id} appear {qty} times")
  57.  
  58. for user in users:
  59.     user_id=user.id
  60.     user_name=user.name
  61.     qty=find_dbobject_by_id("user","id", user_id)
  62.     if qty == 0 :
  63.         sql= ("INSERT INTO user (id,name) VALUES (%s,%s)")
  64.         cursor.execute(sql,(user_id,user_name))
  65.         connection.commit()
  66.     elif qty ==1 :
  67.         sql_2= "UPDATE user set name = %s where id = %s"
  68.         cursor.execute(sql_2,(user_name,user_id))
  69.         connection.commit()
  70.     else:
  71.         print(f"Flavor ID : {user_id} appear {qty} times")
  72.     projects_of_that_user=keystone.projects.list(user=user.id)
  73.     for project in projects_of_that_user:
  74.         user_project_id=project.id
  75.  
  76.  
  77. for volume in volumes:
  78.     volume_id=volume.id
  79.     volume_name=volume.name
  80.     volume_type=volume.volume_type
  81.     volume_size=volume.size
  82.     volume_project_id=volume.to_dict()['os-vol-tenant-attr:tenant_id']
  83.     if qty == 0 :
  84.         sql= ("INSERT INTO volume (id,name,type,size,project_id) VALUES (%s,%s,%s,%s,%s)")
  85.         cursor.execute(sql,(volume_id,volume_name,volume_type,volume_size,volume_project_id))
  86.         connection.commit()
  87.     elif qty ==1 :
  88.         sql_2= "UPDATE user set name = %s, type = %s, size = %s,project_id= %s where id = %s"
  89.         cursor.execute(sql_2,(volume_name,volume_type,volume_size,volume_project_id,volume_id))
  90.         connection.commit()
  91.     else:
  92.         print(f"Flavor ID : {user_id} appear {qty} times")
  93.  
  94.  
  95.  
  96.  
  97. for instance in instances:
  98.  
  99.     instance_name=instance.name
  100.     instance_id=instance.id
  101.     instance_flavor_id=instance.flavor['id']
  102.     instance_project_id=instance.tenant_id
  103.     instance_status=instance.status
  104.     instance_created=instance.created
  105.     instance_updated=instance.updated
  106.     flavors=nova.flavors.get(flavor=instance.flavor['id'])
  107.     volumes= instance.to_dict()['os-extended-volumes:volumes_attached']
  108.     qty=find_dbobject_by_id("server","id", instance_id)
  109.     for volume in volumes:
  110.         instance_volume_id=volume['id']
  111.         if qty == 0 :
  112.             sql= ("INSERT INTO server_volume (server_id,volume_id) VALUES (%s,%s)")
  113.             cursor.execute(sql,(instance_id,instance_volume_id))
  114.             connection.commit()
  115.         elif qty ==1 :
  116.             sql_2= "UPDATE server_volume set volume_id = %s where server_id = %s"
  117.             cursor.execute(sql_2,(instance_volume_id,instance_id))
  118.             connection.commit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement