blob: 14730cf3266d4a03dea5d043136941ebd136fd24 [file] [log] [blame]
nithya-ganesan222efd72015-01-22 12:20:27 +00001# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14from oslo_log import log as logging
15
16from tempest import config
nithya-ganesan222efd72015-01-22 12:20:27 +000017from tempest_lib import exceptions as lib_exc
18
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +010019from tempest.common.utils import data_utils
20
nithya-ganesan222efd72015-01-22 12:20:27 +000021CONF = config.CONF
22LOG = logging.getLogger(__name__)
23
24
25def create_ssh_security_group(os, add_rule=False):
Yaroslav Lobankove5cc9fb2015-08-07 17:30:51 +030026 security_groups_client = os.security_groups_client
27 security_group_rules_client = os.security_group_rules_client
nithya-ganesan222efd72015-01-22 12:20:27 +000028 sg_name = data_utils.rand_name('securitygroup-')
29 sg_description = data_utils.rand_name('description-')
Yaroslav Lobankove5cc9fb2015-08-07 17:30:51 +030030 security_group = security_groups_client.create_security_group(
31 name=sg_name, description=sg_description)
nithya-ganesan222efd72015-01-22 12:20:27 +000032 if add_rule:
Yaroslav Lobankove5cc9fb2015-08-07 17:30:51 +030033 security_group_rules_client.create_security_group_rule(
Ken'ichi Ohmichieb7eeec2015-07-21 01:00:06 +000034 parent_group_id=security_group['id'], ip_protocol='tcp',
35 from_port=22, to_port=22)
Yaroslav Lobankove5cc9fb2015-08-07 17:30:51 +030036 security_group_rules_client.create_security_group_rule(
Ken'ichi Ohmichieb7eeec2015-07-21 01:00:06 +000037 parent_group_id=security_group['id'], ip_protocol='icmp',
38 from_port=-1, to_port=-1)
nithya-ganesan222efd72015-01-22 12:20:27 +000039 LOG.debug("SSH Validation resource security group with tcp and icmp "
40 "rules %s created"
41 % sg_name)
42 return security_group
43
44
45def create_validation_resources(os, validation_resources=None):
46 # Create and Return the validation resources required to validate a VM
47 validation_data = {}
48 if validation_resources:
49 if validation_resources['keypair']:
50 keypair_name = data_utils.rand_name('keypair')
51 validation_data['keypair'] = \
Ken'ichi Ohmichie364bce2015-07-17 10:27:59 +000052 os.keypairs_client.create_keypair(name=keypair_name)
nithya-ganesan222efd72015-01-22 12:20:27 +000053 LOG.debug("Validation resource key %s created" % keypair_name)
54 add_rule = False
55 if validation_resources['security_group']:
56 if validation_resources['security_group_rules']:
57 add_rule = True
58 validation_data['security_group'] = \
59 create_ssh_security_group(os, add_rule)
60 if validation_resources['floating_ip']:
61 floating_client = os.floating_ips_client
62 validation_data['floating_ip'] = \
63 floating_client.create_floating_ip()
64 return validation_data
65
66
67def clear_validation_resources(os, validation_data=None):
68 # Cleanup the vm validation resources
69 has_exception = None
70 if validation_data:
71 if 'keypair' in validation_data:
72 keypair_client = os.keypairs_client
73 keypair_name = validation_data['keypair']['name']
74 try:
75 keypair_client.delete_keypair(keypair_name)
76 except lib_exc.NotFound:
77 LOG.warn("Keypair %s is not found when attempting to delete"
78 % keypair_name)
79 except Exception as exc:
80 LOG.exception('Exception raised while deleting key %s'
81 % keypair_name)
82 if not has_exception:
83 has_exception = exc
84 if 'security_group' in validation_data:
85 security_group_client = os.security_groups_client
86 sec_id = validation_data['security_group']['id']
87 try:
88 security_group_client.delete_security_group(sec_id)
89 security_group_client.wait_for_resource_deletion(sec_id)
90 except lib_exc.NotFound:
91 LOG.warn("Security group %s is not found when attempting to "
92 " delete" % sec_id)
93 except lib_exc.Conflict as exc:
94 LOG.exception('Conflict while deleting security '
95 'group %s VM might not be deleted ' % sec_id)
96 if not has_exception:
97 has_exception = exc
98 except Exception as exc:
99 LOG.exception('Exception raised while deleting security '
100 'group %s ' % sec_id)
101 if not has_exception:
102 has_exception = exc
103 if 'floating_ip' in validation_data:
104 floating_client = os.floating_ips_client
105 fip_id = validation_data['floating_ip']['id']
106 try:
107 floating_client.delete_floating_ip(fip_id)
108 except lib_exc.NotFound:
109 LOG.warn('Floating ip %s not found while attempting to delete'
110 % fip_id)
111 except Exception as exc:
112 LOG.exception('Exception raised while deleting ip %s '
113 % fip_id)
114 if not has_exception:
115 has_exception = exc
116 if has_exception:
117 raise has_exception