in cmd/config_merger/main.go [68:135]
func main() {
log := logrus.WithField("component", componentName)
opt := gatherOptions()
opt.validate(log)
var file []byte
if opt.listPath != "" {
var err error
file, err = ioutil.ReadFile(opt.listPath)
if err != nil {
log.WithField("--config-list", opt.listPath).WithError(err).Fatalf("Can't find --config-list")
}
}
if opt.listURL != "" {
resp, err := http.Get(opt.listURL)
if err != nil {
log.WithField("--config-url", opt.listURL).WithError(err).Fatalf("Can't GET --config-url")
}
defer resp.Body.Close()
file, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.WithField("--config-url", opt.listURL).WithError(err).Fatalf("Can't read contents at --config-url")
}
}
list, err := merger.ParseAndCheck(file)
if err != nil {
log.WithError(err).Fatal("Can't parse YAML merge config")
}
log.WithField("merge-list", list).Debug("YAML mergelist read successful")
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
storageClient, err := gcs.ClientWithCreds(ctx, opt.creds)
if err != nil {
log.WithError(err).Fatalf("Can't make storage client")
}
client := gcs.NewClient(storageClient)
mets := merger.CreateMetrics(prometheus.NewFactory())
updateOnce := func(ctx context.Context) {
ctx, cancel := context.WithTimeout(ctx, 10*time.Minute)
defer cancel()
log.Info("Starting MergeAndUpdate")
_, err := merger.MergeAndUpdate(ctx, client, mets, list, opt.skipValidate, opt.confirm)
if err != nil {
log.WithError(err).Error("Update failed")
return
}
}
updateOnce(ctx)
if opt.wait == 0 {
return
}
timer := time.NewTimer(opt.wait)
defer timer.Stop()
for range timer.C {
timer.Reset(opt.wait)
updateOnce(ctx)
log.WithField("--wait", opt.wait).Info("Sleeping")
}
}