github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/script/getenvvar (about) 1 #!/usr/bin/env python3 2 3 """ 4 Set environment variables required for the CI jobs by inspection of the 5 clouds.yaml file. This is useful where you only have this file. 6 7 To set variables: 8 9 $ eval $(./script/getenvvar) 10 11 To unset them: 12 13 $ unset $(compgen -v | grep OS_) 14 """ 15 16 import argparse 17 from pathlib import Path 18 import sys 19 20 import yaml 21 22 p = Path('~/.config/openstack/clouds.yaml').expanduser() 23 parser = argparse.ArgumentParser() 24 parser.add_argument( 25 'cloud', 26 help="Cloud to export credentials for", 27 ) 28 29 args = parser.parse_args() 30 31 with p.open() as fh: 32 data = yaml.safe_load(fh) 33 34 if args.cloud not in data.get('clouds', {}) or {}: 35 print(f'Could not find cloud {args.cloud} in {str(p)}', file=sys.stderr) 36 sys.exit(1) 37 38 cloud = data['clouds'][args.cloud] 39 40 if 'auth' not in cloud: 41 print(f'Missing auth section for cloud {cloud}', file=sys.stderr) 42 sys.exit(1) 43 44 auth = cloud['auth'] 45 46 if 'username' not in auth or 'password' not in auth: 47 print('Only password authentication supported', file=sys.stderr) 48 sys.exit(1) 49 50 # FIXME: This should work but does not, since the check for auth credentials 51 # is just 'OS_USERNAME == admin' 52 53 # user_id = auth.get('user_id') 54 # project_id = auth.get('project_id') 55 # if not user_id or not project_id: 56 # import openstack 57 # conn = openstack.connect(args.cloud) 58 # auth_ref = conn.config.get_auth().get_auth_ref(conn.session) 59 # 60 # if not user_id: 61 # user_id = auth_ref.user_id 62 # 63 # if not project_id: 64 # project_id = auth_ref.project_id 65 # 66 # result = f""" 67 # unset OS_CLOUD 68 # export OS_AUTH_URL={auth['auth_url']} 69 # export OS_USERID={user_id} 70 # export OS_PASSWORD={auth['password']} 71 # export OS_PROJECT_ID={project_id} 72 # export OS_REGION_NAME={cloud['region_name']} 73 # """.strip() 74 75 result = f""" 76 unset OS_CLOUD 77 export OS_AUTH_URL={auth['auth_url']} 78 export OS_USERNAME={auth['username']} 79 export OS_PASSWORD={auth['password']} 80 export OS_PROJECT_NAME={auth['project_name']} 81 export OS_DOMAIN_ID={auth['user_domain_id']} 82 export OS_REGION_NAME={cloud['region_name']} 83 """ 84 85 print(result)