diff --git a/changes/13071-disable-fleetd-enroll-errors b/changes/13071-disable-fleetd-enroll-errors new file mode 100644 index 0000000000..a36dde8111 --- /dev/null +++ b/changes/13071-disable-fleetd-enroll-errors @@ -0,0 +1,2 @@ +- EXPERIMENTAL: Applying the environmental variable "FLEETD_SILENCE_ENROLL_ERROR"=1 will silence fleetd errors if not setting `--fleet-url` when generating an orbit installer. +- Note: Set this variable before upgrading orbit, or restart the orbit service after setting it. \ No newline at end of file diff --git a/orbit/cmd/orbit/orbit.go b/orbit/cmd/orbit/orbit.go index b82272ec1a..a626d94072 100644 --- a/orbit/cmd/orbit/orbit.go +++ b/orbit/cmd/orbit/orbit.go @@ -22,6 +22,7 @@ import ( "github.com/fleetdm/fleet/v4/orbit/pkg/constant" "github.com/fleetdm/fleet/v4/orbit/pkg/execuser" "github.com/fleetdm/fleet/v4/orbit/pkg/insecure" + "github.com/fleetdm/fleet/v4/orbit/pkg/logging" "github.com/fleetdm/fleet/v4/orbit/pkg/osquery" "github.com/fleetdm/fleet/v4/orbit/pkg/osservice" "github.com/fleetdm/fleet/v4/orbit/pkg/platform" @@ -341,7 +342,8 @@ func main() { g.Add(systemChecker.Execute, systemChecker.Interrupt) go osservice.SetupServiceManagement(constant.SystemServiceName, systemChecker.svcInterruptCh, appDoneCh) - if !c.Bool("disable-kickstart-softwareupdated") { + // sofwareupdated is a macOS daemon that automatically updates Apple software. + if !c.Bool("disable-kickstart-softwareupdated") && runtime.GOOS == "darwin" { log.Warn().Msg("fleetd no longer automatically kickstarts softwareupdated. The --disable-kickstart-softwareupdated flag, which was previously used to disable this behavior, has been deprecated and will be removed in a future version") } @@ -643,7 +645,7 @@ func main() { if _, err := flagRunner.DoFlagsUpdate(); err != nil { // Just log, OK to continue, since flagRunner will retry // in flagRunner.Execute. - log.Info().Err(err).Msg("initial flags update failed") + log.Debug().Err(err).Msg("initial flags update failed") } g.Add(flagRunner.Execute, flagRunner.Interrupt) @@ -659,14 +661,14 @@ func main() { if _, err := extRunner.DoExtensionConfigUpdate(); err != nil { // just log, OK to continue since this will get retry - log.Info().Err(err).Msg("initial update to fetch extensions from /config API failed") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "initial update to fetch extensions from /config API failed") } // call UpdateAction on the updateRunner after we have fetched extensions from Fleet _, err := updateRunner.UpdateAction() if err != nil { // OK, initial call may fail, ok to continue - log.Info().Err(err).Msg("initial extensions update action failed") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "initial extensions update action failed") } extensionAutoLoadFile := filepath.Join(c.String("root-dir"), "extensions.load") @@ -684,7 +686,7 @@ func main() { case errors.Is(err, os.ErrNotExist): // OK, nothing to do. default: - log.Error().Err(err).Msg("error with extensions.load file at " + extensionAutoLoadFile) + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "error with extensions.load file at "+extensionAutoLoadFile) } g.Add(extRunner.Execute, extRunner.Interrupt) } @@ -1226,7 +1228,7 @@ func (f *capabilitiesChecker) execute() error { // do an initial ping to store the initial capabilities if err := f.client.Ping(); err != nil { - log.Error().Err(err).Msg("pinging the server") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "pinging the server") } for { @@ -1235,7 +1237,7 @@ func (f *capabilitiesChecker) execute() error { oldCapabilities := f.client.GetServerCapabilities() // ping the server to get the latest capabilities if err := f.client.Ping(); err != nil { - log.Error().Err(err).Msg("pinging the server") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "pinging the server") continue } newCapabilities := f.client.GetServerCapabilities() diff --git a/orbit/pkg/constant/constant.go b/orbit/pkg/constant/constant.go index 0c223daa7c..c8ab2776b1 100644 --- a/orbit/pkg/constant/constant.go +++ b/orbit/pkg/constant/constant.go @@ -47,4 +47,6 @@ const ( // UpdateTLSClientKeyFileName is the name of the TLS client private key file // used when connecting to the update server. UpdateTLSClientKeyFileName = "update_client.key" + // SilenceEnrollLogErrorEnvVer is an environment variable name for disabling enroll log errors + SilenceEnrollLogErrorEnvVar = "FLEETD_SILENCE_ENROLL_ERROR" ) diff --git a/orbit/pkg/logging/logging.go b/orbit/pkg/logging/logging.go new file mode 100644 index 0000000000..f557827ae1 --- /dev/null +++ b/orbit/pkg/logging/logging.go @@ -0,0 +1,15 @@ +package logging + +import ( + "os" + + "github.com/rs/zerolog/log" +) + +// LogErrIfEnvNotSet logs if the environment variable is not set to "1". +func LogErrIfEnvNotSet(envVarName string, err error, message string) { + actualValue := os.Getenv(envVarName) + if actualValue != "1" { + log.Info().Err(err).Msg(message) + } +} diff --git a/orbit/pkg/update/flag_runner.go b/orbit/pkg/update/flag_runner.go index 4625b4a20f..570bc7d652 100644 --- a/orbit/pkg/update/flag_runner.go +++ b/orbit/pkg/update/flag_runner.go @@ -12,6 +12,7 @@ import ( "time" "github.com/fleetdm/fleet/v4/orbit/pkg/constant" + "github.com/fleetdm/fleet/v4/orbit/pkg/logging" "github.com/rs/zerolog/log" ) @@ -56,10 +57,10 @@ func (r *FlagRunner) Execute() error { case <-r.cancel: return nil case <-ticker.C: - log.Info().Msg("calling flags update") + log.Debug().Msg("calling flags update") didUpdate, err := r.DoFlagsUpdate() if err != nil { - log.Info().Err(err).Msg("flags updates failed") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "flags updates failed") } if didUpdate { log.Info().Msg("flags updated, exiting") @@ -166,7 +167,7 @@ func (r *ExtensionRunner) Execute() error { log.Debug().Msg("calling /config API to fetch/update extensions") extensionsCleared, err := r.DoExtensionConfigUpdate() if err != nil { - log.Info().Err(err).Msg("ext update failed") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "ext update failed") } if extensionsCleared { log.Info().Msg("extensions were cleared on the server") diff --git a/server/service/orbit_client.go b/server/service/orbit_client.go index c5c094bba0..3a1d975d96 100644 --- a/server/service/orbit_client.go +++ b/server/service/orbit_client.go @@ -16,6 +16,7 @@ import ( "time" "github.com/fleetdm/fleet/v4/orbit/pkg/constant" + "github.com/fleetdm/fleet/v4/orbit/pkg/logging" "github.com/fleetdm/fleet/v4/orbit/pkg/platform" "github.com/fleetdm/fleet/v4/pkg/retry" "github.com/fleetdm/fleet/v4/server/fleet" @@ -223,7 +224,7 @@ func (oc *OrbitClient) getNodeKeyOrEnroll() (string, error) { endpointDoesNotExist = true return nil default: - log.Info().Err(err).Msg("enroll failed, retrying") + logging.LogErrIfEnvNotSet(constant.SilenceEnrollLogErrorEnvVar, err, "enroll failed, retrying") return err } },