Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- from multiprocessing.pool import ThreadPool
- from functools import partial
- from contextlib import contextmanager
- from keystoneauth1.session import Session as KeystoneSession
- from keystoneclient.auth.identity.v3 import Password as PasswordClient
- from neutronclient.neutron.client import Client as NeutronClient
- def get_session_keystone_session():
- return KeystoneSession(
- auth=PasswordClient(
- auth_url=os.environ['OS_AUTH_URL'],
- username=os.environ['OS_USERNAME'],
- password=os.environ['OS_PASSWORD'],
- project_name=os.environ.get('OS_PROJECT_NAME', 'admin'),
- user_domain_id=os.environ.get('OS_USER_DOMAIN_ID', 'default'),
- project_domain_id=os.environ.get('OS_PROJECT_DOMAIN_ID',
- 'default')
- )
- )
- def get_neutron_client():
- return NeutronClient(
- '2.0',
- session=get_session_keystone_session(),
- region_name=os.environ['OS_REGION_NAME'],
- endpoint_type=os.environ.get('OS_ENDPOINT_TYPE', 'adminURL'),
- )
- def add_tag(network_id, client, tag):
- client.add_tag('networks', network_id, tag)
- return network_id, neutron.show_network(network_id)['network']['tags']
- def remove_tag(network_id, client, tag):
- client.remove_tag('networks', network_id, tag)
- return network_id, neutron.show_network(network_id)['network']['tags']
- @contextmanager
- def poolcontext(*args, **kwargs):
- pool = ThreadPool(*args, **kwargs)
- yield pool
- pool.terminate()
- ACTION = {
- 'add': add_tag,
- 'remove': remove_tag,
- }
- if __name__ == '__main__':
- if len(sys.argv) < 4:
- print('Usage: %s <file> <action> <tag>' % sys.argv[0])
- sys.exit(1)
- if sys.argv[2] not in ACTION.keys():
- print('Action may be only: %s' % ACTION.keys())
- sys.exit(1)
- neutron = get_neutron_client()
- with open(sys.argv[1]) as f:
- networks = f.read().splitlines()
- with poolcontext(processes=10) as pool:
- results = pool.map(partial(ACTION[sys.argv[2]], client=neutron,
- tag=sys.argv[3]),
- networks)
- print(results)
Add Comment
Please, Sign In to add comment