[Kimchi-devel] [PATCH] [Kimchi] Remove federation feature from Kimchi as it is now on Wok

Daniel Henrique Barboza dhbarboza82 at gmail.com
Wed May 3 12:38:01 UTC 2017


Reviewed-by: Daniel Barboza <danielhb at linux.vnet.ibm.com>

On 05/02/2017 01:59 PM, Aline Manera wrote:
> Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> ---
>   control/peers.py          |  28 ----------
>   docs/API.md               |  10 ----
>   docs/README-federation.md |  60 --------------------
>   kimchi.conf               |   4 --
>   model/config.py           |   8 +--
>   model/peers.py            |  74 ------------------------
>   root.py                   |   8 ---
>   tests/test_config.py.in   |   3 +-
>   tests/test_rest.py        |   6 +-
>   ui/js/kimchi.peers.js     | 140 ----------------------------------------------
>   ui/js/src/kimchi.main.js  |   3 -
>   ui/pages/i18n.json.tmpl   |   7 +--
>   12 files changed, 7 insertions(+), 344 deletions(-)
>   delete mode 100644 control/peers.py
>   delete mode 100644 docs/README-federation.md
>   delete mode 100644 model/peers.py
>   delete mode 100644 ui/js/kimchi.peers.js
>
> diff --git a/control/peers.py b/control/peers.py
> deleted file mode 100644
> index 5eaacdd..0000000
> --- a/control/peers.py
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -#
> -# Project Kimchi
> -#
> -# Copyright IBM Corp, 2015-2017
> -#
> -# 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 SimpleCollection
> -from wok.control.utils import UrlSubNode
> -
> -
> - at UrlSubNode("peers", True)
> -class Peers(SimpleCollection):
> -    def __init__(self, model):
> -        super(Peers, self).__init__(model)
> -        self.admin_methods = ['GET']
> diff --git a/docs/API.md b/docs/API.md
> index 3ecc7a0..1f67879 100644
> --- a/docs/API.md
> +++ b/docs/API.md
> @@ -820,7 +820,6 @@ Contains information about Kimchi configuration.
>   **Methods:**
>   
>   * **GET**: Retrieve configuration information
> -    * federation: True if federation feature is enabled, False otherwise.
>       * version: The version of the kimchi service
>   * **POST**: *See Configuration Actions*
>   
> @@ -1052,15 +1051,6 @@ List of available groups.
>       * free: Amount of free space in the volume group.
>       * size: Total size of the volume group.
>   
> -### Collection: Peers
> -
> -**URI:** /plugins/kimchi/peers
> -
> -**Methods:**
> -
> -* **GET**: Return the list of Kimchi peers in the same network
> -           (It uses openSLP for discovering)
> -
>   ### Simple Collection: OVSBridges
>   
>   **URI:** /plugins/kimchi/ovsbridges
> diff --git a/docs/README-federation.md b/docs/README-federation.md
> deleted file mode 100644
> index 3554757..0000000
> --- a/docs/README-federation.md
> +++ /dev/null
> @@ -1,60 +0,0 @@
> -Kimchi Project - Federation Feature
> -===================================
> -
> -Federation feature is a Kimchi mechanism to discover Wok peers in the same
> -network. It uses openSLP tool (http://www.openslp.org/) to register and find Wok
> -servers.
> -
> -By default this feature is disabled on Wok as it is not critical for KVM
> -virtualization and requires additional software installation.
> -
> -To enable it, do the following:
> -
> -1. Install openslp and openslp-server rpm packages,
> -   or install slpd and slptool deb packages.
> -
> -2. openSLP uses port 427 (UDP) and port 427 (TCP) so make sure to open those
> -   ports in your firewall configuration
> -
> -   For system using firewalld, do:
> -   sudo firewall-cmd --permanent --add-port=427/udp
> -   sudo firewall-cmd --permanent --add-port=427/tcp
> -   sudo firewall-cmd --reload
> -
> -   For openSUSE systems, do:
> -   sudo /sbin/SuSEfirewall2 open EXT TCP 427
> -   sudo /sbin/SuSEfirewall2 open EXT UDP 427
> -
> -   For system using iptables, do:
> -   sudo iptables -A INPUT -p tcp --dport 427 -j ACCEPT
> -   sudo iptables -A INPUT -p udp --dport 427 -j ACCEPT
> -
> -3. In addition to the openSLP ports, you also need to allow multicast in the
> -   firewall configuration
> -
> -   For system using firewalld, do:
> -   sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s <subnet> -j ACCEPT
> -
> -   For openSUSE systems, do:
> -   Add the subnet to the trusted networks listed on FW_TRUSTED_NETS in
> -   /etc/sysconfig/SuSEfirewall2 file.
> -   Make sure to restart /sbin/SuSEfirewall2 after modifying /etc/sysconfig/SuSEfirewall2
> -
> -   For system using iptables, do:
> -   sudo iptables -A INPUT -s <subnet> -j ACCEPT
> -
> -4. Start slpd service and make sure it is up while running Wok
> -   sudo service slpd start
> -
> -5. Enable federation on Wok by editing the /etc/wok/plugins.d/kimchi.conf file:
> -
> -   federation = True
> -
> -6. Then start Wok service
> -   sudo service wokd start
> -
> -The Wok server will be registered on openSLP on server starting up and will
> -be found by other Wok peers (with federation feature enabled) in the same
> -network.
> -
> -Enjoy!
> diff --git a/kimchi.conf b/kimchi.conf
> index 97a14bd..5e85e2b 100644
> --- a/kimchi.conf
> +++ b/kimchi.conf
> @@ -3,9 +3,5 @@
>   enable = True
>   
>   [kimchi]
> -# Federation feature: register Wok server on openSLP and discover peers
> -# in the same network. Check README-federation for more details.
> -federation = False
> -
>   # Automatically create ISO pool on server start up
>   create_iso_pool = True
> diff --git a/model/config.py b/model/config.py
> index 78cdaeb..1db9afb 100644
> --- a/model/config.py
> +++ b/model/config.py
> @@ -1,7 +1,7 @@
>   #
>   # Project Kimchi
>   #
> -# Copyright IBM Corp, 2015-2016
> +# Copyright IBM Corp, 2015-2017
>   #
>   # This library is free software; you can redistribute it and/or
>   # modify it under the terms of the GNU Lesser General Public
> @@ -24,7 +24,7 @@ from wok.basemodel import Singleton
>   from wok.exception import NotFoundError
>   from wok.utils import run_command, wok_log
>   
> -from wok.plugins.kimchi.config import config, find_qemu_binary
> +from wok.plugins.kimchi.config import find_qemu_binary
>   from wok.plugins.kimchi.config import get_kimchi_version
>   from wok.plugins.kimchi.distroloader import DistroLoader
>   from wok.plugins.kimchi.model.featuretests import FeatureTests
> @@ -39,9 +39,7 @@ class ConfigModel(object):
>           pass
>   
>       def lookup(self, name):
> -        kconfig = config.get('kimchi', {})
> -        return {'federation': kconfig.get('federation', False),
> -                'version': get_kimchi_version()}
> +        return {'version': get_kimchi_version()}
>   
>   
>   class CapabilitiesModel(object):
> diff --git a/model/peers.py b/model/peers.py
> deleted file mode 100644
> index 0a4ee4b..0000000
> --- a/model/peers.py
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -#
> -# Project Kimchi
> -#
> -# Copyright IBM Corp, 2015-2017
> -#
> -# 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 cherrypy
> -import re
> -import socket
> -
> -from wok.config import config as wok_config
> -from wok.utils import run_command, wok_log
> -
> -from wok.plugins.kimchi.config import config
> -
> -
> -class PeersModel(object):
> -    def __init__(self, **kargs):
> -        # check federation feature is enabled on Kimchi server
> -        if not config.get('kimchi', {}).get('federation', False):
> -            return
> -
> -        # register server on openslp
> -        hostname = socket.getfqdn()
> -        port = wok_config.get("server", "proxy_port")
> -        self.url = hostname + ":" + port
> -
> -        cmd = ["slptool", "register",
> -               "service:wokd://%s" % self.url]
> -        out, error, ret = run_command(cmd)
> -        if out and len(out) != 0:
> -            wok_log.error("Unable to register server on openSLP."
> -                          " Details: %s" % out)
> -        cherrypy.engine.subscribe('exit', self._peer_deregister)
> -
> -    def _peer_deregister(self):
> -        cmd = ["slptool", "deregister",
> -               "service:wokd://%s" % self.url]
> -        out, error, ret = run_command(cmd)
> -        if out and len(out) != 0:
> -            wok_log.error("Unable to deregister server on openSLP."
> -                          " Details: %s" % out)
> -
> -    def get_list(self):
> -        # check federation feature is enabled on Kimchi server
> -        if not config.get('kimchi', {}).get('federation', False):
> -            return []
> -
> -        cmd = ["slptool", "findsrvs", "service:wokd"]
> -        out, error, ret = run_command(cmd)
> -        if ret != 0:
> -            return []
> -
> -        peers = []
> -        for server in out.strip().split("\n"):
> -            match = re.match("service:wokd://(.*?),.*", server)
> -            peer = match.group(1)
> -            if peer != self.url:
> -                peers.append("https://" + peer)
> -
> -        return peers
> diff --git a/root.py b/root.py
> index 4f131e7..d42e787 100644
> --- a/root.py
> +++ b/root.py
> @@ -72,14 +72,6 @@ class Kimchi(WokRoot):
>           self.domain = 'kimchi'
>           self.messages = messages
>   
> -        self.extends = {
> -            "/plugins/gingerbase": {
> -                "host-dashboard.html": "/plugins/kimchi/js/kimchi.peers.js"
> -            }
> -        }
> -
> -        self.depends = ['gingerbase']
> -
>           # Some paths or URI's present in the objectstore have changed after
>           # Kimchi 2.0.0 release. Check here if an upgrade in the schema and data
>           # are necessary.
> diff --git a/tests/test_config.py.in b/tests/test_config.py.in
> index 135097b..dd47130 100644
> --- a/tests/test_config.py.in
> +++ b/tests/test_config.py.in
> @@ -80,8 +80,7 @@ class ConfigTests(unittest.TestCase):
>                   'enable': True
>               },
>               'kimchi': {
> -                'federation': False,
> -                'create_iso_pool': True,
> +                'create_iso_pool': True
>               },
>               '/': {
>                   'tools.trailing_slash.on': False,
> diff --git a/tests/test_rest.py b/tests/test_rest.py
> index 852e4bd..f808478 100644
> --- a/tests/test_rest.py
> +++ b/tests/test_rest.py
> @@ -1529,7 +1529,7 @@ class RestTests(unittest.TestCase):
>       def test_config(self):
>           resp = self.request('/plugins/kimchi/config').read()
>           conf = json.loads(resp)
> -        keys = ["federation", "version"]
> +        keys = ["version"]
>           self.assertEquals(keys, sorted(conf.keys()))
>   
>       def test_capabilities(self):
> @@ -1541,10 +1541,6 @@ class RestTests(unittest.TestCase):
>                   u'mem_hotplug_support', u'libvirtd_running']
>           self.assertEquals(sorted(keys), sorted(conf.keys()))
>   
> -    def test_peers(self):
> -        resp = self.request('/plugins/kimchi/peers').read()
> -        self.assertEquals([], json.loads(resp))
> -
>       def test_distros(self):
>           resp = self.request('/plugins/kimchi/config/distros').read()
>           distros = json.loads(resp)
> diff --git a/ui/js/kimchi.peers.js b/ui/js/kimchi.peers.js
> deleted file mode 100644
> index 8b1a18d..0000000
> --- a/ui/js/kimchi.peers.js
> +++ /dev/null
> @@ -1,140 +0,0 @@
> -/*
> - * Project Kimchi
> - *
> - * Copyright IBM Corp, 2016
> - *
> - * 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.
> - */
> -
> -var kimchi = {
> -
> -    getPeers: function(suc, err) {
> -        wok.requestJSON({
> -            url: 'plugins/kimchi/peers',
> -            type: 'GET',
> -            contentType: 'application/json',
> -            dataType: 'json',
> -            resend: true,
> -            success: suc,
> -            error: err ? err : function(data) {
> -                wok.message.error(data.responseJSON.reason);
> -            }
> -        });
> -    },
> -
> -    initPeers: function() {
> -
> -        var peersAccordion = "<div class='panel-group federation-enabled accordion' id='peers-content-area-accordion' role='tablist' aria-multiselectable='true'>" +
> -            "<h3>" +
> -            "<a role='button' aria-expanded='true' data-toggle='collapse' data-parent='#peers-content-area-accordion' href='#peers-content-area' aria-expanded='false' aria-controls='peers-content-area' class=''>" +
> -            "<span class='accordion-icon'></span>" +
> -            "<span class='accordion-text' id='#peers-title'>"+i18n['KCHPEERS0001M']+"</span>" +
> -            "</a>" +
> -            "</h3>" +
> -            "<div id='peers-content-area' class='panel-collapse collapse in' role='tabpanel' aria-labelledby='peers-title'>" +
> -            "<div id='peers-alert-container'></div>" +
> -            "<div class='row'>" +
> -            "<div class='col-sm-12'>" +
> -            "<table id='peers-list' class='table table-striped' cellspacing='0' width='100%''>" +
> -            "<thead>" +
> -            "<tr>" +
> -            "<th><span class='sr-only'>" + i18n['KCHPEERS0001M'] + "</span></th>" +
> -            "</tr>" +
> -            "</thead>" +
> -            "</table>" +
> -            "</div>" +
> -            "</div>" +
> -            "<div class='wok-mask' role='presentation'>" +
> -            "<div class='wok-mask-loader-container'>" +
> -            "<div class='wok-mask-loading'>" +
> -            "<div class='wok-mask-loading-icon'></div>" +
> -            "<div class='wok-mask-loading-text'>" + i18n['WOKGRD6001M'] + "</div>" +
> -            "</div>" +
> -            "</div>" +
> -            "</div>" +
> -            "</div>" +
> -            "</div>";
> -
> -        var peersDatatableTable;
> -        var peers = new Array();
> -
> -        $('#peers-container > .container').append(peersAccordion);
> -
> -        var peersDatatable = function(nwConfigDataSet) {
> -            peersDatatableTable = $('#peers-list').DataTable({
> -                "processing": true,
> -                "data": peers,
> -                "language": {
> -                    "emptyTable": i18n['WOKSETT0010M']
> -                },
> -                "order": [],
> -                "paging": false,
> -                "dom": '<"row"<"col-sm-12"t>>',
> -                "scrollY": "269px",
> -                "scrollCollapse": true,
> -                "columnDefs": [{
> -                    "targets": 0,
> -                    "searchable": false,
> -                    "orderable": false,
> -                    "width": "100%",
> -                    "className": "tabular-data",
> -                    "render": function(data, type, full, meta) {
> -                        return '<a href="' + data + '" target="_blank">' + data + '</a>';
> -                    }
> -                }],
> -                "initComplete": function(settings, json) {
> -                    $('#peers-content-area > .wok-mask').addClass('hidden');
> -                }
> -            });
> -        };
> -
> -        var getPeers = function() {
> -            kimchi.getPeers(function(result) {
> -                peers.length = 0;
> -                for (var i = 0; i < result.length; i++) {
> -                    var tempArr = [];
> -                    tempArr.push(result[i]);
> -                    peers.push(tempArr);
> -                }
> -                peersDatatable(peers);
> -            }, function(err) {
> -                wok.message.error(err.responseJSON.reason, '#peers-alert-container', true);
> -            });
> -        };
> -        getPeers();
> -
> -    },
> -
> -    getConfig: function(suc, err, done) {
> -        done = typeof done !== 'undefined' ? done : function() {};
> -        wok.requestJSON({
> -            url: "plugins/kimchi/config",
> -            type: "GET",
> -            contentType: "application/json",
> -            dataType: "json",
> -            success: suc,
> -            error: err,
> -            complete: done
> -        });
> -    }
> -}
> -
> -$(document).ready(function() {
> -    // Peers check
> -    kimchi.getConfig(function(config) {
> -        if (config.federation) {
> -            $("#host-content-container").after('<div id="peers-container"><div class="container"></div></div>');
> -            kimchi.initPeers();
> -        }
> -    });
> -});
> diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
> index 47531ae..89df799 100644
> --- a/ui/js/src/kimchi.main.js
> +++ b/ui/js/src/kimchi.main.js
> @@ -19,9 +19,6 @@
>   kimchi.config = undefined;
>   kimchi.getConfig(function(result) {
>       kimchi.config = result;
> -
> -    if(kimchi.config.federation == true)
> -        $('#peers').removeClass('hide-content');
>   }, function() {
>       kimchi.config = {}
>   });
> diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl
> index 4510921..d44d4bd 100644
> --- a/ui/pages/i18n.json.tmpl
> +++ b/ui/pages/i18n.json.tmpl
> @@ -1,7 +1,7 @@
>   #*
>    * Project Kimchi
>    *
> - * Copyright IBM Corp, 2014-2016
> + * Copyright IBM Corp, 2014-2017
>    *
>    * Licensed under the Apache License, Version 2.0 (the "License");
>    * you may not use this file except in compliance with the License.
> @@ -154,8 +154,5 @@
>       "KCHVMSTOR0007M": "$_("qed")",
>       "KCHVMSTOR0008M": "$_("raw")",
>       "KCHVMSTOR0009M": "$_("vmdk")",
> -    "KCHVMSTOR0010M": "$_("vpc")",
> -
> -
> -    "KCHPEERS0001M": "$_("Peers")"
> +    "KCHVMSTOR0010M": "$_("vpc")"
>   }



More information about the Kimchi-devel mailing list