> determines the required include directory. This can be overridden using the
> [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
Each [ApiListener](#objecttype-apilistener) object must have the `accept_config` attribute
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
* a cluster setup with multiple zones.
void ApiListener::SyncZoneDirs(void) const
{
BOOST_FOREACH(const Zone::Ptr& zone, DynamicType::GetObjects<Zone>()) {
+ /* always sync global zone dirs */
+ if (zone->GetGlobal()) {
+ SyncZoneDir(zone);
+ continue;
+ }
+
if (!IsConfigMaster(zone))
continue;
static Dictionary::Ptr LoadConfigDir(const String& dir);
static bool UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir);
+
void SyncZoneDirs(void) const;
void SyncZoneDir(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);
void SendConfigUpdate(const ApiClient::Ptr& aclient);
%attribute %array "endpoints" {
%attribute %name(Endpoint) "*"
- }
+ },
+
+ %attribute %number "global"
}
{
[config] String parent (ParentRaw);
[config] Array::Ptr endpoints (EndpointsRaw);
+ [config] bool global;
};
}