blob: 9e83a073b014bd02054d524c84066cf2e54a4398 [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 +000017
Ken'ichi Ohmichief1c1ce2017-03-10 11:07:10 -080018from tempest.lib.common.utils import data_utils
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050019from tempest.lib import exceptions as lib_exc
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +010020
nithya-ganesan222efd72015-01-22 12:20:27 +000021CONF = config.CONF
22LOG = logging.getLogger(__name__)
23
24
Matthew Treinish861619c2016-06-16 17:11:49 -040025def _create_neutron_sec_group_rules(os, sec_group):
26 sec_group_rules_client = os.security_group_rules_client
27 ethertype = 'IPv4'
28 if CONF.validation.ip_version_for_ssh == 6:
29 ethertype = 'IPv6'
30
31 sec_group_rules_client.create_security_group_rule(
32 security_group_id=sec_group['id'],
33 protocol='tcp',
34 ethertype=ethertype,
35 port_range_min=22,
36 port_range_max=22,
37 direction='ingress')
38 sec_group_rules_client.create_security_group_rule(
39 security_group_id=sec_group['id'],
40 protocol='icmp',
41 ethertype=ethertype,
42 direction='ingress')
43
44
nithya-ganesan222efd72015-01-22 12:20:27 +000045def create_ssh_security_group(os, add_rule=False):
John Warrenf2345512015-12-10 13:39:30 -050046 security_groups_client = os.compute_security_groups_client
John Warren5cdbf422016-01-05 12:42:43 -050047 security_group_rules_client = os.compute_security_group_rules_client
nithya-ganesan222efd72015-01-22 12:20:27 +000048 sg_name = data_utils.rand_name('securitygroup-')
49 sg_description = data_utils.rand_name('description-')
Yaroslav Lobankove5cc9fb2015-08-07 17:30:51 +030050 security_group = security_groups_client.create_security_group(
ghanshyamb610b772015-08-24 17:29:38 +090051 name=sg_name, description=sg_description)['security_group']
nithya-ganesan222efd72015-01-22 12:20:27 +000052 if add_rule:
Matthew Treinish861619c2016-06-16 17:11:49 -040053 if CONF.service_available.neutron:
54 _create_neutron_sec_group_rules(os, security_group)
55 else:
56 security_group_rules_client.create_security_group_rule(
57 parent_group_id=security_group['id'], ip_protocol='tcp',
58 from_port=22, to_port=22)
59 security_group_rules_client.create_security_group_rule(
60 parent_group_id=security_group['id'], ip_protocol='icmp',
61 from_port=-1, to_port=-1)
nithya-ganesan222efd72015-01-22 12:20:27 +000062 LOG.debug("SSH Validation resource security group with tcp and icmp "
Jordan Pittier525ec712016-12-07 17:51:26 +010063 "rules %s created", sg_name)
nithya-ganesan222efd72015-01-22 12:20:27 +000064 return security_group
65
66
67def create_validation_resources(os, validation_resources=None):
68 # Create and Return the validation resources required to validate a VM
69 validation_data = {}
70 if validation_resources:
71 if validation_resources['keypair']:
72 keypair_name = data_utils.rand_name('keypair')
ghanshyamdee01f22015-08-17 11:41:47 +090073 validation_data.update(os.keypairs_client.create_keypair(
74 name=keypair_name))
Jordan Pittier525ec712016-12-07 17:51:26 +010075 LOG.debug("Validation resource key %s created", keypair_name)
nithya-ganesan222efd72015-01-22 12:20:27 +000076 add_rule = False
77 if validation_resources['security_group']:
78 if validation_resources['security_group_rules']:
79 add_rule = True
80 validation_data['security_group'] = \
81 create_ssh_security_group(os, add_rule)
82 if validation_resources['floating_ip']:
Matt Riedemanndfbefae2017-06-05 15:50:14 -040083 if CONF.service_available.neutron:
84 floatingip = os.floating_ips_client.create_floatingip(
85 floating_network_id=CONF.network.public_network_id)
86 # validation_resources['floating_ip'] has historically looked
87 # like a compute API POST /os-floating-ips response, so we need
88 # to mangle it a bit for a Neutron response with different
89 # fields.
90 validation_data['floating_ip'] = floatingip['floatingip']
91 validation_data['floating_ip']['ip'] = (
92 floatingip['floatingip']['floating_ip_address'])
93 else:
94 # NOTE(mriedem): The os-floating-ips compute API was deprecated
95 # in the 2.36 microversion. Any tests for CRUD operations on
96 # floating IPs using the compute API should be capped at 2.35.
97 validation_data.update(
98 os.compute_floating_ips_client.create_floating_ip(
99 pool=CONF.network.floating_network_name))
nithya-ganesan222efd72015-01-22 12:20:27 +0000100 return validation_data
101
102
103def clear_validation_resources(os, validation_data=None):
104 # Cleanup the vm validation resources
105 has_exception = None
106 if validation_data:
107 if 'keypair' in validation_data:
108 keypair_client = os.keypairs_client
109 keypair_name = validation_data['keypair']['name']
110 try:
111 keypair_client.delete_keypair(keypair_name)
112 except lib_exc.NotFound:
Jordan Pittier525ec712016-12-07 17:51:26 +0100113 LOG.warning(
114 "Keypair %s is not found when attempting to delete",
115 keypair_name
116 )
nithya-ganesan222efd72015-01-22 12:20:27 +0000117 except Exception as exc:
Jordan Pittier525ec712016-12-07 17:51:26 +0100118 LOG.exception('Exception raised while deleting key %s',
119 keypair_name)
nithya-ganesan222efd72015-01-22 12:20:27 +0000120 if not has_exception:
121 has_exception = exc
122 if 'security_group' in validation_data:
John Warrenf2345512015-12-10 13:39:30 -0500123 security_group_client = os.compute_security_groups_client
nithya-ganesan222efd72015-01-22 12:20:27 +0000124 sec_id = validation_data['security_group']['id']
125 try:
126 security_group_client.delete_security_group(sec_id)
127 security_group_client.wait_for_resource_deletion(sec_id)
128 except lib_exc.NotFound:
zhangguoqing6c096642016-01-04 06:17:21 +0000129 LOG.warning("Security group %s is not found when attempting "
Jordan Pittier525ec712016-12-07 17:51:26 +0100130 "to delete", sec_id)
nithya-ganesan222efd72015-01-22 12:20:27 +0000131 except lib_exc.Conflict as exc:
132 LOG.exception('Conflict while deleting security '
Jordan Pittier525ec712016-12-07 17:51:26 +0100133 'group %s VM might not be deleted', sec_id)
nithya-ganesan222efd72015-01-22 12:20:27 +0000134 if not has_exception:
135 has_exception = exc
136 except Exception as exc:
137 LOG.exception('Exception raised while deleting security '
Jordan Pittier525ec712016-12-07 17:51:26 +0100138 'group %s', sec_id)
nithya-ganesan222efd72015-01-22 12:20:27 +0000139 if not has_exception:
140 has_exception = exc
141 if 'floating_ip' in validation_data:
John Warrene74890a2015-11-11 15:18:01 -0500142 floating_client = os.compute_floating_ips_client
nithya-ganesan222efd72015-01-22 12:20:27 +0000143 fip_id = validation_data['floating_ip']['id']
144 try:
145 floating_client.delete_floating_ip(fip_id)
146 except lib_exc.NotFound:
zhangguoqing6c096642016-01-04 06:17:21 +0000147 LOG.warning('Floating ip %s not found while attempting to '
Jordan Pittier525ec712016-12-07 17:51:26 +0100148 'delete', fip_id)
nithya-ganesan222efd72015-01-22 12:20:27 +0000149 except Exception as exc:
Jordan Pittier525ec712016-12-07 17:51:26 +0100150 LOG.exception('Exception raised while deleting ip %s', fip_id)
nithya-ganesan222efd72015-01-22 12:20:27 +0000151 if not has_exception:
152 has_exception = exc
153 if has_exception:
154 raise has_exception