diff options
Diffstat (limited to 'aria/multivim-plugin/system_tests/openstack_nova_net_handler.py')
-rw-r--r-- | aria/multivim-plugin/system_tests/openstack_nova_net_handler.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/aria/multivim-plugin/system_tests/openstack_nova_net_handler.py b/aria/multivim-plugin/system_tests/openstack_nova_net_handler.py new file mode 100644 index 0000000000..06fa0ab4d0 --- /dev/null +++ b/aria/multivim-plugin/system_tests/openstack_nova_net_handler.py @@ -0,0 +1,98 @@ +######## +# Copyright (c) 2014 GigaSpaces Technologies Ltd. All rights reserved +# +# 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 novaclient.v2.client as nvclient + +from system_tests.openstack_handler import OpenstackHandler + + +class OpenstackNovaNetHandler(OpenstackHandler): + + # using the Config Readers of the regular OpenstackHandler - attempts + # of reading neutron-related data may fail but shouldn't happen from + # nova-net tests in the first place + # CloudifyConfigReader = None + + def openstack_clients(self): + creds = self._client_creds() + return nvclient.Client(**creds) + + def openstack_infra_state(self): + nova = self.openstack_clients() + prefix = self.env.resources_prefix + return { + 'security_groups': dict(self._security_groups(nova, prefix)), + 'servers': dict(self._servers(nova, prefix)), + 'key_pairs': dict(self._key_pairs(nova, prefix)), + 'floatingips': dict(self._floatingips(nova, prefix)), + } + + def _floatingips(self, nova, prefix): + return [(ip.id, ip.ip) + for ip in nova.floating_ips.list()] + + def _security_groups(self, nova, prefix): + return [(n.id, n.name) + for n in nova.security_groups.list() + if self._check_prefix(n.name, prefix)] + + def _remove_openstack_resources_impl(self, resources_to_remove): + nova = self.openstack_clients() + + servers = nova.servers.list() + keypairs = nova.keypairs.list() + floatingips = nova.floating_ips.list() + security_groups = nova.security_groups.list() + + failed = { + 'servers': {}, + 'key_pairs': {}, + 'floatingips': {}, + 'security_groups': {} + } + + for server in servers: + if server.id in resources_to_remove['servers']: + with self._handled_exception(server.id, failed, 'servers'): + nova.servers.delete(server) + for key_pair in keypairs: + if key_pair.name == self.env.agent_keypair_name and \ + self.env.use_existing_agent_keypair: + # this is a pre-existing agent key-pair, do not remove + continue + elif key_pair.name == self.env.management_keypair_name and \ + self.env.use_existing_manager_keypair: + # this is a pre-existing manager key-pair, do not remove + continue + elif key_pair.id in resources_to_remove['key_pairs']: + with self._handled_exception(key_pair.id, failed, 'key_pairs'): + nova.keypairs.delete(key_pair) + for floatingip in floatingips: + if floatingip.id in resources_to_remove['floatingips']: + with self._handled_exception(floatingip.id, failed, + 'floatingips'): + nova.floating_ips.delete(floatingip) + for security_group in security_groups: + if security_group.name == 'default': + continue + if security_group.id in resources_to_remove['security_groups']: + with self._handled_exception(security_group.id, failed, + 'security_groups'): + nova.security_groups.delete(security_group) + + return failed + + +handler = OpenstackNovaNetHandler |