| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 1 | #!/usr/bin/env python | 
 | 2 |  | 
 | 3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | 
 | 4 | # not use this file except in compliance with the License. You may obtain | 
 | 5 | # a copy of the License at | 
 | 6 | # | 
 | 7 | #      http://www.apache.org/licenses/LICENSE-2.0 | 
 | 8 | # | 
 | 9 | # Unless required by applicable law or agreed to in writing, software | 
 | 10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
 | 11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
 | 12 | # License for the specific language governing permissions and limitations | 
 | 13 | # under the License. | 
 | 14 |  | 
 | 15 | # Update the clouds.yaml file. | 
 | 16 |  | 
 | 17 |  | 
 | 18 | import argparse | 
 | 19 | import os.path | 
 | 20 |  | 
 | 21 | import yaml | 
 | 22 |  | 
 | 23 |  | 
 | 24 | class UpdateCloudsYaml(object): | 
 | 25 |     def __init__(self, args): | 
 | 26 |         if args.file: | 
 | 27 |             self._clouds_path = args.file | 
 | 28 |             self._create_directory = False | 
 | 29 |         else: | 
 | 30 |             self._clouds_path = os.path.expanduser( | 
 | 31 |                 '~/.config/openstack/clouds.yaml') | 
 | 32 |             self._create_directory = True | 
 | 33 |         self._clouds = {} | 
 | 34 |  | 
 | 35 |         self._cloud = args.os_cloud | 
 | 36 |         self._cloud_data = { | 
 | 37 |             'region_name': args.os_region_name, | 
 | 38 |             'identity_api_version': args.os_identity_api_version, | 
| Monty Taylor | 5bf6a94 | 2015-12-31 16:22:04 -0600 | [diff] [blame] | 39 |             'volume_api_version': args.os_volume_api_version, | 
| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 40 |             'auth': { | 
 | 41 |                 'auth_url': args.os_auth_url, | 
 | 42 |                 'username': args.os_username, | 
 | 43 |                 'password': args.os_password, | 
| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 44 |             }, | 
 | 45 |         } | 
| Monty Taylor | 5690582 | 2019-01-08 15:29:16 +0000 | [diff] [blame] | 46 |         if args.os_project_name and args.os_system_scope: | 
 | 47 |             print( | 
 | 48 |                 "WARNING: os_project_name and os_system_scope were both" | 
 | 49 |                 " given. os_system_scope will take priority.") | 
 | 50 |         if args.os_project_name and not args.os_system_scope: | 
 | 51 |             self._cloud_data['auth']['project_name'] = args.os_project_name | 
 | 52 |         if args.os_identity_api_version == '3' and not args.os_system_scope: | 
| Brant Knudson | 68e6ae6 | 2015-06-25 18:15:05 -0500 | [diff] [blame] | 53 |             self._cloud_data['auth']['user_domain_id'] = 'default' | 
 | 54 |             self._cloud_data['auth']['project_domain_id'] = 'default' | 
| Monty Taylor | 5690582 | 2019-01-08 15:29:16 +0000 | [diff] [blame] | 55 |         if args.os_system_scope: | 
 | 56 |             self._cloud_data['auth']['system_scope'] = args.os_system_scope | 
| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 57 |         if args.os_cacert: | 
 | 58 |             self._cloud_data['cacert'] = args.os_cacert | 
 | 59 |  | 
 | 60 |     def run(self): | 
 | 61 |         self._read_clouds() | 
 | 62 |         self._update_clouds() | 
 | 63 |         self._write_clouds() | 
 | 64 |  | 
 | 65 |     def _read_clouds(self): | 
 | 66 |         try: | 
 | 67 |             with open(self._clouds_path) as clouds_file: | 
 | 68 |                 self._clouds = yaml.load(clouds_file) | 
 | 69 |         except IOError: | 
 | 70 |             # The user doesn't have a clouds.yaml file. | 
 | 71 |             print("The user clouds.yaml file didn't exist.") | 
 | 72 |             self._clouds = {} | 
 | 73 |  | 
 | 74 |     def _update_clouds(self): | 
 | 75 |         self._clouds.setdefault('clouds', {})[self._cloud] = self._cloud_data | 
 | 76 |  | 
 | 77 |     def _write_clouds(self): | 
 | 78 |  | 
 | 79 |         if self._create_directory: | 
 | 80 |             clouds_dir = os.path.dirname(self._clouds_path) | 
 | 81 |             os.makedirs(clouds_dir) | 
 | 82 |  | 
 | 83 |         with open(self._clouds_path, 'w') as clouds_file: | 
 | 84 |             yaml.dump(self._clouds, clouds_file, default_flow_style=False) | 
 | 85 |  | 
 | 86 |  | 
 | 87 | def main(): | 
 | 88 |     parser = argparse.ArgumentParser('Update clouds.yaml file.') | 
 | 89 |     parser.add_argument('--file') | 
 | 90 |     parser.add_argument('--os-cloud', required=True) | 
 | 91 |     parser.add_argument('--os-region-name', default='RegionOne') | 
 | 92 |     parser.add_argument('--os-identity-api-version', default='3') | 
| Akihiro Motoki | e0b375c | 2018-12-14 17:29:27 +0900 | [diff] [blame] | 93 |     parser.add_argument('--os-volume-api-version', default='3') | 
| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 94 |     parser.add_argument('--os-cacert') | 
 | 95 |     parser.add_argument('--os-auth-url', required=True) | 
 | 96 |     parser.add_argument('--os-username', required=True) | 
 | 97 |     parser.add_argument('--os-password', required=True) | 
| Monty Taylor | 5690582 | 2019-01-08 15:29:16 +0000 | [diff] [blame] | 98 |     parser.add_argument('--os-project-name') | 
 | 99 |     parser.add_argument('--os-system-scope') | 
| Brant Knudson | e1fa070 | 2015-06-21 08:54:43 -0500 | [diff] [blame] | 100 |  | 
 | 101 |     args = parser.parse_args() | 
 | 102 |  | 
 | 103 |     update_clouds_yaml = UpdateCloudsYaml(args) | 
 | 104 |     update_clouds_yaml.run() | 
 | 105 |  | 
 | 106 |  | 
 | 107 | if __name__ == "__main__": | 
 | 108 |     main() |