Skip to content

Instantly share code, notes, and snippets.

@velp
Created August 20, 2018 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save velp/398b36745fbb79e7310e1ae2db788148 to your computer and use it in GitHub Desktop.
Save velp/398b36745fbb79e7310e1ae2db788148 to your computer and use it in GitHub Desktop.
The script for management to networks tags in Neutron
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment