From 237dd085ed72a8002c32b8092ed981ef96abc43b Mon Sep 17 00:00:00 2001 From: vinod pandarinathan Date: Fri, 12 Jun 2015 10:38:45 -0700 Subject: [PATCH] Cloud pulse conductor initial code uses direct DB access Change-Id: I257fc7aa9e7a584e4f40e2b98ce883f00a9ee140 Partially-Implements: blueprint conductor --- cloudpulse/conductor/__init__.py | 0 cloudpulse/conductor/api.py | 60 ++++++++++++++++++++++++++++++++ cloudpulse/conductor/config.py | 34 ++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 cloudpulse/conductor/__init__.py create mode 100644 cloudpulse/conductor/api.py create mode 100644 cloudpulse/conductor/config.py diff --git a/cloudpulse/conductor/__init__.py b/cloudpulse/conductor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cloudpulse/conductor/api.py b/cloudpulse/conductor/api.py new file mode 100644 index 0000000..af15936 --- /dev/null +++ b/cloudpulse/conductor/api.py @@ -0,0 +1,60 @@ +# 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. + +"""API for interfacing with Magnum Backend.""" +from oslo_config import cfg + +from cloudpulse.common import rpc_service +from cloudpulse import objects + + +# The Backend API class serves as a AMQP client for communicating +# on a topic exchange specific to the conductors. This allows the ReST +# API to trigger operations on the conductors + +class API(rpc_service.API): + def __init__(self, transport=None, context=None, topic=None): + if topic is None: + cfg.CONF.import_opt('topic', 'cloudpulse.conductor.config', + group='conductor') + super(API, self).__init__(transport, context, + topic=cfg.CONF.conductor.topic) + + # Test Operations + def test_create(self, test, cpulse_create_timeout): + # TODO(RPC CALL) + # return self._call('cpulse_create', test=test, cpulse_create_timeout) + test.create(cpulse_create_timeout) + return test + + def test_list(self, context, limit, marker, sort_key, sort_dir): + return objects.Cpulse.list(context, limit, marker, sort_key, sort_dir) + + def test_delete(self, context, uuid): + # return self._call('cpulse_delete', uuid=uuid) + test = objects.Cpulse.get_by_uuid(context, uuid=uuid) + return test.destroy() + + def test_show(self, context, uuid): + return objects.Cpulse.get_by_uuid(context, uuid) + + def test_update(self, test): + return self._call('cpulse_update', test=test) + + +class ListenerAPI(rpc_service.API): + def __init__(self, context=None, topic=None, server=None, timeout=None): + super(ListenerAPI, self).__init__(context=context, topic=topic, + server=server, timeout=timeout) + + def ping_conductor(self): + return self._call('ping_conductor') diff --git a/cloudpulse/conductor/config.py b/cloudpulse/conductor/config.py new file mode 100644 index 0000000..4953dc1 --- /dev/null +++ b/cloudpulse/conductor/config.py @@ -0,0 +1,34 @@ +# Copyright 2014 - Rackspace Hosting +# +# 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. + +"""Config options for CloudPulse Backend service.""" + + +from oslo_config import cfg + +SERVICE_OPTS = [ + cfg.StrOpt('topic', + default='cloudpulse-conductor', + help='The queue to add conductor tasks to'), + cfg.IntOpt('conductor_life_check_timeout', + default=4, + help=('RPC timeout for the conductor liveness check that is ' + 'used for bay locking.')), +] + +opt_group = cfg.OptGroup( + name='conductor', + title='Options for the cloudpulse-conductor service') +cfg.CONF.register_group(opt_group) +cfg.CONF.register_opts(SERVICE_OPTS, opt_group)