Guest User

Untitled

a guest
Aug 20th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. import os
  2. import sys
  3. from multiprocessing.pool import ThreadPool
  4. from functools import partial
  5. from contextlib import contextmanager
  6. from keystoneauth1.session import Session as KeystoneSession
  7. from keystoneclient.auth.identity.v3 import Password as PasswordClient
  8. from neutronclient.neutron.client import Client as NeutronClient
  9.  
  10.  
  11. def get_session_keystone_session():
  12. return KeystoneSession(
  13. auth=PasswordClient(
  14. auth_url=os.environ['OS_AUTH_URL'],
  15. username=os.environ['OS_USERNAME'],
  16. password=os.environ['OS_PASSWORD'],
  17. project_name=os.environ.get('OS_PROJECT_NAME', 'admin'),
  18. user_domain_id=os.environ.get('OS_USER_DOMAIN_ID', 'default'),
  19. project_domain_id=os.environ.get('OS_PROJECT_DOMAIN_ID',
  20. 'default')
  21. )
  22. )
  23.  
  24.  
  25. def get_neutron_client():
  26. return NeutronClient(
  27. '2.0',
  28. session=get_session_keystone_session(),
  29. region_name=os.environ['OS_REGION_NAME'],
  30. endpoint_type=os.environ.get('OS_ENDPOINT_TYPE', 'adminURL'),
  31. )
  32.  
  33.  
  34. def add_tag(network_id, client, tag):
  35. client.add_tag('networks', network_id, tag)
  36. return network_id, neutron.show_network(network_id)['network']['tags']
  37.  
  38.  
  39. def remove_tag(network_id, client, tag):
  40. client.remove_tag('networks', network_id, tag)
  41. return network_id, neutron.show_network(network_id)['network']['tags']
  42.  
  43.  
  44. @contextmanager
  45. def poolcontext(*args, **kwargs):
  46. pool = ThreadPool(*args, **kwargs)
  47. yield pool
  48. pool.terminate()
  49.  
  50.  
  51. ACTION = {
  52. 'add': add_tag,
  53. 'remove': remove_tag,
  54. }
  55.  
  56.  
  57. if __name__ == '__main__':
  58. if len(sys.argv) < 4:
  59. print('Usage: %s <file> <action> <tag>' % sys.argv[0])
  60. sys.exit(1)
  61. if sys.argv[2] not in ACTION.keys():
  62. print('Action may be only: %s' % ACTION.keys())
  63. sys.exit(1)
  64. neutron = get_neutron_client()
  65. with open(sys.argv[1]) as f:
  66. networks = f.read().splitlines()
  67. with poolcontext(processes=10) as pool:
  68. results = pool.map(partial(ACTION[sys.argv[2]], client=neutron,
  69. tag=sys.argv[3]),
  70. networks)
  71. print(results)
Add Comment
Please, Sign In to add comment