blob: 87312d94696c041287bc2fdb4b02e33a89ac0f96 [file] [log] [blame]
Federico Ressi21a10d32020-01-31 07:43:30 +01001#!/usr/bin/env python3
Brant Knudsone1fa0702015-06-21 08:54:43 -05002
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
Brant Knudsone1fa0702015-06-21 08:54:43 -050017import argparse
18import os.path
Stephen Finucane85576bb2025-02-26 18:04:09 +000019import sys
Brant Knudsone1fa0702015-06-21 08:54:43 -050020
21import yaml
22
23
Stephen Finucane85576bb2025-02-26 18:04:09 +000024class UpdateCloudsYaml:
Brant Knudsone1fa0702015-06-21 08:54:43 -050025 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
yatin82c30cd2023-11-15 12:44:50 +000033 self._clouds = {}
Brant Knudsone1fa0702015-06-21 08:54:43 -050034
35 self._cloud = args.os_cloud
36 self._cloud_data = {
37 'region_name': args.os_region_name,
Brant Knudsone1fa0702015-06-21 08:54:43 -050038 'auth': {
39 'auth_url': args.os_auth_url,
40 'username': args.os_username,
Stephen Finucane85576bb2025-02-26 18:04:09 +000041 'user_domain_id': 'default',
Brant Knudsone1fa0702015-06-21 08:54:43 -050042 'password': args.os_password,
Brant Knudsone1fa0702015-06-21 08:54:43 -050043 },
44 }
Stephen Finucane85576bb2025-02-26 18:04:09 +000045
Monty Taylor56905822019-01-08 15:29:16 +000046 if args.os_project_name and args.os_system_scope:
47 print(
Stephen Finucane85576bb2025-02-26 18:04:09 +000048 "WARNING: os_project_name and os_system_scope were both "
49 "given. os_system_scope will take priority."
50 )
51
52 if args.os_system_scope: # system-scoped
Monty Taylor56905822019-01-08 15:29:16 +000053 self._cloud_data['auth']['system_scope'] = args.os_system_scope
Stephen Finucane85576bb2025-02-26 18:04:09 +000054 elif args.os_project_name: # project-scoped
55 self._cloud_data['auth']['project_name'] = args.os_project_name
56 self._cloud_data['auth']['project_domain_id'] = 'default'
57
Brant Knudsone1fa0702015-06-21 08:54:43 -050058 if args.os_cacert:
59 self._cloud_data['cacert'] = args.os_cacert
60
61 def run(self):
62 self._read_clouds()
63 self._update_clouds()
64 self._write_clouds()
65
66 def _read_clouds(self):
67 try:
68 with open(self._clouds_path) as clouds_file:
yatin82c30cd2023-11-15 12:44:50 +000069 self._clouds = yaml.safe_load(clouds_file)
Brant Knudsone1fa0702015-06-21 08:54:43 -050070 except IOError:
71 # The user doesn't have a clouds.yaml file.
72 print("The user clouds.yaml file didn't exist.")
yatin82c30cd2023-11-15 12:44:50 +000073 self._clouds = {}
Brant Knudsone1fa0702015-06-21 08:54:43 -050074
75 def _update_clouds(self):
yatin82c30cd2023-11-15 12:44:50 +000076 self._clouds.setdefault('clouds', {})[self._cloud] = self._cloud_data
Brant Knudsone1fa0702015-06-21 08:54:43 -050077
78 def _write_clouds(self):
79
80 if self._create_directory:
81 clouds_dir = os.path.dirname(self._clouds_path)
82 os.makedirs(clouds_dir)
83
84 with open(self._clouds_path, 'w') as clouds_file:
yatin82c30cd2023-11-15 12:44:50 +000085 yaml.dump(self._clouds, clouds_file, default_flow_style=False)
Brant Knudsone1fa0702015-06-21 08:54:43 -050086
87
88def main():
89 parser = argparse.ArgumentParser('Update clouds.yaml file.')
90 parser.add_argument('--file')
91 parser.add_argument('--os-cloud', required=True)
92 parser.add_argument('--os-region-name', default='RegionOne')
Brant Knudsone1fa0702015-06-21 08:54:43 -050093 parser.add_argument('--os-cacert')
94 parser.add_argument('--os-auth-url', required=True)
95 parser.add_argument('--os-username', required=True)
96 parser.add_argument('--os-password', required=True)
Monty Taylor56905822019-01-08 15:29:16 +000097 parser.add_argument('--os-project-name')
98 parser.add_argument('--os-system-scope')
Brant Knudsone1fa0702015-06-21 08:54:43 -050099
100 args = parser.parse_args()
101
102 update_clouds_yaml = UpdateCloudsYaml(args)
103 update_clouds_yaml.run()
104
105
106if __name__ == "__main__":
107 main()