blob: 6ba5b3cdb37bea76c95901fb46c3d48f9b0b429f [file] [log] [blame]
Dennis Dmitriev6f59add2016-10-18 13:45:27 +03001# Copyright 2016 Mirantis, Inc.
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.
14import copy
15import os
16import pkg_resources
17
18from oslo_config import cfg
19from oslo_config import generator
20
21from tcp_tests.helpers import ext
22from tcp_tests.helpers import oslo_cfg_types as ct
23from tcp_tests import settings
24
25
26_default_conf = pkg_resources.resource_filename(
Dennis Dmitrievb5d74242016-10-18 14:05:29 +030027 __name__, 'templates/tcpcloud-default.yaml')
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030028
29
30hardware_opts = [
31 ct.Cfg('manager', ct.String(),
32 help="Hardware manager name", default="devops"),
33 ct.Cfg('conf_path', ct.String(),
34 help="Hardware config file", default=_default_conf),
35 ct.Cfg('current_snapshot', ct.String(),
36 help="Latest environment status name",
37 default=ext.SNAPSHOT.hardware),
38]
39
40
41underlay_opts = [
42 ct.Cfg('ssh', ct.JSONList(),
43 help="""SSH Settings for Underlay: [{
44 'node_name': node1,
Dennis Dmitriev23e5d192016-10-31 11:27:10 +020045 'roles': ['salt-master', 'salt-minion', ],
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030046 'host': hostname,
47 'login': login,
48 'password': password,
49 'address_pool': (optional),
50 'port': (optional),
51 'keys': [(optional)],
52 }, ...]""", default=[]),
53 ct.Cfg('roles', ct.JSONList(),
54 help="Node roles managed by underlay in the environment",
Dennis Dmitriev53d3b772016-10-18 14:31:58 +030055 default=[ext.UNDERLAY_NODE_ROLES.salt_master,
56 ext.UNDERLAY_NODE_ROLES.salt_minion, ]),
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030057 ct.Cfg('nameservers', ct.JSONList(),
58 help="IP addresses of DNS servers",
59 default=[]),
60 ct.Cfg('upstream_dns_servers', ct.JSONList(),
61 help="IP addresses of upstream DNS servers (dnsmasq)",
62 default=[]),
63 ct.Cfg('lvm', ct.JSONDict(),
64 help="LVM settings for Underlay", default={}),
65]
66
67# Deploy options for a new TCPCloud deployment
68tcp_deploy_opts = [
69 ct.Cfg('reclass_settings', ct.JSONDict(),
70 help="", default={}),
71]
72
73
74# Access credentials to a ready TCP cluster
75tcp_opts = [
76 ct.Cfg('tcp_host', ct.IPAddress(),
77 help="", default='0.0.0.0'),
78]
79
80
81os_deploy_opts = [
82 # ct.Cfg('stacklight_enable', ct.Boolean(),
83 # help="", default=False),
84]
85
86os_opts = [
87 ct.Cfg('keystone_endpoint', ct.String(),
88 help="", default=''),
89]
90
91
92_group_opts = [
93 ('hardware', hardware_opts),
94 ('underlay', underlay_opts),
95 ('tcp_deploy', tcp_deploy_opts),
96 ('tcp', tcp_opts),
97 ('os_deploy', os_deploy_opts),
98 ('os', os_opts),
99]
100
101
102def register_opts(config):
103 config.register_group(cfg.OptGroup(name='hardware',
104 title="Hardware settings", help=""))
105 config.register_opts(group='hardware', opts=hardware_opts)
106
107 config.register_group(cfg.OptGroup(name='underlay',
108 title="Underlay configuration", help=""))
109 config.register_opts(group='underlay', opts=underlay_opts)
110
111 config.register_group(cfg.OptGroup(name='tcp_deploy',
112 title="tcp deploy configuration", help=""))
113 config.register_opts(group='tcp_deploy', opts=tcp_deploy_opts)
114
115 config.register_group(cfg.OptGroup(name='tcp',
116 title="tcp config and credentials", help=""))
117 config.register_opts(group='tcp', opts=tcp_opts)
118
119 config.register_group(cfg.OptGroup(name='os',
120 title="Openstack config and credentials", help=""))
121 config.register_opts(group='os', opts=os_opts)
122 config.register_group(
123 cfg.OptGroup(name='os_deploy',
124 title="Openstack deploy config and credentials",
125 help=""))
126 config.register_opts(group='os_deploy', opts=os_deploy_opts)
127 return config
128
129
130def load_config(config_files):
131 config = cfg.CONF
132 register_opts(config)
133 config(args=[], default_config_files=config_files)
134 return config
135
136
137def reload_snapshot_config(config, test_config_path):
138 """Reset config to the state from test_config file"""
139 config(args=[], default_config_files=[test_config_path])
140 return config
141
142
143def list_opts():
144 """Return a list of oslo.config options available in the tcp_tests.
145 """
146 return [(group, copy.deepcopy(opts)) for group, opts in _group_opts]
147
148
149def list_current_opts(config):
150 """Return a list of oslo.config options available in the tcp_tests.
151 """
152 result_opts = []
153 for group, opts in _group_opts:
154 current_opts = copy.deepcopy(opts)
155 for opt in current_opts:
156 if hasattr(config, group):
157 if hasattr(config[group], opt.name):
158 opt.default = getattr(config[group], opt.name)
159 result_opts.append((group, current_opts))
160 return result_opts
161
162
163def save_config(config, snapshot_name, env_name=None):
164 if env_name is None:
165 env_name = 'config'
166 test_config_path = os.path.join(
167 settings.LOGS_DIR, '{0}_{1}.ini'.format(env_name, snapshot_name))
168
169 with open(test_config_path, 'w') as output_file:
170 formatter = generator._OptFormatter(output_file=output_file)
171 for group, opts in list_current_opts(config):
172 formatter.format_group(group)
173 for opt in opts:
174 formatter.format(opt, group, minimal=True)
175 formatter.write('\n')
176 formatter.write('\n')