@@ -299,15 +299,15 @@ func LoadConfigFromCache() (AgentConfig, error) {
299299 cacheBytes , err := os .ReadFile (cachePath )
300300 if err != nil {
301301 if errors .Is (err , fs .ErrNotExist ) {
302- return StackOfflineConfig ( )
302+ return StackConfigs ( & pb. DeviceAgentConfigResponse {} )
303303 } else {
304- cfg , newErr := StackOfflineConfig ( )
304+ cfg , newErr := StackConfigs ( & pb. DeviceAgentConfigResponse {} )
305305 return cfg , errors .Join (errw .Wrap (err , "reading config cache" ), newErr )
306306 }
307307 } else {
308308 err = json .Unmarshal (cacheBytes , & cfg )
309309 if err != nil {
310- cfg , newErr := StackOfflineConfig ( )
310+ cfg , newErr := StackConfigs ( & pb. DeviceAgentConfigResponse {} )
311311 return cfg , errors .Join (errw .Wrap (err , "parsing config cache" ), newErr )
312312 }
313313 }
@@ -328,29 +328,21 @@ func ApplyCLIArgs(cfg AgentConfig) AgentConfig {
328328 return newCfg
329329}
330330
331- // StackOldProvisioningConfig reads viam-provisioning.json if available and merges it over startCfg.
332- func stackOldProvisioningConfig ( startCfg AgentConfig ) ( AgentConfig , error ) {
331+ func StackConfigs ( proto * pb. DeviceAgentConfigResponse ) ( AgentConfig , error ) {
332+ cfg := DefaultConfig ()
333333 var errOut error
334334
335- // parse/apply deprecated /etc/viam-provisioning.json (NetworkConfiguration only)
335+ // parse/apply deprecated /etc/viam-provisioning.json
336336 oldCfg , err := LoadOldProvisioningConfig ()
337337 if err != nil {
338338 if ! errors .Is (err , fs .ErrNotExist ) {
339339 errOut = errors .Join (errOut , errw .Wrap (err , "reading deprecated /etc/viam-provisioning.json" ))
340340 }
341341 } else {
342- startCfg .NetworkConfiguration = * oldCfg
342+ cfg .NetworkConfiguration = * oldCfg
343343 }
344- return startCfg , errOut
345- }
346-
347- // StackOldProvisioningConfig reads viam-defaults.json if available and merges it over startCfg.
348- func stackViamDefaultsConfig (startCfg AgentConfig ) (AgentConfig , error ) {
349- cfg := startCfg
350- var errOut error
351344
352345 // manufacturer config from local disk (/etc/viam-defaults.json)
353- // use only if cloud read wasn't provided or unmarshall failed (don't merge the two).
354346 jsonBytes , err := os .ReadFile (DefaultsFilePath )
355347 if err != nil {
356348 if ! errors .Is (err , fs .ErrNotExist ) {
@@ -362,70 +354,21 @@ func stackViamDefaultsConfig(startCfg AgentConfig) (AgentConfig, error) {
362354 }
363355 }
364356
365- return cfg , errOut
366- }
367-
368- // StackConfigs merges nextCfg over startCfg.
369- func StackConfigs (startCfg , nextCfg AgentConfig ) (AgentConfig , error ) {
370- cfg := startCfg
371- var errOut error
372-
373- jsonBytes , err := json .Marshal (nextCfg )
374- if err != nil {
375- errOut = errors .Join (errOut , err )
376- } else {
377- if err := json .Unmarshal (jsonBytes , & cfg ); err != nil {
378- errOut = errors .Join (errOut , err )
379- }
380- }
381- return cfg , errOut
382- }
383-
384- // StackOfflineConfig returns a merged config resulting from applying in order:
385- // DefaultConfig -> deprecated viam-provisioning.json -> viam-defaults.json.
386- func StackOfflineConfig () (AgentConfig , error ) {
387- return StackProtoConfig (nil )
388- }
389-
390- // StackProtoConfig returns a merged config resulting from applying in order:
391- // DefaultConfig -> deprecated viam-provisioning.json -> cloud config if available & valid / otherwise viam-defaults.json.
392- func StackProtoConfig (fromCloudProto * pb.DeviceAgentConfigResponse ) (AgentConfig , error ) {
393- cfg := DefaultConfig ()
394- var errOut error
395-
396- cfgTmp , err := stackOldProvisioningConfig (cfg )
357+ // cloud-provided config
358+ cloudCfg , err := ProtoToConfig (proto )
397359 if err != nil {
398360 errOut = errors .Join (errOut , err )
399361 } else {
400- cfg = cfgTmp
401- }
402-
403- var cloudCfgSuccess bool
404- if fromCloudProto != nil {
405- cloudCfg , err := ProtoToConfig (fromCloudProto )
362+ jsonBytes , err = json .Marshal (cloudCfg )
406363 if err != nil {
407364 errOut = errors .Join (errOut , err )
408365 } else {
409- cfgTmp , err := StackConfigs (cfg , cloudCfg )
410- if err != nil {
366+ if err := json .Unmarshal (jsonBytes , & cfg ); err != nil {
411367 errOut = errors .Join (errOut , err )
412- } else {
413- cfg = cfgTmp
414- cloudCfgSuccess = true
415368 }
416369 }
417370 }
418371
419- // use viam-defaults (stack on top of base) only if cloud config is invalid
420- if ! cloudCfgSuccess {
421- cfgTmp , err := stackViamDefaultsConfig (cfg )
422- if err != nil {
423- errOut = errors .Join (errOut , err )
424- } else {
425- cfg = cfgTmp
426- }
427- }
428-
429372 // validate/enforce/limit values
430373 validatedCfg , err := validateConfig (cfg )
431374 errOut = errors .Join (errOut , err )
0 commit comments