Exemple #1
0
def save_notification_rules(rules):
    # type: (List[Dict]) -> None
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(wato_root_dir() + "notifications.mk",
                          "notification_rules",
                          rules,
                          pprint_value=config.wato_pprint_config)
Exemple #2
0
def save_timeperiods(timeperiods):
    # type: (TimeperiodSpecs) -> None
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(wato_root_dir() + "timeperiods.mk",
                          "timeperiods",
                          _filter_builtin_timeperiods(timeperiods),
                          pprint_value=config.wato_pprint_config)
Exemple #3
0
 def save_layouts(cls) -> None:
     store.save_to_mk_file(
         str(BILayoutManagement._config_file),
         "bi_layouts",
         active_config.bi_layouts,
         pprint_value=True,
     )
Exemple #4
0
 def _save(self):
     store.save_to_mk_file(
         watolib.multisite_dir() + "read_only.mk",
         "wato_read_only",
         self._settings,
         pprint_value=config.wato_pprint_config,
     )
Exemple #5
0
def save_notification_rules(rules):
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(
        wato_root_dir() + "notifications.mk",
        "notification_rules",
        rules,
        pprint_value=config.wato_pprint_config)
Exemple #6
0
def save_timeperiods(timeperiods: TimeperiodSpecs) -> None:
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(wato_root_dir() + "timeperiods.mk",
                          "timeperiods",
                          _filter_builtin_timeperiods(timeperiods),
                          pprint_value=config.wato_pprint_config)
    g.timeperiod_information = timeperiods
Exemple #7
0
def save_notification_rules(rules: list[EventRule]) -> None:
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(
        wato_root_dir() + "notifications.mk",
        "notification_rules",
        rules,
        pprint_value=active_config.wato_pprint_config,
    )
Exemple #8
0
def save_timeperiods(timeperiods: TimeperiodSpecs) -> None:
    store.mkdir(wato_root_dir())
    store.save_to_mk_file(
        wato_root_dir() + "timeperiods.mk",
        "timeperiods",
        _filter_builtin_timeperiods(timeperiods),
        pprint_value=active_config.wato_pprint_config,
    )
    load_timeperiods.cache_clear()
Exemple #9
0
def write_contacts_and_users_file(profiles: Users,
                                  custom_default_config_dir: str = None
                                  ) -> None:
    non_contact_keys = _non_contact_keys()
    multisite_keys = _multisite_keys()
    updated_profiles = _add_custom_macro_attributes(profiles)

    if custom_default_config_dir:
        check_mk_config_dir = "%s/conf.d/wato" % custom_default_config_dir
        multisite_config_dir = "%s/multisite.d/wato" % custom_default_config_dir
    else:
        check_mk_config_dir = "%s/conf.d/wato" % cmk.utils.paths.default_config_dir
        multisite_config_dir = "%s/multisite.d/wato" % cmk.utils.paths.default_config_dir

    non_contact_attributes_cache: Dict[Optional[str], List[str]] = {}
    multisite_attributes_cache: Dict[Optional[str], List[str]] = {}
    for user_settings in updated_profiles.values():
        connector = cast(Optional[str], user_settings.get("connector"))
        if connector not in non_contact_attributes_cache:
            non_contact_attributes_cache[connector] = non_contact_attributes(
                connector)
        if connector not in multisite_attributes_cache:
            multisite_attributes_cache[connector] = multisite_attributes(
                connector)

    # Remove multisite keys in contacts.
    # TODO: Clean this up. Just improved the performance, but still have no idea what its actually doing...
    contacts = dict(
        e for e in [(id,
                     split_dict(
                         user,
                         non_contact_keys +
                         non_contact_attributes_cache[user.get('connector')],
                         False,
                     )) for (id, user) in updated_profiles.items()])

    # Only allow explicitely defined attributes to be written to multisite config
    users = {}
    for uid, profile in updated_profiles.items():
        users[uid] = {
            p: val
            for p, val in profile.items() if p in multisite_keys +
            multisite_attributes_cache[profile.get('connector')]
        }

    # Check_MK's monitoring contacts
    store.save_to_mk_file("%s/%s" % (check_mk_config_dir, "contacts.mk"),
                          "contacts",
                          contacts,
                          pprint_value=config.wato_pprint_config)

    # GUI specific user configuration
    store.save_to_mk_file("%s/%s" % (multisite_config_dir, "users.mk"),
                          "multisite_users",
                          users,
                          pprint_value=config.wato_pprint_config)
Exemple #10
0
def save_connection_config(connections, base_dir=None):
    # type: (List[UserConnectionSpec], str) -> None
    if not base_dir:
        base_dir = _multisite_dir()
    store.mkdir(base_dir)
    store.save_to_mk_file(os.path.join(base_dir, "user_connections.mk"),
                          "user_connections", connections)

    for connector_class in user_connector_registry.values():
        connector_class.config_changed()
Exemple #11
0
def test_save_to_mk_file(tmp_path, path_type):
    path = path_type(tmp_path.joinpath("huhu"))
    store.save_to_mk_file(path, "x", {"a": 1})
    assert store.load_mk_file(path, default={"x": {
        "a": 2,
        "y": 1
    }}) == {
        "x": {
            "a": 1,
            "y": 1
        }
    }
