Add global zone identifier for global object/template configuration.

Refs #6254
This commit is contained in:
Michael Friedrich 2014-06-10 11:40:43 +02:00
parent 64bdc7602a
commit a3b2b1d780
6 changed files with 51 additions and 1 deletions

View File

@ -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

View File

@ -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.

View File

@ -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;

View File

@ -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);

View File

@ -47,5 +47,7 @@
%attribute %array "endpoints" { %attribute %array "endpoints" {
%attribute %name(Endpoint) "*" %attribute %name(Endpoint) "*"
} },
%attribute %number "global"
} }

View File

@ -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;
}; };
} }