[Kimchi-devel] [PATCH 09/17] V7 Ginger Base : control files

chandra at linux.vnet.ibm.com chandra at linux.vnet.ibm.com
Wed Oct 21 11:10:54 UTC 2015


From: chandrureddy <chandra at linux.vnet.ibm.com>

---
 src/wok/plugins/gingerbase/control/Makefile.am     |  25 ++++
 src/wok/plugins/gingerbase/control/__init__.py     |  26 ++++
 src/wok/plugins/gingerbase/control/config.py       |  43 ++++++
 src/wok/plugins/gingerbase/control/cpuinfo.py      |  39 +++++
 src/wok/plugins/gingerbase/control/debugreports.py |  63 ++++++++
 src/wok/plugins/gingerbase/control/host.py         | 160 +++++++++++++++++++++
 src/wok/plugins/kimchi/control/debugreports.py     |  61 --------
 7 files changed, 356 insertions(+), 61 deletions(-)
 create mode 100644 src/wok/plugins/gingerbase/control/Makefile.am
 create mode 100644 src/wok/plugins/gingerbase/control/__init__.py
 create mode 100644 src/wok/plugins/gingerbase/control/config.py
 create mode 100644 src/wok/plugins/gingerbase/control/cpuinfo.py
 create mode 100644 src/wok/plugins/gingerbase/control/debugreports.py
 create mode 100644 src/wok/plugins/gingerbase/control/host.py
 delete mode 100644 src/wok/plugins/kimchi/control/debugreports.py

