{"record":{"id":"35a26fcd1acf1ee1","repo":"OpenNHP/opennhp","slug":"unknown-remote-provider","errorCode":null,"errorMessage":"unknown remote provider","messagePattern":"unknown remote provider","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"endpoints/ac/config.go","lineNumber":425,"sourceCode":"\t\t\treturn nil\n\t\t}\n\n\t\tif len(conf.Key) == 0 {\n\t\t\tlog.Error(\"remote config has no key,open nhp server will startup with local configuration\")\n\t\t\treturn nil\n\t\t}\n\n\t\ta.etcdConn = &etcd.EtcdConn{\n\t\t\tEndpoints: conf.Endpoints,\n\t\t\tUsername:  conf.Username,\n\t\t\tPassword:  conf.Password,\n\t\t\tKey:       conf.Key,\n\t\t}\n\n\t\terr = a.etcdConn.InitClient()\n\t\treturn err\n\t} else {\n\t\treturn errors.New(\"unknown remote provider\")\n\t}\n\n}\n\nfunc (a *UdpAC) loadRemoteConfig() error {\n\tvalue, err := a.etcdConn.GetValue()\n\tif err != nil {\n\t\treturn err\n\t}\n\t//base config has been loaded and no secondary loading is required\n\tif err = a.updateEtcdConfig(value, false); err != nil {\n\t\treturn err\n\t}\n\n\tgo a.etcdConn.WatchValue(func(val []byte) {\n\t\ta.remoteConfigUpdateMutex.Lock()\n\t\tdefer a.remoteConfigUpdateMutex.Unlock()\n\t\t_ = a.updateEtcdConfig(val, true)","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/OpenNHP/opennhp/blob/6e04ca5ff03222a699c24205cd4bf8fee9af7ffe/endpoints/ac/config.go#L407-L443","documentation":"initRemoteConn in UdpAC only supports a fixed set of remote config providers; when the configured provider is anything other than the supported one (etcd), it returns this sentinel error. The AC daemon cannot start because its remote configuration source is unrecognized.","triggerScenarios":"Start() calls initRemoteConn while the 'provider' field in the AC's remote/etcd config section is empty, misspelled (e.g. 'etcdv3', 'consul'), or set to a provider other than the supported 'etcd'.","commonSituations":"Operators copy a config.toml from another deployment, hand-edit the provider field, or leave it blank when etcd is expected; upgrading configs across versions where provider names changed.","solutions":["Set the remote config provider field in the AC config to the supported value (etcd)","Check for typos/case mismatches in the provider string","If no remote config is needed, remove or disable the remote config section rather than leaving a wrong provider value","Verify the rendered config file that actually ships to the host contains the right provider"],"exampleFix":"// before (config.toml)\n[remote]\nprovider = \"etcdv3\"\n// after\n[remote]\nprovider = \"etcd\"","handlingStrategy":"validation","validationCode":"cfg, err := loadACConfig(path)\nif err != nil { return err }\nif cfg.Remote.Provider != \"etcd\" {\n    return fmt.Errorf(\"AC config: unsupported remote provider %q (want \\\"etcd\\\")\", cfg.Remote.Provider)\n}","typeGuard":"func providerSupported(p string) bool { return strings.TrimSpace(p) == \"etcd\" }","tryCatchPattern":"if err := a.Start(); err != nil {\n    if strings.Contains(err.Error(), \"unknown remote provider\") {\n        log.Fatalf(\"fix [remote].provider in config; only 'etcd' is supported: %v\", err)\n    }\n    return err\n}","preventionTips":["Validate the config file in CI before deployment","Keep provider strings in a shared constant, never inline literals","Diff rendered configs against a known-good template on each deploy"],"tags":["go","config","etcd"],"backgroundTag":"invalid-config-value","analyzedSha":"6e04ca5ff03222a699c24205cd4bf8fee9af7ffe","analyzedAt":"2026-09-07T15:44:59.941Z","contentChangedAt":"2026-09-07T15:44:59.941Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}