1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import six
from tempest.lib.cli import base
from tempest.lib.cli import output_parser
class OpenStackClientTestBase(base.ClientTestBase):
"""Command line client base functions."""
def setUp(self):
super(OpenStackClientTestBase, self).setUp()
self.parser = output_parser
def _get_clients(self):
cli_dir = os.environ.get(
'OS_HEATCLIENT_EXEC_DIR',
os.path.join(os.path.abspath('.'), '.tox/functional/bin'))
return base.CLIClient(
username=os.environ.get('OS_USERNAME'),
password=os.environ.get('OS_PASSWORD'),
tenant_name=os.environ.get('OS_TENANT_NAME'),
uri=os.environ.get('OS_AUTH_URL'),
cli_dir=cli_dir)
def openstack(self, *args, **kwargs):
return self.clients.openstack(*args, **kwargs)
def get_template_path(self, templ_name):
return os.path.join(os.path.dirname(os.path.realpath(__file__)),
'../../templates/%s' % templ_name)
def show_to_dict(self, output):
obj = {}
items = self.parser.listing(output)
for item in items:
obj[item['Field']] = six.text_type(item['Value'])
return dict((self._key_name(k), v) for k, v in six.iteritems(obj))
def _key_name(self, key):
return key.lower().replace(' ', '_')
def list_to_dict(self, output, id):
obj = {}
items = self.parser.listing(output)
for item in items:
if item['ID'] == id:
obj = item
break
return dict((self._key_name(k), v) for k, v in six.iteritems(obj))
def _stack_create(self, name, template, parameters=[], wait=True):
cmd = 'stack create ' + name
if template:
cmd += ' -t ' + template
if wait:
cmd += ' --wait'
for parameter in parameters:
cmd += ' --parameter ' + parameter
stack_raw = self.openstack(cmd)
stack = self.show_to_dict(stack_raw)
self.addCleanup(self._stack_delete, stack['id'])
return stack
def _stack_delete(self, id, wait=False):
cmd = 'stack delete ' + id + ' --yes'
if wait:
cmd += ' --wait'
if id in self.openstack('stack list --short'):
self.openstack(cmd)
def _stack_suspend(self, id, wait=True):
cmd = 'stack suspend ' + id
if wait:
cmd += ' --wait'
stack_raw = self.openstack(cmd)
stack = self.list_to_dict(stack_raw, id)
return stack
def _stack_resume(self, id, wait=True):
cmd = 'stack resume ' + id
if wait:
cmd += ' --wait'
stack_raw = self.openstack(cmd)
stack = self.list_to_dict(stack_raw, id)
return stack
def _stack_snapshot_create(self, id, name):
cmd = 'stack snapshot create ' + id + ' --name ' + name
snapshot_raw = self.openstack(cmd)
snapshot = self.show_to_dict(snapshot_raw)
self.addCleanup(self._stack_snapshot_delete, id, snapshot['id'])
return snapshot
def _stack_snapshot_delete(self, id, snapshot_id):
cmd = 'stack snapshot delete ' + id + ' ' + snapshot_id
if snapshot_id in self.openstack('stack snapshot list ' + id):
self.openstack(cmd)
def _stack_snapshot_restore(self, id, snapshot_id):
cmd = 'stack snapshot restore ' + id + ' ' + snapshot_id
self.openstack(cmd)
|