mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-07 02:07:58 +00:00
Add vendor folder to git
This commit is contained in:
parent
66cf5eaafb
commit
183585f56f
6916 changed files with 2629581 additions and 1 deletions
33
vendor/github.com/coreos/pkg/flagutil/env.go
generated
vendored
Normal file
33
vendor/github.com/coreos/pkg/flagutil/env.go
generated
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// SetFlagsFromEnv parses all registered flags in the given flagset,
|
||||
// and if they are not already set it attempts to set their values from
|
||||
// environment variables. Environment variables take the name of the flag but
|
||||
// are UPPERCASE, and any dashes are replaced by underscores. Environment
|
||||
// variables additionally are prefixed by the given string followed by
|
||||
// and underscore. For example, if prefix=PREFIX: some-flag => PREFIX_SOME_FLAG
|
||||
func SetFlagsFromEnv(fs *flag.FlagSet, prefix string) (err error) {
|
||||
alreadySet := make(map[string]bool)
|
||||
fs.Visit(func(f *flag.Flag) {
|
||||
alreadySet[f.Name] = true
|
||||
})
|
||||
fs.VisitAll(func(f *flag.Flag) {
|
||||
if !alreadySet[f.Name] {
|
||||
key := prefix + "_" + strings.ToUpper(strings.Replace(f.Name, "-", "_", -1))
|
||||
val := os.Getenv(key)
|
||||
if val != "" {
|
||||
if serr := fs.Set(f.Name, val); serr != nil {
|
||||
err = fmt.Errorf("invalid value %q for %s: %v", val, key, serr)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
return err
|
||||
}
|
||||
77
vendor/github.com/coreos/pkg/flagutil/env_file.go
generated
vendored
Normal file
77
vendor/github.com/coreos/pkg/flagutil/env_file.go
generated
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// SetFlagsFromEnvFile iterates the given flagset and if any flags are not
|
||||
// already set it attempts to set their values from the given env file. Env
|
||||
// files may have KEY=VALUE lines where the environment variable names are
|
||||
// in UPPERCASE, prefixed by the given PREFIX, and dashes are replaced by
|
||||
// underscores. For example, if prefix=PREFIX, some-flag is named
|
||||
// PREFIX_SOME_FLAG.
|
||||
// Comment lines are skipped, but more complex env file parsing is not
|
||||
// performed.
|
||||
func SetFlagsFromEnvFile(fs *flag.FlagSet, prefix string, path string) (err error) {
|
||||
alreadySet := make(map[string]bool)
|
||||
fs.Visit(func(f *flag.Flag) {
|
||||
alreadySet[f.Name] = true
|
||||
})
|
||||
envs, err := parseEnvFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fs.VisitAll(func(f *flag.Flag) {
|
||||
if !alreadySet[f.Name] {
|
||||
key := prefix + "_" + strings.ToUpper(strings.Replace(f.Name, "-", "_", -1))
|
||||
val := envs[key]
|
||||
if val != "" {
|
||||
if serr := fs.Set(f.Name, val); serr != nil {
|
||||
err = fmt.Errorf("invalid value %q for %s: %v", val, key, serr)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func parseEnvFile(path string) (map[string]string, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
envs := make(map[string]string)
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
token := scanner.Text()
|
||||
if !skipLine(token) {
|
||||
key, val, err := parseLine(token)
|
||||
if err == nil {
|
||||
envs[key] = val
|
||||
}
|
||||
}
|
||||
}
|
||||
return envs, nil
|
||||
}
|
||||
|
||||
func skipLine(line string) bool {
|
||||
return len(line) == 0 || strings.HasPrefix(line, "#")
|
||||
}
|
||||
|
||||
func parseLine(line string) (key string, val string, err error) {
|
||||
trimmed := strings.TrimSpace(line)
|
||||
pair := strings.SplitN(trimmed, "=", 2)
|
||||
if len(pair) != 2 {
|
||||
err = fmt.Errorf("invalid KEY=value line: %q", line)
|
||||
return
|
||||
}
|
||||
key = strings.TrimSpace(pair[0])
|
||||
val = strings.TrimSpace(pair[1])
|
||||
return
|
||||
}
|
||||
64
vendor/github.com/coreos/pkg/flagutil/env_test.go
generated
vendored
Normal file
64
vendor/github.com/coreos/pkg/flagutil/env_test.go
generated
vendored
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSetFlagsFromEnv(t *testing.T) {
|
||||
fs := flag.NewFlagSet("testing", flag.ExitOnError)
|
||||
fs.String("a", "", "")
|
||||
fs.String("b", "", "")
|
||||
fs.String("c", "", "")
|
||||
fs.Parse([]string{})
|
||||
|
||||
os.Clearenv()
|
||||
// flags should be settable using env vars
|
||||
os.Setenv("MYPROJ_A", "foo")
|
||||
// and command-line flags
|
||||
if err := fs.Set("b", "bar"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// command-line flags take precedence over env vars
|
||||
os.Setenv("MYPROJ_C", "woof")
|
||||
if err := fs.Set("c", "quack"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// first verify that flags are as expected before reading the env
|
||||
for f, want := range map[string]string{
|
||||
"a": "",
|
||||
"b": "bar",
|
||||
"c": "quack",
|
||||
} {
|
||||
if got := fs.Lookup(f).Value.String(); got != want {
|
||||
t.Fatalf("flag %q=%q, want %q", f, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// now read the env and verify flags were updated as expected
|
||||
err := SetFlagsFromEnv(fs, "MYPROJ")
|
||||
if err != nil {
|
||||
t.Errorf("err=%v, want nil", err)
|
||||
}
|
||||
for f, want := range map[string]string{
|
||||
"a": "foo",
|
||||
"b": "bar",
|
||||
"c": "quack",
|
||||
} {
|
||||
if got := fs.Lookup(f).Value.String(); got != want {
|
||||
t.Errorf("flag %q=%q, want %q", f, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetFlagsFromEnvBad(t *testing.T) {
|
||||
// now verify that an error is propagated
|
||||
fs := flag.NewFlagSet("testing", flag.ExitOnError)
|
||||
fs.Int("x", 0, "")
|
||||
os.Setenv("MYPROJ_X", "not_a_number")
|
||||
if err := SetFlagsFromEnv(fs, "MYPROJ"); err == nil {
|
||||
t.Errorf("err=nil, want != nil")
|
||||
}
|
||||
}
|
||||
107
vendor/github.com/coreos/pkg/flagutil/file_env_test.go
generated
vendored
Normal file
107
vendor/github.com/coreos/pkg/flagutil/file_env_test.go
generated
vendored
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var envFile = `
|
||||
# some secret env vars
|
||||
MYPROJ_A=foo
|
||||
MYPROJ_C=woof
|
||||
`
|
||||
|
||||
func TestSetFlagsFromEnvFile(t *testing.T) {
|
||||
fs := flag.NewFlagSet("testing", flag.ExitOnError)
|
||||
fs.String("a", "", "")
|
||||
fs.String("b", "", "")
|
||||
fs.String("c", "", "")
|
||||
fs.Parse([]string{})
|
||||
|
||||
// add command-line flags
|
||||
if err := fs.Set("b", "bar"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := fs.Set("c", "quack"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// first verify that flags are as expected before reading the env
|
||||
for f, want := range map[string]string{
|
||||
"a": "",
|
||||
"b": "bar",
|
||||
"c": "quack",
|
||||
} {
|
||||
if got := fs.Lookup(f).Value.String(); got != want {
|
||||
t.Fatalf("flag %q=%q, want %q", f, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
file, err := ioutil.TempFile("", "env-file")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(file.Name())
|
||||
file.Write([]byte(envFile))
|
||||
|
||||
// read env file and verify flags were updated as expected
|
||||
err = SetFlagsFromEnvFile(fs, "MYPROJ", file.Name())
|
||||
if err != nil {
|
||||
t.Errorf("err=%v, want nil", err)
|
||||
}
|
||||
for f, want := range map[string]string{
|
||||
"a": "foo",
|
||||
"b": "bar",
|
||||
"c": "quack",
|
||||
} {
|
||||
if got := fs.Lookup(f).Value.String(); got != want {
|
||||
t.Errorf("flag %q=%q, want %q", f, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetFlagsFromEnvFile_FlagSetError(t *testing.T) {
|
||||
// now verify that an error is propagated
|
||||
fs := flag.NewFlagSet("testing", flag.ExitOnError)
|
||||
fs.Int("x", 0, "")
|
||||
file, err := ioutil.TempFile("", "env-file")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(file.Name())
|
||||
file.Write([]byte("MYPROJ_X=not_a_number"))
|
||||
if err := SetFlagsFromEnvFile(fs, "MYPROJ", file.Name()); err == nil {
|
||||
t.Errorf("err=nil, want != nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseLine(t *testing.T) {
|
||||
cases := []struct {
|
||||
line string
|
||||
expectedKey string
|
||||
expectedVal string
|
||||
nilErr bool
|
||||
}{
|
||||
{"key=value", "key", "value", true},
|
||||
{" key = value ", "key", "value", true},
|
||||
{"key='#gopher' #blah", "key", "'#gopher' #blah", true},
|
||||
// invalid
|
||||
{"key:value", "", "", false},
|
||||
{"keyvalue", "", "", false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
key, val, err := parseLine(c.line)
|
||||
if (err == nil) != c.nilErr {
|
||||
if c.nilErr {
|
||||
t.Errorf("got %s, want err=nil", err)
|
||||
} else {
|
||||
t.Errorf("got err=nil, want err!=nil")
|
||||
}
|
||||
}
|
||||
if c.expectedKey != key || c.expectedVal != val {
|
||||
t.Errorf("got %q=%q, want %q=%q", key, val, c.expectedKey, c.expectedVal)
|
||||
}
|
||||
}
|
||||
}
|
||||
44
vendor/github.com/coreos/pkg/flagutil/types.go
generated
vendored
Normal file
44
vendor/github.com/coreos/pkg/flagutil/types.go
generated
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// IPv4Flag parses a string into a net.IP after asserting that it
|
||||
// is an IPv4 address. This type implements the flag.Value interface.
|
||||
type IPv4Flag struct {
|
||||
val net.IP
|
||||
}
|
||||
|
||||
func (f *IPv4Flag) IP() net.IP {
|
||||
return f.val
|
||||
}
|
||||
|
||||
func (f *IPv4Flag) Set(v string) error {
|
||||
ip := net.ParseIP(v)
|
||||
if ip == nil || ip.To4() == nil {
|
||||
return errors.New("not an IPv4 address")
|
||||
}
|
||||
f.val = ip
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *IPv4Flag) String() string {
|
||||
return f.val.String()
|
||||
}
|
||||
|
||||
// StringSliceFlag parses a comma-delimited list of strings into
|
||||
// a []string. This type implements the flag.Value interface.
|
||||
type StringSliceFlag []string
|
||||
|
||||
func (ss *StringSliceFlag) String() string {
|
||||
return fmt.Sprintf("%+v", *ss)
|
||||
}
|
||||
|
||||
func (ss *StringSliceFlag) Set(v string) error {
|
||||
*ss = strings.Split(v, ",")
|
||||
return nil
|
||||
}
|
||||
57
vendor/github.com/coreos/pkg/flagutil/types_test.go
generated
vendored
Normal file
57
vendor/github.com/coreos/pkg/flagutil/types_test.go
generated
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package flagutil
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestIPv4FlagSetInvalidArgument(t *testing.T) {
|
||||
tests := []string{
|
||||
"",
|
||||
"foo",
|
||||
"::",
|
||||
"127.0.0.1:4328",
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
var f IPv4Flag
|
||||
if err := f.Set(tt); err == nil {
|
||||
t.Errorf("case %d: expected non-nil error", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIPv4FlagSetValidArgument(t *testing.T) {
|
||||
tests := []string{
|
||||
"127.0.0.1",
|
||||
"0.0.0.0",
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
var f IPv4Flag
|
||||
if err := f.Set(tt); err != nil {
|
||||
t.Errorf("case %d: err=%v", i, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStringSliceFlag(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
want []string
|
||||
}{
|
||||
{input: "", want: []string{""}},
|
||||
{input: "foo", want: []string{"foo"}},
|
||||
{input: "foo,bar", want: []string{"foo", "bar"}},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
var f StringSliceFlag
|
||||
if err := f.Set(tt.input); err != nil {
|
||||
t.Errorf("case %d: err=%v", i, err)
|
||||
}
|
||||
if !reflect.DeepEqual(tt.want, []string(f)) {
|
||||
t.Errorf("case %d: want=%v got=%v", i, tt.want, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue