pkg/sdk/flags/env.go (38 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package flags import ( "fmt" "strconv" "strings" "github.com/fatih/structs" "github.com/elastic/harp/pkg/sdk/log" ) // AsEnvVariables sets struct values from environment variables func AsEnvVariables(o interface{}, prefix string, skipCommented bool) map[string]string { r := map[string]string{} prefix = strings.ToUpper(prefix) delim := "_" if prefix == "" { delim = "" } fields := structs.Fields(o) for _, f := range fields { if skipCommented { tag := f.Tag("commented") if tag != "" { commented, err := strconv.ParseBool(tag) log.CheckErr("Unable to parse tag value", err) if commented { continue } } } if structs.IsStruct(f.Value()) { rf := AsEnvVariables(f.Value(), prefix+delim+f.Name(), skipCommented) for k, v := range rf { r[k] = v } } else { r[prefix+"_"+strings.ToUpper(f.Name())] = fmt.Sprintf("%v", f.Value()) } } return r }