diff --git a/src/wok/plugins/gingerbase/control/Makefile.am b/src/wok/plugins/gingerbase/control/Makefile.am
new file mode 100644
index 0000000..49da0ae
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+control_PYTHON = *.py
+
+controldir = $(pythondir)/wok/plugins/gingerbase/control
+
+install-data-local:
+	$(MKDIR_P) $(DESTDIR)$(controldir)
diff --git a/src/wok/plugins/gingerbase/control/__init__.py b/src/wok/plugins/gingerbase/control/__init__.py
new file mode 100644
index 0000000..b4d8dfd
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/__init__.py
@@ -0,0 +1,26 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+import os
+
+
+from wok.control.utils import load_url_sub_node
+
+
+sub_nodes = load_url_sub_node(os.path.dirname(__file__), __name__)
diff --git a/src/wok/plugins/gingerbase/control/config.py b/src/wok/plugins/gingerbase/control/config.py
new file mode 100644
index 0000000..8572e6d
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/config.py
@@ -0,0 +1,43 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# Code derived from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+from wok.control.base import Resource
+from wok.control.utils import UrlSubNode
+
+
+ at UrlSubNode("config")
+class Config(Resource):
+    def __init__(self, model, id=None):
+        super(Config, self).__init__(model, id)
+        self.capabilities = Capabilities(self.model)
+
+    @property
+    def data(self):
+        return self.info
+
+
+class Capabilities(Resource):
+    def __init__(self, model, id=None):
+        super(Capabilities, self).__init__(model, id)
+
+    @property
+    def data(self):
+        return self.info
diff --git a/src/wok/plugins/gingerbase/control/cpuinfo.py b/src/wok/plugins/gingerbase/control/cpuinfo.py
new file mode 100644
index 0000000..2ce0cc0
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/cpuinfo.py
@@ -0,0 +1,39 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# Code derived from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+
+from wok.control.base import Resource
+
+
+class CPUInfo(Resource):
+    def __init__(self, model):
+        super(CPUInfo, self).__init__(model)
+        self.admin_methods = ['GET']
+        self.role_key = 'host'
+        self.uri_fmt = "/host/cpuinfo"
+
+    @property
+    def data(self):
+        return {'threading_enabled': self.info['guest_threads_enabled'],
+                'sockets': self.info['sockets'],
+                'cores': self.info['cores_available'],
+                'threads_per_core': self.info['threads_per_core']
+                }
diff --git a/src/wok/plugins/gingerbase/control/debugreports.py b/src/wok/plugins/gingerbase/control/debugreports.py
new file mode 100644
index 0000000..0ad8ee5
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/debugreports.py
@@ -0,0 +1,63 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code derived from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+from wok.control.base import AsyncCollection, Resource
+from wok.control.utils import internal_redirect
+from wok.control.utils import UrlSubNode
+
+
+ at UrlSubNode('debugreports', True)
+class DebugReports(AsyncCollection):
+    def __init__(self, model):
+        super(DebugReports, self).__init__(model)
+        self.resource = DebugReport
+        self.role_key = 'host'
+        self.admin_methods = ['GET', 'POST']
+
+    def _get_resources(self, filter_params):
+        res_list = super(DebugReports, self)._get_resources(filter_params)
+        return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
+
+
+class DebugReport(Resource):
+    def __init__(self, model, ident):
+        super(DebugReport, self).__init__(model, ident)
+        self.role_key = 'host'
+        self.admin_methods = ['GET', 'PUT', 'POST']
+        self.uri_fmt = '/debugreports/%s'
+        self.content = DebugReportContent(model, ident)
+
+    @property
+    def data(self):
+        return {'name': self.ident,
+                'uri': self.info['uri'],
+                'time': self.info['ctime']}
+
+
+class DebugReportContent(Resource):
+    def __init__(self, model, ident):
+        super(DebugReportContent, self).__init__(model, ident)
+        self.role_key = 'host'
+        self.admin_methods = ['GET']
+
+    def get(self):
+        self.lookup()
+        raise internal_redirect(self.info['uri'])
diff --git a/src/wok/plugins/gingerbase/control/host.py b/src/wok/plugins/gingerbase/control/host.py
new file mode 100644
index 0000000..0dae80c
--- /dev/null
+++ b/src/wok/plugins/gingerbase/control/host.py
@@ -0,0 +1,160 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code derived from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+from wok.control.base import AsyncResource, Collection
+from wok.control.base import Resource
+from wok.control.utils import UrlSubNode
+from wok.exception import NotFoundError
+
+from wok.plugins.gingerbase.control.cpuinfo import CPUInfo
+
+
+ at UrlSubNode('host', True)
+class Host(Resource):
+    def __init__(self, model, id=None):
+        super(Host, self).__init__(model, id)
+        self.role_key = 'host'
+        self.admin_methods = ['GET', 'POST']
+        self.uri_fmt = '/host/%s'
+        self.reboot = self.generate_action_handler('reboot')
+        self.shutdown = self.generate_action_handler('shutdown')
+        self.stats = HostStats(self.model)
+        self.partitions = Partitions(self.model)
+        # self.devices = Devices(self.model)
+        self.packagesupdate = PackagesUpdate(self.model)
+        self.repositories = Repositories(self.model)
+        self.swupdate = self.generate_action_handler_task('swupdate')
+        self.swupdateprogress = SoftwareUpdateProgress(self.model)
+        self.cpuinfo = CPUInfo(self.model)
+        self.capabilities = Capabilities(self.model)
+
+    @property
+    def data(self):
+        return self.info
+
+
+class SoftwareUpdateProgress(AsyncResource):
+    def __init__(self, model, id=None):
+        super(SoftwareUpdateProgress, self).__init__(model, id)
+        self.role_key = 'host'
+        self.admin_methods = ['GET']
+
+    @property
+    def data(self):
+        return self.info
+
+
+class HostStats(Resource):
+    def __init__(self, model, id=None):
+        super(HostStats, self).__init__(model, id)
+        self.role_key = 'host'
+        self.admin_methods = ['GET']
+        self.history = HostStatsHistory(self.model)
+
+    @property
+    def data(self):
+        return self.info
+
+
+class HostStatsHistory(Resource):
+    @property
+    def data(self):
+        return self.info
+
+
+class Capabilities(Resource):
+    def __init__(self, model, id=None):
+        super(Capabilities, self).__init__(model, id)
+
+    @property
+    def data(self):
+        return self.info
+
+
+class Partitions(Collection):
+    def __init__(self, model):
+        super(Partitions, self).__init__(model)
+        self.role_key = 'storage'
+        self.admin_methods = ['GET']
+        self.resource = Partition
+
+    # Defining get_resources in order to return list of partitions in UI
+    # sorted by their path
+    def _get_resources(self, flag_filter):
+        res_list = super(Partitions, self)._get_resources(flag_filter)
+        res_list = filter(lambda x: x.info['available'], res_list)
+        res_list.sort(key=lambda x: x.info['path'])
+        return res_list
+
+
+class Partition(Resource):
+    def __init__(self, model, id):
+        self.role_key = 'storage'
+        self.admin_methods = ['GET']
+        super(Partition, self).__init__(model, id)
+
+    @property
+    def data(self):
+        if not self.info['available']:
+            raise NotFoundError("GGBPART0001E", {'name': self.info['name']})
+
+        return self.info
+
+
+class PackagesUpdate(Collection):
+    def __init__(self, model):
+        super(PackagesUpdate, self).__init__(model)
+        self.role_key = 'host'
+        self.admin_methods = ['GET']
+        self.resource = PackageUpdate
+
+
+class PackageUpdate(Resource):
+    def __init__(self, model, id=None):
+        super(PackageUpdate, self).__init__(model, id)
+        self.role_key = 'host'
+        self.admin_methods = ['GET']
+
+    @property
+    def data(self):
+        return self.info
+
+
+class Repositories(Collection):
+    def __init__(self, model):
+        super(Repositories, self).__init__(model)
+        self.role_key = 'host'
+        self.admin_methods = ['GET', 'POST']
+        self.resource = Repository
+
+
+class Repository(Resource):
+    def __init__(self, model, id):
+        super(Repository, self).__init__(model, id)
+        self.role_key = 'host'
+        self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
+        self.uri_fmt = "/host/repositories/%s"
+        self.enable = self.generate_action_handler('enable')
+        self.disable = self.generate_action_handler('disable')
+
+    @property
+    def data(self):
+        return self.info
diff --git a/src/wok/plugins/kimchi/control/debugreports.py b/src/wok/plugins/kimchi/control/debugreports.py
deleted file mode 100644
index b5a3072..0000000
--- a/src/wok/plugins/kimchi/control/debugreports.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-
-from wok.control.base import AsyncCollection, Resource
-from wok.control.utils import internal_redirect
-from wok.control.utils import UrlSubNode
-
-
- at UrlSubNode('debugreports', True)
-class DebugReports(AsyncCollection):
-    def __init__(self, model):
-        super(DebugReports, self).__init__(model)
-        self.resource = DebugReport
-        self.role_key = 'host'
-        self.admin_methods = ['GET', 'POST']
-
-    def _get_resources(self, filter_params):
-        res_list = super(DebugReports, self)._get_resources(filter_params)
-        return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
-
-
-class DebugReport(Resource):
-    def __init__(self, model, ident):
-        super(DebugReport, self).__init__(model, ident)
-        self.role_key = 'host'
-        self.admin_methods = ['GET', 'PUT', 'POST']
-        self.uri_fmt = '/debugreports/%s'
-        self.content = DebugReportContent(model, ident)
-
-    @property
-    def data(self):
-        return {'name': self.ident,
-                'uri': self.info['uri'],
-                'time': self.info['ctime']}
-
-
-class DebugReportContent(Resource):
-    def __init__(self, model, ident):
-        super(DebugReportContent, self).__init__(model, ident)
-        self.role_key = 'host'
-        self.admin_methods = ['GET']
-
-    def get(self):
-        self.lookup()
-        raise internal_redirect(self.info['uri'])
-- 
2.1.0




More information about the Kimchi-devel mailing list