# Copyright (c) 2015 Rackspace, Inc. # # 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 logging from functionaltests.cli.v1.behaviors import base_behaviors class ContainerBehaviors(base_behaviors.BaseBehaviors): def __init__(self): super(ContainerBehaviors, self).__init__() self.LOG = logging.getLogger(type(self).__name__) self.container_hrefs_to_delete = [] def delete_container(self, container_href): """Delete a container :param container_href the href to the container to delete """ argv = ['secret', 'container', 'delete'] self.add_auth_and_endpoint(argv) argv.extend([container_href]) stdout, stderr = self.issue_barbican_command(argv) self.container_hrefs_to_delete.remove(container_href) def create_container(self, secret_hrefs=[]): """Create a container :param secret_hrefs A list of existing secrets :return: the href to the newly created container """ argv = ['secret', 'container', 'create'] self.add_auth_and_endpoint(argv) for secret_href in secret_hrefs: argv.extend(['--secret', secret_href]) stdout, stderr = self.issue_barbican_command(argv) container_data = self._prettytable_to_dict(stdout) container_href = container_data['Container href'] self.container_hrefs_to_delete.append(container_href) return container_href def get_container(self, container_href): """Get a container :param: the href to a container :return: dict of container values, or an empty dict if the container is not found. """ argv = ['secret', 'container', 'get'] self.add_auth_and_endpoint(argv) argv.extend([container_href]) stdout, stderr = self.issue_barbican_command(argv) if '4xx Client error: Not Found' in stderr: return {} container_data = self._prettytable_to_dict(stdout) return container_data def list_containers(self): """List containers :return: a list of containers """ argv = ['secret', 'container', 'list'] self.add_auth_and_endpoint(argv) stdout, stderr = self.issue_barbican_command(argv) container_list = self._prettytable_to_list(stdout) return container_list def delete_all_created_containers(self): """Delete all containers that we created""" # Create a copy of the list -- otherwise delete_container will remove # items from the list as we are iterating over it containers_to_delete = list(self.container_hrefs_to_delete) for href in containers_to_delete: self.delete_container(href)