Exemple #12
0
def save_connection_config(connections: List[UserConnectionSpec],
                           base_dir: Optional[str] = None) -> None:
    if not base_dir:
        base_dir = _multisite_dir()
    store.mkdir(base_dir)
    store.save_to_mk_file(os.path.join(base_dir, "user_connections.mk"),
                          "user_connections", connections)

    for connector_class in user_connector_registry.values():
        connector_class.config_changed()

    clear_user_connection_cache()
Exemple #13
0
    def _save_roles(self):
        # Reflect the data in the roles dict kept in the config module Needed
        # for instant changes in current page while saving modified roles.
        # Otherwise the hooks would work with old data when using helper
        # functions from the config module
        config.roles.update(self._roles)

        store.mkdir(watolib.multisite_dir())
        store.save_to_mk_file(watolib.multisite_dir() + "roles.mk",
                              "roles",
                              self._roles,
                              pprint_value=config.wato_pprint_config)

        hooks.call("roles-saved", self._roles)
Exemple #14
0
def _update_check_mk(target_dir, tar_file):
    """extract check_mk/conf.d/wato folder, but keep information in contacts.mk
    (need to retain user notification rules)"""
    site_vars: Dict[str, Any] = {"contacts": {}}
    with Path(target_dir).joinpath("contacts.mk").open(encoding="utf-8") as f:
        exec(f.read(), {}, site_vars)

    _wipe_directory(target_dir)
    tar_file.extractall(target_dir)

    master_vars: Dict[str, Any] = {"contacts": {}}
    exec(tar_file.extractfile("./contacts.mk").read(), {}, master_vars)

    site_contacts = _update_contacts_dict(master_vars["contacts"], site_vars["contacts"])
    store.save_to_mk_file(os.path.join(target_dir, "contacts.mk"), "contacts", site_contacts)
Exemple #15
0
    def save_sites(cls, sites, activate=True):
        # TODO: Clean this up
        from cmk.gui.watolib.hosts_and_folders import Folder
        store.mkdir(multisite_dir())
        store.save_to_mk_file(cls._sites_mk(), "sites", sites)

        # Do not activate when just the site's global settings have
        # been edited
        if activate:
            config.load_config()  # make new site configuration active
            _update_distributed_wato_file(sites)
            Folder.invalidate_caches()
            cmk.gui.watolib.sidebar_reload.need_sidebar_reload()

            _create_nagvis_backends(sites)

            # Call the sites saved hook
            hooks.call("sites-saved", sites)
Exemple #16
0
def _update_check_mk(path, tar_file):
    "extract check_mk/conf.d/wato folder but skip overwriting user notification_rules"

    members = [m for m in tar_file.getmembers() if m.name != "./contacts.mk"]
    for entry in members:
        filepath = os.path.join(path, entry.name)
        if os.path.isfile(filepath):
            os.remove(filepath)

    tar_file.extractall(path, members=members)

    master_vars = {"contacts": {}}  # type: Dict[str, Any]
    eval(tar_file.extractfile("./contacts.mk").read(), {}, master_vars)

    site_vars = {"contacts": {}}  # type: Dict[str, Any]
    with Path(path).joinpath("contacts.mk").open(encoding="utf-8") as f:
        eval(f.read(), {}, site_vars)

    site_contacts = _update_contacts_dict(master_vars["contacts"], site_vars["contacts"])

    store.save_to_mk_file(os.path.join(path, "contacts.mk"), "contacts", site_contacts)
Exemple #17
0
    def _save_liveproxyd_config(cls, sites):
        path = cmk.utils.paths.default_config_dir + "/liveproxyd.mk"

        conf = {}
        for siteid, siteconf in sites.items():
            proxy_params = siteconf["proxy"]
            if proxy_params is None:
                continue

            conf[siteid] = {
                "socket": siteconf["socket"],
            }

            if "tcp" in proxy_params:
                conf[siteid]["tcp"] = proxy_params["tcp"]

            if proxy_params["params"]:
                conf[siteid].update(proxy_params["params"])

        store.save_to_mk_file(path, "sites", conf)

        ConfigDomainLiveproxy().activate()
Exemple #18
0
 def _save_gui_config(self, cfg: TagConfigSpec) -> None:
     self._config_file_path.parent.mkdir(mode=0o770,
                                         exist_ok=True,
                                         parents=True)
     store.save_to_mk_file(self._config_file_path, self._config_variable,
                           cfg)
Exemple #19
0
 def save_layouts(cls):
     # type: () -> None
     store.save_to_mk_file(str(BILayoutManagement._config_file),
                           "bi_layouts",
                           config.bi_layouts,
                           pprint_value=True)
Exemple #20
0
 def _save_base_config(self, cfg: TagConfigSpec) -> None:
     self._config_file_path.parent.mkdir(mode=0o770,
                                         exist_ok=True,
                                         parents=True)
     store.save_to_mk_file(
         Path(wato_root_dir()) / "tags.mk", "tag_config", cfg)
 def save(self, cfg: Mapping[str, _T]) -> None:
     self._config_file_path.parent.mkdir(mode=0o770,
                                         exist_ok=True,
                                         parents=True)
     store.save_to_mk_file(str(self._config_file_path),
                           self._config_variable, cfg)