Merge lp:~gnuoy/openstack-charm-testing/ksv3 into lp:openstack-charm-testing
- ksv3
- Merge into trunk
Proposed by
Liam Young
Status: | Rejected |
---|---|
Rejected by: | Ryan Beisner |
Proposed branch: | lp:~gnuoy/openstack-charm-testing/ksv3 |
Merge into: | lp:openstack-charm-testing |
Diff against target: |
487 lines (+448/-1) 6 files modified
bin/neutron-ext-net-ksv3 (+163/-0) bin/neutron-tenant-net-ksv3 (+161/-0) configure (+1/-1) novarc (+13/-0) novarcv3 (+13/-0) profiles/defaultksv3 (+97/-0) |
To merge this branch: | bzr merge lp:~gnuoy/openstack-charm-testing/ksv3 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ryan Beisner | Needs Resubmitting | ||
Review via email: mp+285693@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 177. By Liam Young
-
Add OS_AUTH_VERSION to make swift client Keystone v3 aware
Revision history for this message
Ryan Beisner (1chb1n) wrote : | # |
Closing MP, per previous comment, please resubmit if updates are still needed. Thank you!
review:
Needs Resubmitting
Unmerged revisions
- 177. By Liam Young
-
Add OS_AUTH_VERSION to make swift client Keystone v3 aware
- 176. By Liam Young
-
Fix up novarc
- 175. By Liam Young
-
Fix router list
- 174. By Liam Young
-
Added ksv3 setup scripts
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'bin/neutron-ext-net-ksv3' | |||
2 | --- bin/neutron-ext-net-ksv3 1970-01-01 00:00:00 +0000 | |||
3 | +++ bin/neutron-ext-net-ksv3 2016-02-12 13:19:26 +0000 | |||
4 | @@ -0,0 +1,163 @@ | |||
5 | 1 | #!/usr/bin/python | ||
6 | 2 | |||
7 | 3 | from keystoneclient.auth import identity | ||
8 | 4 | from keystoneclient import session, v3 | ||
9 | 5 | from neutronclient.v2_0 import client | ||
10 | 6 | import optparse | ||
11 | 7 | import os | ||
12 | 8 | import sys | ||
13 | 9 | import logging | ||
14 | 10 | |||
15 | 11 | |||
16 | 12 | usage = """Usage: %prog [options] ext_net_name | ||
17 | 13 | |||
18 | 14 | For example: | ||
19 | 15 | |||
20 | 16 | %prog -g 192.168.21.1 -c 192.168.21.0/25 \\ | ||
21 | 17 | -f 192.168.21.100:192.168.21.200 ext_net | ||
22 | 18 | """ | ||
23 | 19 | |||
24 | 20 | if __name__ == '__main__': | ||
25 | 21 | parser = optparse.OptionParser(usage) | ||
26 | 22 | parser.add_option('-p', '--project', | ||
27 | 23 | help='Project name to create network for', | ||
28 | 24 | dest='project', action='store', | ||
29 | 25 | default=None) | ||
30 | 26 | parser.add_option("-d", "--debug", | ||
31 | 27 | help="Enable debug logging", | ||
32 | 28 | dest="debug", action="store_true", default=False) | ||
33 | 29 | parser.add_option("-g", "--gateway", | ||
34 | 30 | help="Default gateway to use.", | ||
35 | 31 | dest="default_gateway", action="store", default=None) | ||
36 | 32 | parser.add_option("-c", "--cidr", | ||
37 | 33 | help="CIDR of external network.", | ||
38 | 34 | dest="cidr", action="store", default=None) | ||
39 | 35 | parser.add_option("-f", "--floating-range", | ||
40 | 36 | help="Range of floating IP's to use (separated by :).", | ||
41 | 37 | dest="floating_range", action="store", default=None) | ||
42 | 38 | parser.add_option("--network-type", | ||
43 | 39 | help="Network type.", | ||
44 | 40 | dest="network_type", action="store", default='gre') | ||
45 | 41 | (opts, args) = parser.parse_args() | ||
46 | 42 | |||
47 | 43 | if len(args) != 1: | ||
48 | 44 | parser.print_help() | ||
49 | 45 | sys.exit(1) | ||
50 | 46 | |||
51 | 47 | if opts.debug: | ||
52 | 48 | logging.basicConfig(level=logging.DEBUG) | ||
53 | 49 | else: | ||
54 | 50 | logging.basicConfig(level=logging.INFO) | ||
55 | 51 | |||
56 | 52 | net_name = args[0] | ||
57 | 53 | subnet_name = '{}_subnet'.format(net_name) | ||
58 | 54 | |||
59 | 55 | if (opts.floating_range): | ||
60 | 56 | (start_floating_ip, end_floating_ip) = opts.floating_range.split(':') | ||
61 | 57 | else: | ||
62 | 58 | start_floating_ip = None | ||
63 | 59 | end_floating_ip = None | ||
64 | 60 | |||
65 | 61 | auth = identity.v3.Password( | ||
66 | 62 | user_domain_name=os.environ['OS_DEFAULT_DOMAIN'], | ||
67 | 63 | username=os.environ['OS_USERNAME'], | ||
68 | 64 | password=os.environ['OS_PASSWORD'], | ||
69 | 65 | project_domain_name=os.environ['OS_PROJECT_DOMAIN_NAME'], | ||
70 | 66 | project_name=os.environ['OS_PROJECT_NAME'], | ||
71 | 67 | auth_url=os.environ['OS_AUTH_URL']) | ||
72 | 68 | sess = session.Session(auth=auth) | ||
73 | 69 | |||
74 | 70 | # Clients support sessions | ||
75 | 71 | keystone = v3.Client(session=sess) | ||
76 | 72 | quantum = client.Client(session=sess) | ||
77 | 73 | |||
78 | 74 | # Resolve tenant id | ||
79 | 75 | project_id = None | ||
80 | 76 | for proj in [t._info for t in keystone.projects.list()]: | ||
81 | 77 | if (proj['name'] == | ||
82 | 78 | (opts.project or os.environ['OS_PROJECT_NAME'])): | ||
83 | 79 | project_id = proj['id'] | ||
84 | 80 | break # Tenant ID found - stop looking | ||
85 | 81 | if not project_id: | ||
86 | 82 | logging.error("Unable to locate project id for %s.", opts.tenant) | ||
87 | 83 | sys.exit(1) | ||
88 | 84 | |||
89 | 85 | networks = quantum.list_networks(name=net_name) | ||
90 | 86 | if len(networks['networks']) == 0: | ||
91 | 87 | logging.info("Configuring external network '%s'", net_name) | ||
92 | 88 | network_msg = { | ||
93 | 89 | 'network': { | ||
94 | 90 | 'name': net_name, | ||
95 | 91 | 'router:external': True, | ||
96 | 92 | 'tenant_id': project_id, | ||
97 | 93 | 'provider:network_type': opts.network_type, | ||
98 | 94 | } | ||
99 | 95 | } | ||
100 | 96 | |||
101 | 97 | if opts.network_type == 'vxlan': | ||
102 | 98 | network_msg['network']['provider:segmentation_id'] = 1234 | ||
103 | 99 | elif opts.network_type == 'vlan': | ||
104 | 100 | network_msg['network']['provider:segmentation_id'] = 2 | ||
105 | 101 | network_msg['network']['provider:physical_network'] = 'physnet1' | ||
106 | 102 | else: | ||
107 | 103 | network_msg['network']['provider:segmentation_id'] = 2 | ||
108 | 104 | |||
109 | 105 | logging.info('Creating new external network definition: %s', net_name) | ||
110 | 106 | network = quantum.create_network(network_msg)['network'] | ||
111 | 107 | logging.info('New external network created: %s', network['id']) | ||
112 | 108 | else: | ||
113 | 109 | logging.warning('Network %s already exists.', net_name) | ||
114 | 110 | network = networks['networks'][0] | ||
115 | 111 | |||
116 | 112 | subnets = quantum.list_subnets(name=subnet_name) | ||
117 | 113 | if len(subnets['subnets']) == 0: | ||
118 | 114 | subnet_msg = { | ||
119 | 115 | 'name': subnet_name, | ||
120 | 116 | 'network_id': network['id'], | ||
121 | 117 | 'enable_dhcp': False, | ||
122 | 118 | 'ip_version': 4, | ||
123 | 119 | 'tenant_id': project_id | ||
124 | 120 | } | ||
125 | 121 | |||
126 | 122 | if opts.default_gateway: | ||
127 | 123 | subnet_msg['gateway_ip'] = opts.default_gateway | ||
128 | 124 | if opts.cidr: | ||
129 | 125 | subnet_msg['cidr'] = opts.cidr | ||
130 | 126 | if (start_floating_ip and end_floating_ip): | ||
131 | 127 | subnet_msg['allocation_pools'] = [ | ||
132 | 128 | { | ||
133 | 129 | 'start': start_floating_ip, | ||
134 | 130 | 'end': end_floating_ip | ||
135 | 131 | } | ||
136 | 132 | ] | ||
137 | 133 | |||
138 | 134 | logging.info('Creating new subnet for %s', net_name) | ||
139 | 135 | subnet = quantum.create_subnet({'subnet': subnet_msg})['subnet'] | ||
140 | 136 | logging.info('New subnet created: %s', subnet['id']) | ||
141 | 137 | else: | ||
142 | 138 | logging.warning('Subnet %s already exists.', subnet_name) | ||
143 | 139 | subnet = subnets['subnets'][0] | ||
144 | 140 | |||
145 | 141 | routers = quantum.list_routers(name='provider-router') | ||
146 | 142 | if len(routers['routers']) == 0: | ||
147 | 143 | logging.info('Creating provider router for external network access') | ||
148 | 144 | router = quantum.create_router( | ||
149 | 145 | {'router': {'name': 'provider-router', 'tenant_id': project_id}} | ||
150 | 146 | )['router'] | ||
151 | 147 | logging.info('New router created: %s', (router['id'])) | ||
152 | 148 | else: | ||
153 | 149 | logging.warning('Router provider-router already exists.') | ||
154 | 150 | router = routers['routers'][0] | ||
155 | 151 | |||
156 | 152 | ports = quantum.list_ports(device_owner='network:router_gateway', | ||
157 | 153 | network_id=network['id']) | ||
158 | 154 | if len(ports['ports']) == 0: | ||
159 | 155 | logging.info('Plugging router into ext_net') | ||
160 | 156 | router = \ | ||
161 | 157 | quantum.add_gateway_router( | ||
162 | 158 | router=router['id'], | ||
163 | 159 | body={'network_id': network['id']} | ||
164 | 160 | ) | ||
165 | 161 | logging.info('Router connected to %s', net_name) | ||
166 | 162 | else: | ||
167 | 163 | logging.warning('Router already connect to %s', net_name) | ||
168 | 0 | 164 | ||
169 | === added file 'bin/neutron-tenant-net-ksv3' | |||
170 | --- bin/neutron-tenant-net-ksv3 1970-01-01 00:00:00 +0000 | |||
171 | +++ bin/neutron-tenant-net-ksv3 2016-02-12 13:19:26 +0000 | |||
172 | @@ -0,0 +1,161 @@ | |||
173 | 1 | #!/usr/bin/python | ||
174 | 2 | |||
175 | 3 | from keystoneclient.auth import identity | ||
176 | 4 | from keystoneclient import session, v3 | ||
177 | 5 | from neutronclient.v2_0 import client | ||
178 | 6 | import optparse | ||
179 | 7 | import os | ||
180 | 8 | import sys | ||
181 | 9 | import logging | ||
182 | 10 | |||
183 | 11 | usage = """Usage: %prog [options] name cidr | ||
184 | 12 | |||
185 | 13 | For example: | ||
186 | 14 | |||
187 | 15 | %prog -t admin -r provider-router admin_net 10.5.5.0/24 | ||
188 | 16 | |||
189 | 17 | will create a new network for the admin tenant called 'admin_net' with a | ||
190 | 18 | default gateway of 10.5.5.1 and a dhcp allocation range of | ||
191 | 19 | 10.5.5.2->10.5.5.254 | ||
192 | 20 | """ | ||
193 | 21 | |||
194 | 22 | if __name__ == '__main__': | ||
195 | 23 | parser = optparse.OptionParser(usage) | ||
196 | 24 | parser.add_option('-p', '--project', | ||
197 | 25 | help='Project name to create network for', | ||
198 | 26 | dest='project', action='store', | ||
199 | 27 | default=None) | ||
200 | 28 | parser.add_option('-s', '--shared', | ||
201 | 29 | help='Create a shared rather than private network', | ||
202 | 30 | dest='shared', action='store_true', default=False) | ||
203 | 31 | parser.add_option('-r', '--router', | ||
204 | 32 | help='Router to plug new network into', | ||
205 | 33 | dest='router', action='store', default=None) | ||
206 | 34 | parser.add_option("-d", "--debug", | ||
207 | 35 | help="Enable debug logging", | ||
208 | 36 | dest="debug", action="store_true", default=False) | ||
209 | 37 | parser.add_option("-D", "--disable-dhcp", | ||
210 | 38 | help="Disable dhcp on network", | ||
211 | 39 | dest="dhcp", action="store_false", default=True) | ||
212 | 40 | parser.add_option("-N", "--dns-nameservers", | ||
213 | 41 | help="Comma separated list of dns servers to use.", | ||
214 | 42 | dest="dns_servers", action="store", default=None) | ||
215 | 43 | parser.add_option("--network-type", | ||
216 | 44 | help="Network type.", | ||
217 | 45 | dest="network_type", action="store", default='gre') | ||
218 | 46 | (opts, args) = parser.parse_args() | ||
219 | 47 | |||
220 | 48 | if len(args) != 2: | ||
221 | 49 | parser.print_help() | ||
222 | 50 | sys.exit(1) | ||
223 | 51 | |||
224 | 52 | if opts.debug: | ||
225 | 53 | logging.basicConfig(level=logging.DEBUG) | ||
226 | 54 | else: | ||
227 | 55 | logging.basicConfig(level=logging.INFO) | ||
228 | 56 | |||
229 | 57 | net_name = args[0] | ||
230 | 58 | subnet_name = "{}_subnet".format(net_name) | ||
231 | 59 | cidr = args[1] | ||
232 | 60 | |||
233 | 61 | |||
234 | 62 | auth = identity.v3.Password( | ||
235 | 63 | user_domain_name=os.environ['OS_DEFAULT_DOMAIN'], | ||
236 | 64 | username=os.environ['OS_USERNAME'], | ||
237 | 65 | password=os.environ['OS_PASSWORD'], | ||
238 | 66 | project_domain_name=os.environ['OS_PROJECT_DOMAIN_NAME'], | ||
239 | 67 | project_name=os.environ['OS_PROJECT_NAME'], | ||
240 | 68 | auth_url=os.environ['OS_AUTH_URL']) | ||
241 | 69 | sess = session.Session(auth=auth) | ||
242 | 70 | |||
243 | 71 | # Clients support sessions | ||
244 | 72 | keystone = v3.Client(session=sess) | ||
245 | 73 | quantum = client.Client(session=sess) | ||
246 | 74 | |||
247 | 75 | # Resolve tenant id | ||
248 | 76 | project_id = None | ||
249 | 77 | for proj in [t._info for t in keystone.projects.list()]: | ||
250 | 78 | if (proj['name'] == | ||
251 | 79 | (opts.project or os.environ['OS_PROJECT_NAME'])): | ||
252 | 80 | project_id = proj['id'] | ||
253 | 81 | break # Tenant ID found - stop looking | ||
254 | 82 | if not project_id: | ||
255 | 83 | logging.error("Unable to locate project id for %s.", opts.tenant) | ||
256 | 84 | sys.exit(1) | ||
257 | 85 | |||
258 | 86 | # Create network | ||
259 | 87 | networks = quantum.list_networks(name=net_name) | ||
260 | 88 | if len(networks['networks']) == 0: | ||
261 | 89 | logging.info('Creating tenant network: %s', net_name) | ||
262 | 90 | network_msg = { | ||
263 | 91 | 'network': { | ||
264 | 92 | 'name': net_name, | ||
265 | 93 | 'shared': opts.shared, | ||
266 | 94 | 'tenant_id': project_id, | ||
267 | 95 | 'provider:network_type': opts.network_type, | ||
268 | 96 | } | ||
269 | 97 | } | ||
270 | 98 | |||
271 | 99 | if opts.network_type == 'vxlan': | ||
272 | 100 | network_msg['network']['provider:segmentation_id'] = 1233 | ||
273 | 101 | elif opts.network_type == 'vlan': | ||
274 | 102 | network_msg['network']['provider:segmentation_id'] = 5 | ||
275 | 103 | network_msg['network']['provider:physical_network'] = 'physnet1' | ||
276 | 104 | else: | ||
277 | 105 | network_msg['network']['provider:segmentation_id'] = 5 | ||
278 | 106 | |||
279 | 107 | network = quantum.create_network(network_msg)['network'] | ||
280 | 108 | else: | ||
281 | 109 | logging.warning('Network %s already exists.', net_name) | ||
282 | 110 | network = networks['networks'][0] | ||
283 | 111 | |||
284 | 112 | # Create subnet | ||
285 | 113 | subnets = quantum.list_subnets(name=subnet_name) | ||
286 | 114 | if len(subnets['subnets']) == 0: | ||
287 | 115 | logging.info('Creating subnet for %s', | ||
288 | 116 | net_name) | ||
289 | 117 | subnet_msg = { | ||
290 | 118 | 'subnet': { | ||
291 | 119 | 'name': subnet_name, | ||
292 | 120 | 'network_id': network['id'], | ||
293 | 121 | 'enable_dhcp': opts.dhcp, | ||
294 | 122 | 'cidr': cidr, | ||
295 | 123 | 'ip_version': 4, | ||
296 | 124 | 'tenant_id': project_id | ||
297 | 125 | } | ||
298 | 126 | } | ||
299 | 127 | subnet = quantum.create_subnet(subnet_msg)['subnet'] | ||
300 | 128 | else: | ||
301 | 129 | logging.warning('Subnet %s already exists.', subnet_name) | ||
302 | 130 | subnet = subnets['subnets'][0] | ||
303 | 131 | |||
304 | 132 | # Update dns_nameservers | ||
305 | 133 | if opts.dns_servers: | ||
306 | 134 | msg = { | ||
307 | 135 | 'subnet': { | ||
308 | 136 | 'dns_nameservers': opts.dns_servers.split(',') | ||
309 | 137 | } | ||
310 | 138 | } | ||
311 | 139 | logging.info('Updating dns_nameservers (%s) for subnet %s', | ||
312 | 140 | opts.dns_servers, | ||
313 | 141 | subnet_name) | ||
314 | 142 | quantum.update_subnet(subnet['id'], msg) | ||
315 | 143 | |||
316 | 144 | # Plug subnet into router if provided | ||
317 | 145 | if opts.router: | ||
318 | 146 | routers = quantum.list_routers(name=opts.router) | ||
319 | 147 | if len(routers['routers']) == 0: | ||
320 | 148 | logging.error('Unable to locate provider router %s', opts.router) | ||
321 | 149 | sys.exit(1) | ||
322 | 150 | else: | ||
323 | 151 | # Check to see if subnet already plugged into router | ||
324 | 152 | ports = quantum.list_ports(device_owner='network:router_interface', | ||
325 | 153 | network_id=network['id']) | ||
326 | 154 | if len(ports['ports']) == 0: | ||
327 | 155 | logging.info('Adding interface from %s to %s', | ||
328 | 156 | opts.router, subnet_name) | ||
329 | 157 | router = routers['routers'][0] | ||
330 | 158 | quantum.add_interface_router(router['id'], | ||
331 | 159 | {'subnet_id': subnet['id']}) | ||
332 | 160 | else: | ||
333 | 161 | logging.warning('Router already connected to subnet') | ||
334 | 0 | 162 | ||
335 | === modified file 'configure' | |||
336 | --- configure 2016-01-05 21:04:33 +0000 | |||
337 | +++ configure 2016-02-12 13:19:26 +0000 | |||
338 | @@ -1,6 +1,6 @@ | |||
339 | 1 | #!/bin/sh | 1 | #!/bin/sh |
340 | 2 | 2 | ||
342 | 3 | valid="default stsstack dellstack kernelstack ppc64el powerkvm lxd multihypervisor" | 3 | valid="default defaultksv3 stsstack dellstack kernelstack ppc64el powerkvm lxd multihypervisor" |
343 | 4 | 4 | ||
344 | 5 | usage() { | 5 | usage() { |
345 | 6 | echo "$0 <profile>" | 6 | echo "$0 <profile>" |
346 | 7 | 7 | ||
347 | === modified file 'novarc' | |||
348 | --- novarc 2014-02-27 15:35:17 +0000 | |||
349 | +++ novarc 2016-02-12 13:19:26 +0000 | |||
350 | @@ -1,4 +1,17 @@ | |||
351 | 1 | #!/bin/bash | 1 | #!/bin/bash |
352 | 2 | |||
353 | 3 | # Stop Keystone v3 env polluting v2 env | ||
354 | 4 | unset OS_REGION_NAME | ||
355 | 5 | unset OS_DEFAULT_DOMAIN | ||
356 | 6 | unset OS_USER_DOMAIN_ID | ||
357 | 7 | unset OS_PROJECT_NAME | ||
358 | 8 | unset OS_IDENTITY_API_VERSION | ||
359 | 9 | unset OS_PASSWORD | ||
360 | 10 | unset OS_AUTH_URL | ||
361 | 11 | unset OS_USERNAME | ||
362 | 12 | unset OS_PROJECT_DOMAIN_NAME | ||
363 | 13 | unset OS_AUTH_VERSION | ||
364 | 14 | |||
365 | 2 | export OS_USERNAME=admin | 15 | export OS_USERNAME=admin |
366 | 3 | export OS_PASSWORD=openstack | 16 | export OS_PASSWORD=openstack |
367 | 4 | export OS_TENANT_NAME=admin | 17 | export OS_TENANT_NAME=admin |
368 | 5 | 18 | ||
369 | === added file 'novarcv3' | |||
370 | --- novarcv3 1970-01-01 00:00:00 +0000 | |||
371 | +++ novarcv3 2016-02-12 13:19:26 +0000 | |||
372 | @@ -0,0 +1,13 @@ | |||
373 | 1 | #!/bin/bash | ||
374 | 2 | |||
375 | 3 | export OS_USERNAME=admin | ||
376 | 4 | export OS_PASSWORD=openstack | ||
377 | 5 | export OS_REGION_NAME=RegionOne | ||
378 | 6 | export OS_AUTH_URL=${OS_AUTH_PROTOCOL:-http}://`juju-deployer -f keystone`:5000/v3 | ||
379 | 7 | export OS_DEFAULT_DOMAIN=default | ||
380 | 8 | export OS_PROJECT_NAME=admin | ||
381 | 9 | export OS_PROJECT_DOMAIN_NAME=default | ||
382 | 10 | export OS_IDENTITY_API_VERSION=3 | ||
383 | 11 | export export OS_USER_DOMAIN_ID=default | ||
384 | 12 | # Swift needs this: | ||
385 | 13 | export OS_AUTH_VERSION=3 | ||
386 | 0 | 14 | ||
387 | === added file 'profiles/defaultksv3' | |||
388 | --- profiles/defaultksv3 1970-01-01 00:00:00 +0000 | |||
389 | +++ profiles/defaultksv3 2016-02-12 13:19:26 +0000 | |||
390 | @@ -0,0 +1,97 @@ | |||
391 | 1 | #!/bin/bash | ||
392 | 2 | |||
393 | 3 | set -e | ||
394 | 4 | |||
395 | 5 | function upload_image { | ||
396 | 6 | src=$1 | ||
397 | 7 | image_name=$2 | ||
398 | 8 | image_file=$3 | ||
399 | 9 | case "$src" in | ||
400 | 10 | swift) http_root="http://$SWIFT_IP:80/swift/v1/images";; | ||
401 | 11 | cloudimages) http_root="http://cloud-images.ubuntu.com/${image_name}/current";; | ||
402 | 12 | esac | ||
403 | 13 | [ -f ~/images/$image_file ] || { | ||
404 | 14 | wget -O ~/images/$image_file ${http_root}/${image_file} | ||
405 | 15 | } | ||
406 | 16 | openstack image show $image_name || { | ||
407 | 17 | openstack image create --container-format=bare --disk-format=qcow2 --file=${HOME}/images/$image_file $image_name | ||
408 | 18 | } | ||
409 | 19 | } | ||
410 | 20 | |||
411 | 21 | # Install dependencies and CLI tools | ||
412 | 22 | # See also requirements.txt in tempest (probably need to sudo pip install -r requirements.txt) | ||
413 | 23 | sudo apt-get install git testrepository subunit python-nose python-lxml python-boto \ | ||
414 | 24 | python-junitxml python-subunit python-testresources python-oslotest python-stevedore \ | ||
415 | 25 | python-cinderclient python-glanceclient python-heatclient python-keystoneclient \ | ||
416 | 26 | python-neutronclient python-novaclient python-swiftclient python-ceilometerclient \ | ||
417 | 27 | openvswitch-test openvswitch-common -y | ||
418 | 28 | |||
419 | 29 | # Set serverstack defaults, if not already set. | ||
420 | 30 | [[ -z "$GATEWAY" ]] && export GATEWAY="10.5.0.1" | ||
421 | 31 | [[ -z "$CIDR_EXT" ]] && export CIDR_EXT="10.5.0.0/16" | ||
422 | 32 | [[ -z "$FIP_RANGE" ]] && export FIP_RANGE="10.5.150.0:10.5.200.254" | ||
423 | 33 | [[ -z "$NAMESERVER" ]] && export NAMESERVER="10.245.160.2" | ||
424 | 34 | [[ -z "$CIDR_PRIV" ]] && export CIDR_PRIV="192.168.21.0/24" | ||
425 | 35 | [[ -z "$SWIFT_IP" ]] && export SWIFT_IP="10.245.161.162" | ||
426 | 36 | |||
427 | 37 | # Accept network type as first parameter, assume gre if unspecified | ||
428 | 38 | net_type=${1:-"gre"} | ||
429 | 39 | |||
430 | 40 | # If not on bare metal, add extra port to overcloud neutron-gateway and configure charm to use it | ||
431 | 41 | if [[ "${BARE_METAL^^}" != "TRUE" ]]; then | ||
432 | 42 | unset OS_DEFAULT_DOMAIN OS_PROJECT_NAME OS_IDENTITY_API_VERSION OS_PROJECT_DOMAIN_NAME | ||
433 | 43 | source ~/novarc | ||
434 | 44 | ./bin/post-deploy-config neutron-gateway | ||
435 | 45 | fi | ||
436 | 46 | # Configure neutron networking on overcloud | ||
437 | 47 | source novarcv3 | ||
438 | 48 | ./bin/neutron-ext-net-ksv3 --network-type $net_type -g $GATEWAY -c $CIDR_EXT -f $FIP_RANGE ext_net | ||
439 | 49 | ./bin/neutron-tenant-net-ksv3 --network-type $net_type -p admin -r provider-router -N $NAMESERVER private $CIDR_PRIV | ||
440 | 50 | |||
441 | 51 | # Download images if not already present | ||
442 | 52 | mkdir -vp ~/images | ||
443 | 53 | upload_image cloudimages wily wily-server-cloudimg-amd64-disk1.img | ||
444 | 54 | upload_image cloudimages vivid vivid-server-cloudimg-amd64-disk1.img | ||
445 | 55 | upload_image cloudimages trusty trusty-server-cloudimg-amd64-disk1.img | ||
446 | 56 | upload_image cloudimages precise precise-server-cloudimg-amd64-disk1.img | ||
447 | 57 | upload_image swift cirros cirros-0.3.4-x86_64-disk.img | ||
448 | 58 | |||
449 | 59 | # Create demo/testing users, tenants and flavor | ||
450 | 60 | openstack project show demo || openstack project create demo | ||
451 | 61 | openstack user show demo || openstack user create --project demo --password pass --enable --email demo@dev.null demo | ||
452 | 62 | openstack role show Member || openstack role create Member | ||
453 | 63 | openstack role add --user demo --project demo Member | ||
454 | 64 | openstack project show alt_demo || openstack project create alt_demo | ||
455 | 65 | openstack user show alt_demo || openstack user create --project alt_demo --password secret --enable --email alt_demo@dev.null alt_demo | ||
456 | 66 | openstack role add --user alt_demo --project alt_demo Member | ||
457 | 67 | |||
458 | 68 | openstack flavor show m1.cirros || openstack flavor create --id 6 --ram 64 --disk 1 --vcpus 1 m1.cirros | ||
459 | 69 | openstack flavor show m1.tempest || openstack flavor create --id 7 --ram 256 --disk 5 --vcpus 1 m1.tempest | ||
460 | 70 | openstack flavor show m2.tempest || openstack flavor create --id 8 --ram 512 --disk 5 --vcpus 1 m2.tempest | ||
461 | 71 | exit 0 | ||
462 | 72 | # Gather vars for tempest template | ||
463 | 73 | access=$(openstack ec2 credentials create --user demo --project demo | awk '/access/ {print $4}') | ||
464 | 74 | secret=$(openstack ec2 credentials show $access | awk '/secret/ {print $4}') | ||
465 | 75 | image_id=$(openstack image list | awk '/cirros/ {print $2}') | ||
466 | 76 | image_alt_id=$(openstack image list | awk '/precise/ {print $2}') | ||
467 | 77 | ext_net=$(openstack network list | awk '/ext_net/ {print $2}') | ||
468 | 78 | # This needs fixing: | ||
469 | 79 | router=$(neutron --os-user-domain-id default --os-project-domain-id default router-list | grep provider-router | awk '{ print $2}') | ||
470 | 80 | keystone=$(juju-deployer -f keystone) | ||
471 | 81 | dashboard=$(juju-deployer -f openstack-dashboard) | ||
472 | 82 | ncc=$(juju-deployer -f nova-cloud-controller) | ||
473 | 83 | http=${OS_AUTH_PROTOCOL:-http} | ||
474 | 84 | |||
475 | 85 | # Insert vars into tempest conf | ||
476 | 86 | sed -e "s/__IMAGE_ID__/$image_id/g" -e "s/__IMAGE_ALT_ID__/$image_alt_id/g" \ | ||
477 | 87 | -e "s/__DASHBOARD__/$dashboard/g" -e "s/__KEYSTONE__/$keystone/g" \ | ||
478 | 88 | -e "s/__EXT_NET__/$ext_net/g" -e "s/__PROTO__/$http/g" \ | ||
479 | 89 | -e "s/__SWIFT__/$SWIFT_IP/g" \ | ||
480 | 90 | -e "s/__NAMESERVER__/$NAMESERVER/g" \ | ||
481 | 91 | -e "s/__CIDR_PRIV__/${CIDR_PRIV////\\/}/g" \ | ||
482 | 92 | -e "s/__NCC__/$ncc/g" -e "s/__SECRET__/$secret/g" -e "s/__ACCESS__/$access/g" \ | ||
483 | 93 | templates/tempest/tempest.conf.template > tempest.conf | ||
484 | 94 | |||
485 | 95 | # Git tempest, place the rendered tempest template | ||
486 | 96 | [ -d tempest ] || git clone https://github.com/openstack/tempest | ||
487 | 97 | cp tempest.conf tempest/etc |
I believe similar functionality was merged into o-c-t in a separate proposal. If that is not the case, please rebase and update this proposal. Thank you!