Commit 69563dbe authored by Antoine Millet's avatar Antoine Millet
Browse files

Implemented riskgroup storage and management

parent cf0360a9
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -702,6 +702,38 @@ class CliHandler(RegisteredCCHandler):
        self.client.check('rights')
        self.server.rights.load(ruleset)

    #
    # Riskgroups management:
    #

    @listed
    def getriskgroups(self):
        """ Get existing groups.
        """
        self.client.check('riskgroups')
        return self.server.riskgroups.groups

    @listed
    def getriskgroup(self, name):
        """ Get specified group.
        """
        self.client.check('riskgroups')
        return self.server.riskgroups.get(name)

    @listed
    def setriskgroup(self, name, properties):
        """ Set a new or an existing group.
        """
        self.client.check('riskgroups')
        return self.server.riskgroups.set(name, properties)

    @listed
    def delriskgroup(self, name):
        """ Delete an existing group.
        """
        self.client.check('riskgroups')
        return self.server.riskgroups.delete(name)

    #
    # Nodes actions:
    #
+75 −0
Original line number Diff line number Diff line
# This file is part of CloudControl.
#
# CloudControl 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 3 of the License, or
# (at your option) any later version.
#
# CloudControl 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 CloudControl.  If not, see <http://www.gnu.org/licenses/>.


""" Riskgroup manager.
"""

import json


class RiskgroupsManager(object):

    """ Handle persistent storage of riskgroups.
    """

    def __init__(self, logger, riskgroup_filename):
        self.logger = logger
        self._riskgroup_filename = riskgroup_filename
        self._groups = {}
        self.load()

    def load(self):
        """ Load groups.
        """
        try:
            with open(self._riskgroup_filename) as fgroups:
                self._groups = json.load(fgroups)
        except IOError as err:
            if err.errno == 2:  # No such file, loading empty group
                self._groups = {}
            else:
                raise  # Reraise any other error
        self.logger.info('Loaded %d riskgroups', len(self._groups))

    def save(self):
        """ Save the current riskgroups to disk.
        """
        with open(self._riskgroup_filename, 'w') as fgroups:
            json.dump(self._groups, fgroups)

    @property
    def groups(self):
        return self._groups

    def get(self, name, default=None):
        """ Get the specified group or default.
        """

        return self._groups.get(name, default)

    def set(self, name, properties):
        """ Set a new or already existing group.
        """

        self._groups[name] = properties
        self.save()

    def delete(self, name):
        """ Delete the specified group.
        """

        del self._groups[name]
        self.save()
+6 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ from cloudcontrol.server.exceptions import (AlreadyRegistered,
#from cloudcontrol.server.jobs import JobsManager
from cloudcontrol.server.clients import Client
from cloudcontrol.server.rights import RightManager
from cloudcontrol.server.riskgroups import RiskgroupsManager
from cloudcontrol.server.jobs import KillOldCliJob
from cloudcontrol.server.repository import Repository

@@ -117,6 +118,11 @@ class CCServer(object):
        # The rights manager:
        self.rights = RightManager(self.logger.getChild('rights'),
                                   os.path.join(conf_dir, 'ruleset'))

        # The riskgroup manager:
        self.riskgroups = RiskgroupsManager(self.logger.getChild('riskgroups'),
                                            os.path.join(conf_dir, 'riskgroups'))

        self.logger.info('Server started to running')

        # Script repository: