in lib/ec2macosinit/systemconfig.go [180:221]
func modifySysctl(value string) (changed bool, err error) {
// Separate parameter
inputSplit := strings.Split(value, "=")
if len(inputSplit) != 2 {
return false, fmt.Errorf("ec2macosinit: unable to split input sysctl value: %s", value)
}
param := inputSplit[0]
// Check current value
output, err := executeCommand([]string{"sysctl", "-e", param}, "", []string{})
if err != nil {
return false, fmt.Errorf("ec2macosinit: unable to get current value from sysctl: %s", err)
}
if strings.TrimSpace(output.stdout) == value {
return false, nil // Exit early if value is already set
}
// Attempt to set the value five times, with 100ms in between each attempt
err = retry(5, 100*time.Millisecond, func() (err error) {
// Set value
_, err = executeCommand([]string{"sysctl", value}, "", []string{})
if err != nil {
return fmt.Errorf("ec2macosinit: unable to set desired value using sysctl: %s", err)
}
// Validate new value
output, err = executeCommand([]string{"sysctl", "-e", param}, "", []string{})
if err != nil {
return fmt.Errorf("ec2macosinit: unable to get current value from sysctl: %s", err)
}
if strings.TrimSpace(output.stdout) != value {
return fmt.Errorf("ec2macosinit: error setting new value using sysctl: %s", output.stdout)
}
return nil
})
if err != nil {
return false, err
}
return true, nil
}