blob: eb7265f76c40068d13e8ad11a011956ae5f20c17 [file] [log] [blame]
Brant Knudsone1fa0702015-06-21 08:54:43 -05001#!/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
18import argparse
19import os.path
20
21import yaml
22
23
24class 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 Taylor5bf6a942015-12-31 16:22:04 -060039 'volume_api_version': args.os_volume_api_version,
Brant Knudsone1fa0702015-06-21 08:54:43 -050040 'auth': {
41 'auth_url': args.os_auth_url,
42 'username': args.os_username,
43 'password': args.os_password,
44 'project_name': args.os_project_name,
45 },
46 }
Brant Knudson68e6ae62015-06-25 18:15:05 -050047 if args.os_identity_api_version == '3':
48 self._cloud_data['auth']['user_domain_id'] = 'default'
49 self._cloud_data['auth']['project_domain_id'] = 'default'
Brant Knudsone1fa0702015-06-21 08:54:43 -050050 if args.os_cacert:
51 self._cloud_data['cacert'] = args.os_cacert
52
53 def run(self):
54 self._read_clouds()
55 self._update_clouds()
56 self._write_clouds()
57
58 def _read_clouds(self):
59 try:
60 with open(self._clouds_path) as clouds_file:
61 self._clouds = yaml.load(clouds_file)
62 except IOError:
63 # The user doesn't have a clouds.yaml file.
64 print("The user clouds.yaml file didn't exist.")
65 self._clouds = {}
66
67 def _update_clouds(self):
68 self._clouds.setdefault('clouds', {})[self._cloud] = self._cloud_data
69
70 def _write_clouds(self):
71
72 if self._create_directory:
73 clouds_dir = os.path.dirname(self._clouds_path)
74 os.makedirs(clouds_dir)
75
76 with open(self._clouds_path, 'w') as clouds_file:
77 yaml.dump(self._clouds, clouds_file, default_flow_style=False)
78
79
80def main():
81 parser = argparse.ArgumentParser('Update clouds.yaml file.')
82 parser.add_argument('--file')
83 parser.add_argument('--os-cloud', required=True)
84 parser.add_argument('--os-region-name', default='RegionOne')
85 parser.add_argument('--os-identity-api-version', default='3')
Monty Taylor5bf6a942015-12-31 16:22:04 -060086 parser.add_argument('--os-volume-api-version', default='2')
Brant Knudsone1fa0702015-06-21 08:54:43 -050087 parser.add_argument('--os-cacert')
88 parser.add_argument('--os-auth-url', required=True)
89 parser.add_argument('--os-username', required=True)
90 parser.add_argument('--os-password', required=True)
91 parser.add_argument('--os-project-name', required=True)
92
93 args = parser.parse_args()
94
95 update_clouds_yaml = UpdateCloudsYaml(args)
96 update_clouds_yaml.run()
97
98
99if __name__ == "__main__":
100 main()