@@ -72,7 +72,11 @@ func main() {
7272 exitCode = 1
7373 }
7474
75- if err := events .WaitForEvents (5 * time .Second , rollbar .Wait , an .Wait , logging .Close ); err != nil {
75+ ev := []func (){rollbar .Wait , logging .Close }
76+ if an != nil {
77+ ev = append (ev , an .Wait )
78+ }
79+ if err := events .WaitForEvents (5 * time .Second , ev ... ); err != nil {
7680 logging .Warning ("state-installer failed to wait for events: %v" , err )
7781 }
7882
@@ -98,6 +102,22 @@ func main() {
98102 multilog .Critical ("Could not set up configuration handler: " + errs .JoinMessage (err ))
99103 fmt .Fprintln (os .Stderr , err .Error ())
100104 exitCode = 1
105+ return
106+ }
107+
108+ // Set config as early as possible to ensure we respect the values
109+ configArgs := []string {}
110+ for i , arg := range os .Args [1 :] {
111+ if arg == "--config-set" && i + 1 < len (os .Args [1 :]) {
112+ configArgs = append (configArgs , os .Args [1 :][i + 1 ])
113+ }
114+ }
115+
116+ if err := cfg .ApplyArgs (configArgs ); err != nil {
117+ multilog .Critical ("Could not apply config: " + errs .JoinMessage (err ))
118+ fmt .Fprintln (os .Stderr , err .Error ())
119+ exitCode = 1
120+ return
101121 }
102122
103123 rollbar .SetConfig (cfg )
@@ -142,22 +162,10 @@ func main() {
142162 break
143163 }
144164
145- // Parse command line arguments manually to extract config settings before analytics
146- params := newParams ()
147-
148- for i , arg := range processedArgs [1 :] {
149- if arg == "--config-set" && i + 1 < len (processedArgs [1 :]) {
150- params .configSettings = append (params .configSettings , processedArgs [1 :][i + 1 ])
151- }
152- }
153-
154- if err := applyConfigSettings (cfg , params .configSettings ); err != nil {
155- logging .Warning ("Could not apply config settings before analytics: %s" , errs .JoinMessage (err ))
156- }
157-
158165 an = sync .New (anaConst .SrcStateInstaller , cfg , nil , out )
159166 an .Event (anaConst .CatInstallerFunnel , "start" )
160167
168+ params := newParams ()
161169 cmd := captain .NewCommand (
162170 "state-installer" ,
163171 "" ,
@@ -522,44 +530,3 @@ func assertCompatibility() error {
522530
523531 return nil
524532}
525-
526- func applyConfigSettings (cfg * config.Instance , configSettings []string ) error {
527- for _ , setting := range configSettings {
528- setting = strings .TrimSpace (setting )
529- if setting == "" {
530- continue // Skip empty settings
531- }
532- if err := applyConfigSetting (cfg , setting ); err != nil {
533- return errs .Wrap (err , "Failed to apply config setting: %s" , setting )
534- }
535- }
536- return nil
537- }
538-
539- func applyConfigSetting (cfg * config.Instance , setting string ) error {
540- var key , valueStr string
541-
542- if strings .Contains (setting , "=" ) {
543- parts := strings .SplitN (setting , "=" , 2 )
544- if len (parts ) == 2 {
545- key = strings .TrimSpace (parts [0 ])
546- valueStr = strings .TrimSpace (parts [1 ])
547- }
548- }
549-
550- if key == "" || valueStr == "" {
551- return locale .NewInputError ("err_config_invalid_format" , "Config setting must be in 'key=value' format: {{.V0}}" , setting )
552- }
553-
554- // Store the raw string value without type validation since config options
555- // are not yet registered in the installer context
556- err := cfg .Set (key , valueStr )
557- if err != nil {
558- // Log the error but don't fail the installation for config issues
559- logging .Warning ("Could not set config value %s=%s: %s" , key , valueStr , errs .JoinMessage (err ))
560- return locale .WrapError (err , "err_config_set" , "Could not set value {{.V0}} for key {{.V1}}" , valueStr , key )
561- }
562-
563- logging .Debug ("Config setting applied: %s=%s" , key , valueStr )
564- return nil
565- }
0 commit comments