in lib/ec2macosinit/systemconfig.go [67:156]
func (c *SystemConfigModule) Do(ctx *ModuleContext) (message string, err error) {
wg := sync.WaitGroup{}
// Secure SSHD configuration
var sshdConfigChanges, sshdUnchanged, sshdErrors int32
if c.SecureSSHDConfig != nil && *c.SecureSSHDConfig {
wg.Add(1)
go func() {
err := writeEC2SSHConfigs()
if err != nil {
ctx.Logger.Errorf("Error writing ec2 custom ssh configs: %s", err)
}
wg.Done()
}()
wg.Add(1)
go func() {
changes, err := c.configureSSHD(ctx)
if err != nil {
atomic.AddInt32(&sshdErrors, 1)
ctx.Logger.Errorf("Error while attempting to correct SSHD configuration: %s", err)
}
if changes {
// Add change for messaging
atomic.AddInt32(&sshdConfigChanges, 1)
} else {
// No changes made
atomic.AddInt32(&sshdUnchanged, 1)
}
wg.Done()
}()
}
// Modifications using sysctl
var sysctlChanged, sysctlUnchanged, sysctlErrors int32
for _, m := range c.ModifySysctl {
wg.Add(1)
go func(val string) {
changed, err := modifySysctl(val)
if err != nil {
atomic.AddInt32(&sysctlErrors, 1)
ctx.Logger.Errorf("Error while attempting to modify sysctl property [%s]: %s", val, err)
}
if changed { // changed a property
atomic.AddInt32(&sysctlChanged, 1)
ctx.Logger.Infof("Modified sysctl property [%s]", val)
} else { // did not change a property
atomic.AddInt32(&sysctlUnchanged, 1)
ctx.Logger.Infof("Did not modify sysctl property [%s]", val)
}
wg.Done()
}(m.Value)
}
// Modifications using defaults
var defaultsChanged, defaultsUnchanged, defaultsErrors int32
for _, m := range c.ModifyDefaults {
wg.Add(1)
go func(modifyDefault ModifyDefaults) {
changed, err := modifyDefaults(modifyDefault)
if err != nil {
atomic.AddInt32(&defaultsErrors, 1)
ctx.Logger.Errorf("Error while attempting to modify default [%s]: %s", modifyDefault.Parameter, err)
}
if changed { // changed a property
atomic.AddInt32(&defaultsChanged, 1)
ctx.Logger.Infof("Modified default [%s]", modifyDefault.Parameter)
} else { // did not change a property
atomic.AddInt32(&defaultsUnchanged, 1)
ctx.Logger.Infof("Did not modify default [%s]", modifyDefault.Parameter)
}
wg.Done()
}(m)
}
// Wait for everything to finish
wg.Wait()
// Craft output message
totalChanged := sysctlChanged + defaultsChanged + sshdConfigChanges
totalUnchanged := sysctlUnchanged + defaultsUnchanged + sshdUnchanged
totalErrors := sysctlErrors + defaultsErrors + sshdErrors
baseMessage := fmt.Sprintf("[%d changed / %d unchanged / %d error(s)] out of %d requested changes",
totalChanged, totalUnchanged, totalErrors, totalChanged+totalUnchanged)
if totalErrors > 0 {
return "", fmt.Errorf("one or more system configuration changes were unsuccessful: %s", baseMessage)
}
return "system configuration completed with " + baseMessage, nil
}