view mod_reload_components/mod_reload_components.lua @ 4499:8e644bf36627

mod_rest: Change OOB namespace to the one used in messages Because of it's current popularity as companion to HTTP Upload this is probably more useful than the iq one.
author Kim Alvefur <zash@zash.se>
date Sun, 07 Mar 2021 01:26:20 +0100
parents 85d04dd87f14
children
line wrap: on
line source

module:set_global();

local configmanager = require "core.configmanager";
local hostmanager = require"core.hostmanager";

local function reload_components()

        --- Check if host configuration is a component
        --- @param h hostname
        local function config_is_component(h)
            return h ~= nil and configmanager.get(h, "component_module") ~= nil; -- If a host has a component module defined within it, then it is a component
        end;

        --- Check if host / component configuration is active
        --- @param h hostname / component name
        local function component_is_new(h)
                return h ~= "*" and not hosts[h]; -- If a host is not defined in hosts and it is not global, then it is new
        end

        --- Search for new components that are not activated
        for h, c in pairs(configmanager.getconfig()) do
            if config_is_component(h) and component_is_new(h) then
                module:log ("debug", "Loading new component %s", h );
                hostmanager.activate(h, c);
            end
        end

        --- Search for active components that are not enabled in the configmanager anymore
        local enabled = {}
        for h in pairs(configmanager.getconfig()) do
            enabled[h] = true; -- Set true if it is defined in the configuration file
        end
        for h, c in pairs(hosts) do
            if not enabled[h] then -- Deactivate if not present in the configuration file
                hostmanager.deactivate(h,c);
            end
        end
end

module:hook("config-reloaded", reload_components);