Improve Control. server config

This commit is contained in:
Richard Frith-Macdonald 2022-11-07 12:13:41 +00:00
parent 5b1d1b89c5
commit 36b9547a8b
2 changed files with 55 additions and 4 deletions

View file

@ -6,6 +6,10 @@
*/ */
* = { * = {
}; };
Control = {
/* Section for the Control server on any master host.
*/
};
Feep = { Feep = {
/* Section for the process Feep on any/all hosts. /* Section for the process Feep on any/all hosts.
*/ */

View file

@ -349,6 +349,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
NSMutableArray *consoles; NSMutableArray *consoles;
NSString *logname; NSString *logname;
NSDictionary *config; NSDictionary *config;
NSDictionary *controlConfig;
NSMutableDictionary *operators; NSMutableDictionary *operators;
NSMutableDictionary *fileBodies; NSMutableDictionary *fileBodies;
NSMutableDictionary *fileDates; NSMutableDictionary *fileDates;
@ -1814,6 +1815,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
DESTROY(configFailed); DESTROY(configFailed);
DESTROY(configIncludeFailed); DESTROY(configIncludeFailed);
DESTROY(alarmFilter); DESTROY(alarmFilter);
DESTROY(controlConfig);
[super dealloc]; [super dealloc];
} }
@ -3124,6 +3126,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
NSEnumerator *rootEnum; NSEnumerator *rootEnum;
id hostKey; id hostKey;
NSString *digest = nil; NSString *digest = nil;
BOOL foundControlConfig = NO;
if ([conf isKindOfClass: [NSDictionary class]] == NO) if ([conf isKindOfClass: [NSDictionary class]] == NO)
{ {
@ -3275,6 +3278,43 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
} }
app = [self recursiveInclude: hostObj]; app = [self recursiveInclude: hostObj];
if ([appKey isEqual: @""] || [appKey isEqual: @"Control"])
{
if (NO == [hostKey isEqual: @"*"])
{
NSString *e;
NSString *k = appKey;
if (0 == [k length])
{
k = @"\"\"";
}
e = [NSString stringWithFormat:
@"%@ app-level has special key '%@' in host '%@'\n",
path, k, hostKey];
ASSIGN(configFailed, e);
[[self cmdLogFile: logname] printf: @"%@", configFailed];
return NO;
}
if (foundControlConfig)
{
NSString *e;
e = [NSString stringWithFormat:
@"%@ app-level has both 'Control' and '\"\"' in '%@'\n",
path, hostKey];
ASSIGN(configFailed, e);
[[self cmdLogFile: logname] printf: @"%@", configFailed];
return NO;
}
foundControlConfig = YES;
if (NO == [controlConfig isEqual: app])
{
ASSIGN(controlConfig, app);
changed = YES;
}
continue;
}
[host setObject: app forKey: appKey]; [host setObject: app forKey: appKey];
/* Set EcControlKey for all apps on all hosts. /* Set EcControlKey for all apps on all hosts.
*/ */
@ -3283,6 +3323,15 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
[root setObject: host forKey: hostKey]; [root setObject: host forKey: hostKey];
} }
if (NO == foundControlConfig)
{
if (controlConfig)
{
DESTROY(controlConfig);
changed = YES;
}
}
if (config == nil || [config isEqual: root] == NO) if (config == nil || [config isEqual: root] == NO)
{ {
changed = YES; changed = YES;
@ -3294,7 +3343,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
{ {
NSString *alerterDef; NSString *alerterDef;
NSString *str; NSString *str;
id myConfig = nil;
/* Merge the global configuration and Control server specific /* Merge the global configuration and Control server specific
* configuration into this process' user defaults. * configuration into this process' user defaults.
@ -3302,7 +3350,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
d = [config objectForKey: @"*"]; // Config across all hosts d = [config objectForKey: @"*"]; // Config across all hosts
if ([d isKindOfClass: [NSDictionary class]]) if ([d isKindOfClass: [NSDictionary class]])
{ {
myConfig = [d objectForKey: @""]; // Empty process name
d = [d objectForKey: @"*"]; d = [d objectForKey: @"*"];
} }
if (YES == [d isKindOfClass: [NSDictionary class]]) if (YES == [d isKindOfClass: [NSDictionary class]])
@ -3316,9 +3363,9 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
/* Control server specific config. /* Control server specific config.
*/ */
if ([myConfig isKindOfClass: [NSDictionary class]]) if ([controlConfig isKindOfClass: [NSDictionary class]])
{ {
[dict addEntriesFromDictionary: myConfig]; [dict addEntriesFromDictionary: controlConfig];
} }
/* If AlertConfig.plist was found, it overrides any value for Alerter /* If AlertConfig.plist was found, it overrides any value for Alerter