mirror of https://github.com/Icinga/icinga2.git
Add global zone identifier for global object/template configuration.
Refs #6254
This commit is contained in:
parent
64bdc7602a
commit
a3b2b1d780
|
@ -344,6 +344,35 @@ process.
|
||||||
> determines the required include directory. This can be overridden using the
|
> determines the required include directory. This can be overridden using the
|
||||||
> [global constant](#global-constants) `ZonesDir`.
|
> [global constant](#global-constants) `ZonesDir`.
|
||||||
|
|
||||||
|
#### <a id="zone-synchronisation-permissions"></a> Global configuration zone
|
||||||
|
|
||||||
|
If your zone configuration setup shares the same templates, groups, commands, timeperiods, etc.
|
||||||
|
you would have to duplicate quite a lot of configuration objects making the merged configuration
|
||||||
|
on your configuration master unique.
|
||||||
|
|
||||||
|
That is not necessary by defining a global zone shipping all those templates. By settting
|
||||||
|
`global = true` you ensure that this zone configuration template will be synchronized to all
|
||||||
|
involved nodes (only if they accept configuration though).
|
||||||
|
|
||||||
|
/etc/icinga2/zones.d
|
||||||
|
global-templates/
|
||||||
|
templates.conf
|
||||||
|
groups.conf
|
||||||
|
master
|
||||||
|
health.conf
|
||||||
|
checker
|
||||||
|
health.conf
|
||||||
|
demo.conf
|
||||||
|
|
||||||
|
In this example, the global zone is called `global-templates` and must be defined in
|
||||||
|
your zone configuration visible to all nodes.
|
||||||
|
|
||||||
|
object Zone "global-templates" {
|
||||||
|
global = true
|
||||||
|
}
|
||||||
|
|
||||||
|
If you don't require any global configuration, skip this setting.
|
||||||
|
|
||||||
#### <a id="zone-synchronisation-permissions"></a> Zone Configuration Permissions
|
#### <a id="zone-synchronisation-permissions"></a> Zone Configuration Permissions
|
||||||
|
|
||||||
Each [ApiListener](#objecttype-apilistener) object must have the `accept_config` attribute
|
Each [ApiListener](#objecttype-apilistener) object must have the `accept_config` attribute
|
||||||
|
|
|
@ -12,6 +12,16 @@ object Zone ZoneName {
|
||||||
endpoints = [ NodeName ]
|
endpoints = [ NodeName ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defines a global zone containing templates,
|
||||||
|
* etc. synced to all nodes, if they accept
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
object Zone "global-templates" {
|
||||||
|
global = true
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read the documentation on how to configure
|
* Read the documentation on how to configure
|
||||||
* a cluster setup with multiple zones.
|
* a cluster setup with multiple zones.
|
||||||
|
|
|
@ -126,6 +126,12 @@ void ApiListener::SyncZoneDir(const Zone::Ptr& zone) const
|
||||||
void ApiListener::SyncZoneDirs(void) const
|
void ApiListener::SyncZoneDirs(void) const
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const Zone::Ptr& zone, DynamicType::GetObjects<Zone>()) {
|
BOOST_FOREACH(const Zone::Ptr& zone, DynamicType::GetObjects<Zone>()) {
|
||||||
|
/* always sync global zone dirs */
|
||||||
|
if (zone->GetGlobal()) {
|
||||||
|
SyncZoneDir(zone);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!IsConfigMaster(zone))
|
if (!IsConfigMaster(zone))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -105,8 +105,10 @@ private:
|
||||||
|
|
||||||
static Dictionary::Ptr LoadConfigDir(const String& dir);
|
static Dictionary::Ptr LoadConfigDir(const String& dir);
|
||||||
static bool UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir);
|
static bool UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir);
|
||||||
|
|
||||||
void SyncZoneDirs(void) const;
|
void SyncZoneDirs(void) const;
|
||||||
void SyncZoneDir(const Zone::Ptr& zone) const;
|
void SyncZoneDir(const Zone::Ptr& zone) const;
|
||||||
|
|
||||||
bool IsConfigMaster(const Zone::Ptr& zone) const;
|
bool IsConfigMaster(const Zone::Ptr& zone) const;
|
||||||
static void ConfigGlobHandler(const Dictionary::Ptr& config, const String& path, const String& file);
|
static void ConfigGlobHandler(const Dictionary::Ptr& config, const String& path, const String& file);
|
||||||
void SendConfigUpdate(const ApiClient::Ptr& aclient);
|
void SendConfigUpdate(const ApiClient::Ptr& aclient);
|
||||||
|
|
|
@ -47,5 +47,7 @@
|
||||||
|
|
||||||
%attribute %array "endpoints" {
|
%attribute %array "endpoints" {
|
||||||
%attribute %name(Endpoint) "*"
|
%attribute %name(Endpoint) "*"
|
||||||
}
|
},
|
||||||
|
|
||||||
|
%attribute %number "global"
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ class Zone : DynamicObject
|
||||||
{
|
{
|
||||||
[config] String parent (ParentRaw);
|
[config] String parent (ParentRaw);
|
||||||
[config] Array::Ptr endpoints (EndpointsRaw);
|
[config] Array::Ptr endpoints (EndpointsRaw);
|
||||||
|
[config] bool global;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue