Esempio n. 1
0
 def __init__(self, role_name, instance_name, pretty):
     """
     :param role_name: The name of the type of role
     :param instance_name: A unique name for this instance
     :param pretty: The pretty name of the role for the description
     """
     self._role_name = role_name
     self._instance_name = instance_name
     self._desc = "%s Role - %s" % (pretty, instance_name)
     self._requirements = []
     self._unitname = get_target_unit_name(role_name, instance_name)
Esempio n. 2
0
 def __init__(self, role_name, instance_name, pretty):
     """
     :param role_name: The name of the type of role
     :param instance_name: A unique name for this instance
     :param pretty: The pretty name of the role for the description
     """
     self._role_name = role_name
     self._instance_name = instance_name
     self._desc = "%s Role - %s" % (pretty, instance_name)
     self._requirements = []
     self._unitname = get_target_unit_name(role_name, instance_name)
Esempio n. 3
0
    def __init__(self, parent, name, type_name, directory, settings,
                 *args, **kwargs):
        """The DBUS_INTERFACE_ROLE_INSTANCE implementation.

        :param parent: The DBusRole Object this is attached to
        :param name: Instance name
        :param type_name: Role name
        :param directory: FIXME: unused???
        :param settings: RoleSettings for the role
        :param path: (Implicit in *args) FIXME: unused???
        """
        super(RoleBase, self).__init__(*args, **kwargs)
        self.busname = args[0]
        self.path = args[1]
        self._bus = slip.dbus.SystemBus()
        self._parent = parent
        self._name = name
        self._escaped_name = dbus_label_escape(name)
        self._type = type_name
        self._escaped_type = dbus_label_escape(type_name)
        self._log_prefix = "role.%s.%s" % (self._escaped_type,
                                           self._escaped_name)
        self._directory = directory
        self._settings = settings
        self._settings.connect("changed", self._emit_property_changed)
        # TODO: place target_unit in settings
        self.target_unit = get_target_unit_name(self.get_type(),
                                                self.get_name())

        # No loaded self._settings, set state to NASCENT
        if not "state" in self._settings:
            self._settings["state"] = NASCENT
        elif self._settings["state"] == SYSTEMD:
            # We need to get the current state from systemd
            try:
                self._settings["state"] = target_unit_state(self.target_unit)
            except:
                # If we couldn't get the target state, we need to assume that
                # it is ERROR
                self._settings["state"] = ERROR
                self.timeout_restart()
                return

            # Then we need to set up a signal monitor to update this state
            # if it changes in systemd
            self.monitor_unit()


        self.timeout_restart()
Esempio n. 4
0
    def __init__(self, parent, name, type_name, directory, settings, *args,
                 **kwargs):
        """The DBUS_INTERFACE_ROLE_INSTANCE implementation.

        :param parent: The DBusRole Object this is attached to
        :param name: Instance name
        :param type_name: Role name
        :param directory: FIXME: unused???
        :param settings: RoleSettings for the role
        :param path: (Implicit in *args) FIXME: unused???
        """
        super(RoleBase, self).__init__(*args, **kwargs)
        self.busname = args[0]
        self.path = args[1]
        self._bus = slip.dbus.SystemBus()
        self._parent = parent
        self._name = name
        self._escaped_name = dbus_label_escape(name)
        self._type = type_name
        self._escaped_type = dbus_label_escape(type_name)
        self._log_prefix = "role.%s.%s" % (self._escaped_type,
                                           self._escaped_name)
        self._directory = directory
        self._settings = settings
        self._settings.connect("changed", self._emit_property_changed)
        # TODO: place target_unit in settings
        self.target_unit = get_target_unit_name(self.get_type(),
                                                self.get_name())

        # No loaded self._settings, set state to NASCENT
        if not "state" in self._settings:
            self._settings["state"] = NASCENT
        elif self._settings["state"] == SYSTEMD:
            # We need to get the current state from systemd
            try:
                self._settings["state"] = target_unit_state(self.target_unit)
            except:
                # If we couldn't get the target state, we need to assume that
                # it is ERROR
                self._settings["state"] = ERROR
                self.timeout_restart()
                return

            # Then we need to set up a signal monitor to update this state
            # if it changes in systemd
            self.monitor_unit()

        self.timeout_restart()
Esempio n. 5
0
    def stop_services_async(self):
        """stop_services_async"""
        log.debug1("%s.stop_services_async()", self._log_prefix)

        with SystemdJobHandler() as job_handler:
            target_unit = get_target_unit_name(self.get_type(), self.get_name())

            log.debug9("Stopping %s" % target_unit)
            job_path = job_handler.manager.StopUnit(target_unit, "replace")
            job_handler.register_job(job_path)

            job_results = yield job_handler.all_jobs_done_future()

        if any([x for x in job_results.values() if x not in ("skipped", "done")]):
            details = ", ".join(["%s: %s" % item for item in job_results.items()])
            raise RolekitError(COMMAND_FAILED, "Stopping services failed: %s" % details)

        log.debug9("Disabling %s" % target_unit)
        disable_units([target_unit])
Esempio n. 6
0
    def stop_services_async(self):
        """stop_services_async"""
        log.debug1("%s.stop_services_async()", self._log_prefix)

        with SystemdJobHandler() as job_handler:
            target_unit = get_target_unit_name(self.get_type(),
                                               self.get_name())

            log.debug9("Disabling %s" % target_unit)
            disable_units([target_unit])

            log.debug9("Stopping %s" % target_unit)
            job_path = job_handler.manager.StopUnit(target_unit, "replace")
            job_handler.register_job(job_path)

            job_results = yield job_handler.all_jobs_done_future()

        if any(
            [x for x in job_results.values() if x not in ("skipped", "done")]):
            details = ", ".join(
                ["%s: %s" % item for item in job_results.items()])
            raise RolekitError(COMMAND_FAILED,
                               "Stopping services failed: %s" % details)