summaryrefslogtreecommitdiffstats
path: root/openstack
diff options
context:
space:
mode:
authorAngus Salkeld <asalkeld@redhat.com>2012-08-11 11:14:43 +1000
committerAngus Salkeld <asalkeld@redhat.com>2012-08-15 08:26:16 +1000
commitc8f9afd4c0de0883e7b64c4d219a47aa88a0d32a (patch)
tree77b60fa6ec87a7370a5030e01e51392893728b50 /openstack
parent0d446cd6cdaf968b830f51fba2e547da2d98a65b (diff)
downloadoslo-c8f9afd4c0de0883e7b64c4d219a47aa88a0d32a.tar.gz
oslo-c8f9afd4c0de0883e7b64c4d219a47aa88a0d32a.tar.xz
oslo-c8f9afd4c0de0883e7b64c4d219a47aa88a0d32a.zip
Move manager.py and service.py into common.
- Just start with the skeleton classes. Part of blueprint service-infrastructure Change-Id: I90fbff3805455d9d82aacf43257d74e4cb443042 Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
Diffstat (limited to 'openstack')
-rw-r--r--openstack/common/manager.py66
-rw-r--r--openstack/common/service.py30
2 files changed, 96 insertions, 0 deletions
diff --git a/openstack/common/manager.py b/openstack/common/manager.py
new file mode 100644
index 0000000..efb783d
--- /dev/null
+++ b/openstack/common/manager.py
@@ -0,0 +1,66 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# 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.
+
+"""Base Manager class.
+
+Managers are responsible for a certain aspect of the system. It is a logical
+grouping of code relating to a portion of the system. In general other
+components should be using the manager to make changes to the components that
+it is responsible for.
+
+For example, other components that need to deal with volumes in some way,
+should do so by calling methods on the VolumeManager instead of directly
+changing fields in the database. This allows us to keep all of the code
+relating to volumes in the same place.
+
+We have adopted a basic strategy of Smart managers and dumb data, which means
+rather than attaching methods to data objects, components should call manager
+methods that act on the data.
+
+Methods on managers that can be executed locally should be called directly.
+
+Managers should be responsible for most of the db access, and
+non-implementation specific data. Anything implementation specific that can't
+be generalized should be done by the Driver.
+
+In general, we prefer to have one manager with multiple drivers for different
+implementations, but sometimes it makes sense to have multiple managers. You
+can think of it this way: Abstract different overall strategies at the manager
+level(FlatNetwork vs VlanNetwork), and different implementations at the driver
+level(LinuxNetDriver vs CiscoNetDriver).
+
+Managers will often provide methods for initial setup of a host or periodic
+tasks to a wrapping service.
+
+This module provides Manager, a base class for managers.
+
+"""
+
+
+class Manager(object):
+
+ def __init__(self, host):
+ self.host = host
+
+ def init_host(self):
+ """Handle initialization if this is a standalone service.
+
+ Child classes should override this method.
+
+ """
+ pass
diff --git a/openstack/common/service.py b/openstack/common/service.py
new file mode 100644
index 0000000..a0a8e5a
--- /dev/null
+++ b/openstack/common/service.py
@@ -0,0 +1,30 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Justin Santa Barbara
+# 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.
+
+"""Generic Node base class for all workers that run on hosts."""
+
+
+class Service(object):
+ """Service object for binaries running on hosts.
+
+ A service takes a manager."""
+
+ def __init__(self, host, manager, *args, **kwargs):
+ self.host = host
+ self.manager = manager