|
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) |