diff options
author | mbeierl <mark.beierl@dell.com> | 2018-01-17 11:55:56 -0500 |
---|---|---|
committer | mbeierl <mark.beierl@dell.com> | 2018-01-23 21:11:59 -0500 |
commit | 0869c3a314d864d65b2d9faf98653378e411d493 (patch) | |
tree | b80aa999247c8432393b957434046dcbbb6c56eb /docker/storperf-master/storperf/storperf_master.py | |
parent | fe3f5e7d38a10bfca274b9ce0f8c7db0510c26ad (diff) |
Removes Configuration DB
Removes the configuration DB from storperf_master and replaces
it with direct calls to Heat. Allows for container to
discover an existing stack if it already exists.
Change-Id: I32e767d5173dbfd58aa1d2127a478a1d36392592
JIRA: STORPERF-236
Signed-off-by: mbeierl <mark.beierl@dell.com>
Diffstat (limited to 'docker/storperf-master/storperf/storperf_master.py')
-rw-r--r-- | docker/storperf-master/storperf/storperf_master.py | 183 |
1 files changed, 76 insertions, 107 deletions
diff --git a/docker/storperf-master/storperf/storperf_master.py b/docker/storperf-master/storperf/storperf_master.py index 45d5d89..da8a05e 100644 --- a/docker/storperf-master/storperf/storperf_master.py +++ b/docker/storperf-master/storperf/storperf_master.py @@ -20,10 +20,9 @@ from snaps.config.stack import StackConfig from snaps.openstack.create_stack import OpenStackHeatStack from snaps.openstack.os_credentials import OSCreds -from storperf.db.configuration_db import ConfigurationDB from storperf.db.job_db import JobDB from storperf.test_executor import TestExecutor -from snaps.openstack.utils import heat_utils +from snaps.openstack.utils import heat_utils, cinder_utils, glance_utils class ParameterError(Exception): @@ -35,11 +34,10 @@ class StorPerfMaster(object): def __init__(self): self.logger = logging.getLogger(__name__) - self.configuration_db = ConfigurationDB() self.job_db = JobDB() self.stack_settings = StackConfig( - name='StorPerfAgent', + name='StorPerfAgentGroup', template_path='storperf/resources/hot/agent-group.yaml') self.os_creds = OSCreds(username=os.environ.get('OS_USERNAME'), @@ -49,129 +47,137 @@ class StorPerfMaster(object): self.heat_stack = OpenStackHeatStack(self.os_creds, self.stack_settings) + self.username = None + self.password = None self._test_executor = TestExecutor() - self._last_openstack_auth = datetime.now() + self._agent_count = 1 + self._agent_image = "Ubuntu 14.04" + self._agent_flavor = "storperf" + self._availability_zone = None + self._public_network = None + self._volume_size = 1 + self._cached_stack_id = None + self._last_snaps_check_time = None @property def volume_size(self): - value = self.configuration_db.get_configuration_value( - 'stack', - 'volume_size') - if (value is None): - self.volume_size = 1 - value = 1 - return int(value) + self._get_stack_info() + return self._volume_size @volume_size.setter def volume_size(self, value): if (self.stack_id is not None): raise ParameterError( "ERROR: Cannot change volume size after stack is created") - - self.configuration_db.set_configuration_value( - 'stack', - 'volume_size', - value) + self._volume_size = value @property def agent_count(self): - value = self.configuration_db.get_configuration_value( - 'stack', - 'agent_count') - - if (value is None): - self.agent_count = 1 - value = 1 - return int(value) + self._get_stack_info() + return self._agent_count @agent_count.setter def agent_count(self, value): if (self.stack_id is not None): raise ParameterError( "ERROR: Cannot change agent count after stack is created") - - self.configuration_db.set_configuration_value( - 'stack', - 'agent_count', - value) + self._agent_count = value @property def agent_image(self): - value = self.configuration_db.get_configuration_value( - 'stack', - 'agent_image') - - if (value is None): - value = 'Ubuntu 14.04' - self.agent_image = value - - return value + self._get_stack_info() + return self._agent_image @agent_image.setter def agent_image(self, value): if (self.stack_id is not None): raise ParameterError( "ERROR: Cannot change agent image after stack is created") - - self.configuration_db.set_configuration_value( - 'stack', - 'agent_image', - value) + self._agent_image = value @property def public_network(self): - return self.configuration_db.get_configuration_value( - 'stack', - 'public_network') + self._get_stack_info() + return self._public_network @public_network.setter def public_network(self, value): if (self.stack_id is not None): raise ParameterError( "ERROR: Cannot change public network after stack is created") - - self.configuration_db.set_configuration_value( - 'stack', - 'public_network', - value) + self._public_network = value @property def agent_flavor(self): - return self.configuration_db.get_configuration_value( - 'stack', - 'agent_flavor') + self._get_stack_info() + return self._agent_flavor @agent_flavor.setter def agent_flavor(self, value): if (self.stack_id is not None): raise ParameterError( "ERROR: Cannot change flavor after stack is created") - - self.configuration_db.set_configuration_value( - 'stack', - 'agent_flavor', - value) + self._agent_flavor = value @property def stack_id(self): + self._get_stack_info() + return self._cached_stack_id + + def _get_stack_info(self): + if self._last_snaps_check_time is not None: + time_since_check = datetime.now() - self._last_snaps_check_time + if time_since_check.total_seconds() < 30: + return self._cached_stack_id + self.heat_stack.initialize() if self.heat_stack.get_stack() is not None: - return self.heat_stack.get_stack().id + self._last_snaps_check_time = datetime.now() + if self._cached_stack_id == self.heat_stack.get_stack().id: + return self._cached_stack_id + self._cached_stack_id = self.heat_stack.get_stack().id + cinder_cli = cinder_utils.cinder_client(self.os_creds) + glance_cli = glance_utils.glance_client(self.os_creds) + + vm_inst_creators = self.heat_stack.get_vm_inst_creators() + + self._agent_count = len(vm_inst_creators) + vm1 = vm_inst_creators[0] + self._availability_zone = \ + vm1.instance_settings.availability_zone + self._agent_flavor = vm1.instance_settings.flavor.name + + server = vm1.get_vm_inst() + + image_id = server.image_id + image = glance_utils.get_image_by_id(glance_cli, image_id) + self._agent_image = image.name + + volume_id = server.volume_ids[0]['id'] + volume = cinder_utils.get_volume_by_id( + cinder_cli, volume_id) + self._volume_size = volume.size + router_creators = self.heat_stack.get_router_creators() + router1 = router_creators[0] + + self._public_network = \ + router1.router_settings.external_gateway else: - return None + self._cached_stack_id = None + + return self._cached_stack_id @property def availability_zone(self): - return self.configuration_db.get_configuration_value( - 'stack', - 'availability_zone') + self._get_stack_info() + return self._availability_zone @availability_zone.setter def availability_zone(self, value): - self.configuration_db.set_configuration_value( - 'stack', - 'availability_zone', - value) + if (self.stack_id is not None): + raise ParameterError( + "ERROR: Cannot change zone after stack is created") + self._availability_zone = value @property def volume_quota(self): @@ -225,49 +231,12 @@ class StorPerfMaster(object): @property def workloads(self): - return self.configuration_db.get_configuration_value( - 'workload', - 'workloads') + return str(self._test_executor.workload_modules) @workloads.setter def workloads(self, value): self._test_executor.register_workloads(value) - self.configuration_db.set_configuration_value( - 'workload', - 'workloads', - str(self._test_executor.workload_modules)) - - @property - def username(self): - return self.configuration_db.get_configuration_value( - 'stack', - 'username' - ) - - @username.setter - def username(self, value): - self.configuration_db.set_configuration_value( - 'stack', - 'username', - value - ) - - @property - def password(self): - return self.configuration_db.get_configuration_value( - 'stack', - 'password' - ) - - @password.setter - def password(self, value): - self.configuration_db.set_configuration_value( - 'stack', - 'password', - value - ) - def get_logs(self, lines=None): LOG_DIR = './storperf.log' |