Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import ConfigParser
  4. import argparse
  5. import os
  6. from novaclient.v1_1 import client as novaclient
  7. from neutronclient.v2_0 import client as neutronclient
  8. from keystoneclient.v2_0 import client as keystoneclient
  9.  
  10. parser = argparse.ArgumentParser(description='Nova Auditor')
  11. parser.add_argument('--clean', action='store_true', default=False,
  12. help='auto-clean orphans')
  13. parser.add_argument('--os-tenant-name', action='store',
  14. default=None, dest="OS_TENANT_NAME",
  15. help='OpenStack tenant name used for authentication')
  16. parser.add_argument('--os-username', action='store',
  17. default=None, dest="OS_USERNAME",
  18. help='OpenStack username used for authentication')
  19. parser.add_argument('--os-password', action='store',
  20. default=None, dest="OS_PASSWORD",
  21. help='OpenStack user password used for authentication')
  22. parser.add_argument('--os-auth-url', action='store',
  23. default=None, dest="OS_AUTH_URL",
  24. help='OpenStack auth-url used for authentication')
  25. args = parser.parse_args()
  26.  
  27. def get_os_vars():
  28. """Return a dict of variables used for OpenStack client authentication.
  29. This will determine the values first by checking ~/.os.cfg, then next by
  30. checking the OS_* environment variables, and finally, by checking CLI
  31. params. Each step will overwrite the previous values learned."""
  32.  
  33. os_vars = {'OS_PASSWORD': None,
  34. 'OS_AUTH_URL': None,
  35. 'OS_USERNAME': None,
  36. 'OS_TENANT_ID': None,
  37. 'OS_TENANT_NAME': None,
  38. 'OS_SERVICE_TENANT_NAME': 'service'}
  39.  
  40. for os_var in os_vars.keys():
  41. try:
  42. config = ConfigParser.ConfigParser()
  43. config.read(['os.cfg',os.path.expanduser('~/.os.cfg')])
  44. os_vars[os_var] = config.get('OPENSTACK', os_var.lower())
  45. except ConfigParser.NoOptionError:
  46. continue
  47.  
  48. for os_var in os_vars.keys():
  49. try:
  50. os_vars[os_var] = os.environ[os_var]
  51. except KeyError:
  52. continue
  53.  
  54. for os_var in os_vars.keys():
  55. try:
  56. if getattr(args, os_var):
  57. os_vars[os_var] = getattr(args, os_var)
  58. except AttributeError:
  59. continue
  60.  
  61. for os_var in os_vars.keys():
  62. if not os_vars[os_var]:
  63. os_vars[os_var] = raw_input('%s: ' % os_var)
  64.  
  65. return os_vars
  66.  
  67.  
  68. def get_service_tenant_id(osvars):
  69. """Return the ID of the service tenant"""
  70. keystonec = keystoneclient.Client(
  71. username=osvars['OS_USERNAME'],
  72. password=osvars['OS_PASSWORD'],
  73. tenant_name=osvars['OS_TENANT_NAME'],
  74. auth_url=osvars['OS_AUTH_URL'])
  75.  
  76. return keystonec.tenants.find(name=osvars['OS_SERVICE_TENANT_NAME']).id
  77.  
  78.  
  79. def get_routers_list(osvars):
  80. """Returns a list of neutron IDs as reported by neutron"""
  81.  
  82. neutronc = neutronclient.Client(username=osvars['OS_USERNAME'],
  83. password=osvars['OS_PASSWORD'],
  84. tenant_name=osvars['OS_TENANT_NAME'],
  85. auth_url=osvars['OS_AUTH_URL'])
  86.  
  87. routers = neutronc.list_routers().get('routers', [])
  88.  
  89. router_ids = []
  90. for r in routers:
  91. router_ids.append(r.get('id', ''))
  92.  
  93. return router_ids
  94.  
  95.  
  96. def list_all_vms(osvars):
  97. """Returns a listing of all VM objects as reported by Nova"""
  98.  
  99. novac = novaclient.Client(osvars['OS_USERNAME'],
  100. osvars['OS_PASSWORD'],
  101. osvars['OS_TENANT_NAME'],
  102. osvars['OS_AUTH_URL'],
  103. service_type="compute")
  104.  
  105. return novac.servers.list(True, {'all_tenants': '1'})
  106.  
  107.  
  108. def check_vm_is_router(router_ids, vm):
  109. vm_id = vm.name[3:]
  110. if vm_id not in router_ids:
  111. print "stray: %s (rid %s) created %s on %s (status: %s, %s)" % (vm.id, vm_id, vm.created, vm._info['OS-EXT-SRV-ATTR:hypervisor_hostname'], vm.status, vm._info['OS-EXT-STS:task_state'])
  112. if args.clean:
  113. print "Cleaning"
  114. #novac.servers.delete(vm.id)
  115.  
  116.  
  117. def main():
  118. osvars = get_os_vars()
  119.  
  120. service_tenant_id = get_service_tenant_id(osvars)
  121. router_ids = get_routers_list(osvars)
  122.  
  123. for vm in list_all_vms(osvars):
  124. if vm.tenant_id == service_tenant_id:
  125. check_vm_is_router(router_ids, vm)
  126.  
  127.  
  128. if __name__ == "__main__":
  129. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement