Copy disabled (too large)
Download .txt
Showing preview only (26,516K chars total). Download the full file to get everything.
Repository: kelseyhightower/confd
Branch: master
Commit: 919444eb6cf7
Files: 1542
Total size: 25.0 MB
Directory structure:
gitextract_r312ub76/
├── .dockerignore
├── .gitignore
├── .travis.yml
├── CHANGELOG
├── CONTRIBUTING.md
├── Dockerfile.build.alpine
├── LICENSE
├── MAINTAINERS
├── Makefile
├── README.md
├── backends/
│ ├── client.go
│ ├── config.go
│ ├── consul/
│ │ └── client.go
│ ├── dynamodb/
│ │ └── client.go
│ ├── env/
│ │ └── client.go
│ ├── etcd/
│ │ └── client.go
│ ├── etcdv3/
│ │ └── client.go
│ ├── file/
│ │ └── client.go
│ ├── rancher/
│ │ └── client.go
│ ├── redis/
│ │ └── client.go
│ ├── ssm/
│ │ └── client.go
│ ├── vault/
│ │ └── client.go
│ └── zookeeper/
│ └── client.go
├── confd.go
├── config.go
├── config_test.go
├── contrib/
│ ├── etcd/
│ │ └── Procfile
│ └── generate-changelog.sh
├── docs/
│ ├── command-line-flags.md
│ ├── configuration-guide.md
│ ├── data_encryption.md
│ ├── dns-srv-records.md
│ ├── installation.md
│ ├── logging.md
│ ├── noop-mode.md
│ ├── quick-start-guide.md
│ ├── release-checklist.md
│ ├── template-resources.md
│ ├── templates.md
│ ├── tomcat-sample.md
│ └── vault-kubernetes-auth.md
├── go.mod
├── go.sum
├── integration/
│ ├── confdir/
│ │ ├── conf.d/
│ │ │ ├── basic.toml
│ │ │ ├── exists.toml
│ │ │ ├── iteration.toml
│ │ │ ├── manykeys.toml
│ │ │ └── nested.toml
│ │ └── templates/
│ │ ├── basic.conf.tmpl
│ │ ├── exists-test.conf.tmpl
│ │ ├── iteration.conf.tmpl
│ │ └── nested.conf.tmpl
│ ├── consul/
│ │ └── test.sh
│ ├── dynamodb/
│ │ └── test.sh
│ ├── env/
│ │ └── test.sh
│ ├── etcd/
│ │ └── test.sh
│ ├── etcdv3/
│ │ └── test.sh
│ ├── expect/
│ │ ├── basic.conf
│ │ ├── check.sh
│ │ ├── exists-test.conf
│ │ └── iteration.conf
│ ├── file/
│ │ └── test.sh
│ ├── rancher/
│ │ └── test.sh
│ ├── redis/
│ │ └── test.sh
│ ├── ssm/
│ │ ├── main.go
│ │ └── test.sh
│ ├── vault/
│ │ └── test.sh
│ ├── vault-path/
│ │ └── test.sh
│ └── zookeeper/
│ ├── main.go
│ ├── test.json
│ ├── test.sh
│ └── zoo.cfg
├── log/
│ └── log.go
├── resource/
│ └── template/
│ ├── processor.go
│ ├── resource.go
│ ├── resource_test.go
│ ├── template_funcs.go
│ └── template_test.go
├── util/
│ ├── filestat_posix.go
│ ├── filestat_windows.go
│ ├── util.go
│ └── util_test.go
├── vendor/
│ ├── github.com/
│ │ ├── BurntSushi/
│ │ │ └── toml/
│ │ │ ├── .gitignore
│ │ │ ├── COPYING
│ │ │ ├── README.md
│ │ │ ├── decode.go
│ │ │ ├── decode_go116.go
│ │ │ ├── deprecated.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── error.go
│ │ │ ├── internal/
│ │ │ │ └── tz.go
│ │ │ ├── lex.go
│ │ │ ├── meta.go
│ │ │ ├── parse.go
│ │ │ ├── type_fields.go
│ │ │ └── type_toml.go
│ │ ├── armon/
│ │ │ └── go-metrics/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── const_unix.go
│ │ │ ├── const_windows.go
│ │ │ ├── inmem.go
│ │ │ ├── inmem_endpoint.go
│ │ │ ├── inmem_signal.go
│ │ │ ├── metrics.go
│ │ │ ├── sink.go
│ │ │ ├── start.go
│ │ │ ├── statsd.go
│ │ │ └── statsite.go
│ │ ├── aws/
│ │ │ └── aws-sdk-go/
│ │ │ ├── LICENSE.txt
│ │ │ ├── NOTICE.txt
│ │ │ ├── aws/
│ │ │ │ ├── auth/
│ │ │ │ │ └── bearer/
│ │ │ │ │ └── token.go
│ │ │ │ ├── awserr/
│ │ │ │ │ ├── error.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── awsutil/
│ │ │ │ │ ├── copy.go
│ │ │ │ │ ├── equal.go
│ │ │ │ │ ├── path_value.go
│ │ │ │ │ ├── prettify.go
│ │ │ │ │ └── string_value.go
│ │ │ │ ├── client/
│ │ │ │ │ ├── client.go
│ │ │ │ │ ├── default_retryer.go
│ │ │ │ │ ├── logger.go
│ │ │ │ │ ├── metadata/
│ │ │ │ │ │ └── client_info.go
│ │ │ │ │ └── no_op_retryer.go
│ │ │ │ ├── config.go
│ │ │ │ ├── context_1_5.go
│ │ │ │ ├── context_1_9.go
│ │ │ │ ├── context_background_1_5.go
│ │ │ │ ├── context_background_1_7.go
│ │ │ │ ├── context_sleep.go
│ │ │ │ ├── convert_types.go
│ │ │ │ ├── corehandlers/
│ │ │ │ │ ├── awsinternal.go
│ │ │ │ │ ├── handlers.go
│ │ │ │ │ ├── param_validator.go
│ │ │ │ │ └── user_agent.go
│ │ │ │ ├── credentials/
│ │ │ │ │ ├── chain_provider.go
│ │ │ │ │ ├── context_background_go1.5.go
│ │ │ │ │ ├── context_background_go1.7.go
│ │ │ │ │ ├── context_go1.5.go
│ │ │ │ │ ├── context_go1.9.go
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── ec2rolecreds/
│ │ │ │ │ │ └── ec2_role_provider.go
│ │ │ │ │ ├── endpointcreds/
│ │ │ │ │ │ └── provider.go
│ │ │ │ │ ├── env_provider.go
│ │ │ │ │ ├── example.ini
│ │ │ │ │ ├── processcreds/
│ │ │ │ │ │ └── provider.go
│ │ │ │ │ ├── shared_credentials_provider.go
│ │ │ │ │ ├── ssocreds/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── os.go
│ │ │ │ │ │ ├── os_windows.go
│ │ │ │ │ │ ├── provider.go
│ │ │ │ │ │ ├── sso_cached_token.go
│ │ │ │ │ │ └── token_provider.go
│ │ │ │ │ ├── static_provider.go
│ │ │ │ │ └── stscreds/
│ │ │ │ │ ├── assume_role_provider.go
│ │ │ │ │ └── web_identity_provider.go
│ │ │ │ ├── crr/
│ │ │ │ │ ├── cache.go
│ │ │ │ │ ├── endpoint.go
│ │ │ │ │ ├── sync_map.go
│ │ │ │ │ └── sync_map_1_8.go
│ │ │ │ ├── csm/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── enable.go
│ │ │ │ │ ├── metric.go
│ │ │ │ │ ├── metric_chan.go
│ │ │ │ │ ├── metric_exception.go
│ │ │ │ │ └── reporter.go
│ │ │ │ ├── defaults/
│ │ │ │ │ ├── defaults.go
│ │ │ │ │ └── shared_config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── ec2metadata/
│ │ │ │ │ ├── api.go
│ │ │ │ │ ├── service.go
│ │ │ │ │ └── token_provider.go
│ │ │ │ ├── endpoints/
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── defaults.go
│ │ │ │ │ ├── dep_service_ids.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── endpoints.go
│ │ │ │ │ ├── legacy_regions.go
│ │ │ │ │ ├── v3model.go
│ │ │ │ │ └── v3model_codegen.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── jsonvalue.go
│ │ │ │ ├── logger.go
│ │ │ │ ├── request/
│ │ │ │ │ ├── connection_reset_error.go
│ │ │ │ │ ├── handlers.go
│ │ │ │ │ ├── http_request.go
│ │ │ │ │ ├── offset_reader.go
│ │ │ │ │ ├── request.go
│ │ │ │ │ ├── request_1_7.go
│ │ │ │ │ ├── request_1_8.go
│ │ │ │ │ ├── request_context.go
│ │ │ │ │ ├── request_context_1_6.go
│ │ │ │ │ ├── request_pagination.go
│ │ │ │ │ ├── retryer.go
│ │ │ │ │ ├── timeout_read_closer.go
│ │ │ │ │ ├── validation.go
│ │ │ │ │ └── waiter.go
│ │ │ │ ├── session/
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── custom_transport.go
│ │ │ │ │ ├── custom_transport_go1.12.go
│ │ │ │ │ ├── custom_transport_go1.5.go
│ │ │ │ │ ├── custom_transport_go1.6.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── env_config.go
│ │ │ │ │ ├── session.go
│ │ │ │ │ └── shared_config.go
│ │ │ │ ├── signer/
│ │ │ │ │ └── v4/
│ │ │ │ │ ├── header_rules.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── request_context_go1.5.go
│ │ │ │ │ ├── request_context_go1.7.go
│ │ │ │ │ ├── stream.go
│ │ │ │ │ ├── uri_path.go
│ │ │ │ │ └── v4.go
│ │ │ │ ├── types.go
│ │ │ │ ├── url.go
│ │ │ │ ├── url_1_7.go
│ │ │ │ └── version.go
│ │ │ ├── internal/
│ │ │ │ ├── context/
│ │ │ │ │ └── background_go1.5.go
│ │ │ │ ├── ini/
│ │ │ │ │ ├── ast.go
│ │ │ │ │ ├── comma_token.go
│ │ │ │ │ ├── comment_token.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── empty_token.go
│ │ │ │ │ ├── expression.go
│ │ │ │ │ ├── fuzz.go
│ │ │ │ │ ├── ini.go
│ │ │ │ │ ├── ini_lexer.go
│ │ │ │ │ ├── ini_parser.go
│ │ │ │ │ ├── literal_tokens.go
│ │ │ │ │ ├── newline_token.go
│ │ │ │ │ ├── number_helper.go
│ │ │ │ │ ├── op_tokens.go
│ │ │ │ │ ├── parse_error.go
│ │ │ │ │ ├── parse_stack.go
│ │ │ │ │ ├── sep_tokens.go
│ │ │ │ │ ├── skipper.go
│ │ │ │ │ ├── statement.go
│ │ │ │ │ ├── value_util.go
│ │ │ │ │ ├── visitor.go
│ │ │ │ │ ├── walker.go
│ │ │ │ │ └── ws_token.go
│ │ │ │ ├── sdkio/
│ │ │ │ │ ├── byte.go
│ │ │ │ │ ├── io_go1.6.go
│ │ │ │ │ └── io_go1.7.go
│ │ │ │ ├── sdkmath/
│ │ │ │ │ ├── floor.go
│ │ │ │ │ └── floor_go1.9.go
│ │ │ │ ├── sdkrand/
│ │ │ │ │ ├── locked_source.go
│ │ │ │ │ ├── read.go
│ │ │ │ │ └── read_1_5.go
│ │ │ │ ├── sdkuri/
│ │ │ │ │ └── path.go
│ │ │ │ ├── shareddefaults/
│ │ │ │ │ ├── ecs_container.go
│ │ │ │ │ ├── shared_config.go
│ │ │ │ │ ├── shared_config_resolve_home.go
│ │ │ │ │ └── shared_config_resolve_home_go1.12.go
│ │ │ │ ├── strings/
│ │ │ │ │ └── strings.go
│ │ │ │ └── sync/
│ │ │ │ └── singleflight/
│ │ │ │ ├── LICENSE
│ │ │ │ └── singleflight.go
│ │ │ ├── private/
│ │ │ │ └── protocol/
│ │ │ │ ├── host.go
│ │ │ │ ├── host_prefix.go
│ │ │ │ ├── idempotency.go
│ │ │ │ ├── json/
│ │ │ │ │ └── jsonutil/
│ │ │ │ │ ├── build.go
│ │ │ │ │ └── unmarshal.go
│ │ │ │ ├── jsonrpc/
│ │ │ │ │ ├── jsonrpc.go
│ │ │ │ │ └── unmarshal_error.go
│ │ │ │ ├── jsonvalue.go
│ │ │ │ ├── payload.go
│ │ │ │ ├── protocol.go
│ │ │ │ ├── query/
│ │ │ │ │ ├── build.go
│ │ │ │ │ ├── queryutil/
│ │ │ │ │ │ └── queryutil.go
│ │ │ │ │ ├── unmarshal.go
│ │ │ │ │ └── unmarshal_error.go
│ │ │ │ ├── rest/
│ │ │ │ │ ├── build.go
│ │ │ │ │ ├── payload.go
│ │ │ │ │ └── unmarshal.go
│ │ │ │ ├── restjson/
│ │ │ │ │ ├── restjson.go
│ │ │ │ │ └── unmarshal_error.go
│ │ │ │ ├── timestamp.go
│ │ │ │ ├── unmarshal.go
│ │ │ │ ├── unmarshal_error.go
│ │ │ │ └── xml/
│ │ │ │ └── xmlutil/
│ │ │ │ ├── build.go
│ │ │ │ ├── sort.go
│ │ │ │ ├── unmarshal.go
│ │ │ │ └── xml_to_struct.go
│ │ │ └── service/
│ │ │ ├── dynamodb/
│ │ │ │ ├── api.go
│ │ │ │ ├── customizations.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── doc_custom.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── service.go
│ │ │ │ └── waiters.go
│ │ │ ├── ssm/
│ │ │ │ ├── api.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── service.go
│ │ │ │ └── waiters.go
│ │ │ ├── sso/
│ │ │ │ ├── api.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── service.go
│ │ │ │ └── ssoiface/
│ │ │ │ └── interface.go
│ │ │ ├── ssooidc/
│ │ │ │ ├── api.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ └── service.go
│ │ │ └── sts/
│ │ │ ├── api.go
│ │ │ ├── customizations.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── service.go
│ │ │ └── stsiface/
│ │ │ └── interface.go
│ │ ├── cenkalti/
│ │ │ └── backoff/
│ │ │ └── v3/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── backoff.go
│ │ │ ├── context.go
│ │ │ ├── exponential.go
│ │ │ ├── retry.go
│ │ │ ├── ticker.go
│ │ │ ├── timer.go
│ │ │ └── tries.go
│ │ ├── coreos/
│ │ │ ├── go-semver/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── NOTICE
│ │ │ │ └── semver/
│ │ │ │ ├── semver.go
│ │ │ │ └── sort.go
│ │ │ └── go-systemd/
│ │ │ └── v22/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── journal/
│ │ │ ├── journal.go
│ │ │ ├── journal_unix.go
│ │ │ └── journal_windows.go
│ │ ├── fatih/
│ │ │ └── color/
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── color.go
│ │ │ ├── color_windows.go
│ │ │ └── doc.go
│ │ ├── fsnotify/
│ │ │ └── fsnotify/
│ │ │ ├── .cirrus.yml
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .mailmap
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── backend_fen.go
│ │ │ ├── backend_inotify.go
│ │ │ ├── backend_kqueue.go
│ │ │ ├── backend_other.go
│ │ │ ├── backend_windows.go
│ │ │ ├── fsnotify.go
│ │ │ ├── mkdoc.zsh
│ │ │ ├── system_bsd.go
│ │ │ └── system_darwin.go
│ │ ├── garyburd/
│ │ │ └── redigo/
│ │ │ ├── LICENSE
│ │ │ ├── internal/
│ │ │ │ └── commandinfo.go
│ │ │ └── redis/
│ │ │ ├── conn.go
│ │ │ ├── doc.go
│ │ │ ├── go16.go
│ │ │ ├── go17.go
│ │ │ ├── go18.go
│ │ │ ├── log.go
│ │ │ ├── pool.go
│ │ │ ├── pool17.go
│ │ │ ├── pubsub.go
│ │ │ ├── redis.go
│ │ │ ├── reply.go
│ │ │ ├── scan.go
│ │ │ └── script.go
│ │ ├── go-jose/
│ │ │ └── go-jose/
│ │ │ └── v3/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .travis.yml
│ │ │ ├── BUG-BOUNTY.md
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── asymmetric.go
│ │ │ ├── cipher/
│ │ │ │ ├── cbc_hmac.go
│ │ │ │ ├── concat_kdf.go
│ │ │ │ ├── ecdh_es.go
│ │ │ │ └── key_wrap.go
│ │ │ ├── crypter.go
│ │ │ ├── doc.go
│ │ │ ├── encoding.go
│ │ │ ├── json/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── indent.go
│ │ │ │ ├── scanner.go
│ │ │ │ ├── stream.go
│ │ │ │ └── tags.go
│ │ │ ├── jwe.go
│ │ │ ├── jwk.go
│ │ │ ├── jws.go
│ │ │ ├── jwt/
│ │ │ │ ├── builder.go
│ │ │ │ ├── claims.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── jwt.go
│ │ │ │ └── validation.go
│ │ │ ├── opaque.go
│ │ │ ├── shared.go
│ │ │ ├── signing.go
│ │ │ └── symmetric.go
│ │ ├── gogo/
│ │ │ └── protobuf/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── gogoproto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── doc.go
│ │ │ │ ├── gogo.pb.go
│ │ │ │ ├── gogo.pb.golden
│ │ │ │ ├── gogo.proto
│ │ │ │ └── helper.go
│ │ │ ├── proto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── clone.go
│ │ │ │ ├── custom_gogo.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── deprecated.go
│ │ │ │ ├── discard.go
│ │ │ │ ├── duration.go
│ │ │ │ ├── duration_gogo.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── encode_gogo.go
│ │ │ │ ├── equal.go
│ │ │ │ ├── extensions.go
│ │ │ │ ├── extensions_gogo.go
│ │ │ │ ├── lib.go
│ │ │ │ ├── lib_gogo.go
│ │ │ │ ├── message_set.go
│ │ │ │ ├── pointer_reflect.go
│ │ │ │ ├── pointer_reflect_gogo.go
│ │ │ │ ├── pointer_unsafe.go
│ │ │ │ ├── pointer_unsafe_gogo.go
│ │ │ │ ├── properties.go
│ │ │ │ ├── properties_gogo.go
│ │ │ │ ├── skip_gogo.go
│ │ │ │ ├── table_marshal.go
│ │ │ │ ├── table_marshal_gogo.go
│ │ │ │ ├── table_merge.go
│ │ │ │ ├── table_unmarshal.go
│ │ │ │ ├── table_unmarshal_gogo.go
│ │ │ │ ├── text.go
│ │ │ │ ├── text_gogo.go
│ │ │ │ ├── text_parser.go
│ │ │ │ ├── timestamp.go
│ │ │ │ ├── timestamp_gogo.go
│ │ │ │ ├── wrappers.go
│ │ │ │ └── wrappers_gogo.go
│ │ │ └── protoc-gen-gogo/
│ │ │ └── descriptor/
│ │ │ ├── Makefile
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor.pb.go
│ │ │ ├── descriptor_gostring.gen.go
│ │ │ └── helper.go
│ │ ├── golang/
│ │ │ └── protobuf/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── jsonpb/
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ └── json.go
│ │ │ ├── proto/
│ │ │ │ ├── buffer.go
│ │ │ │ ├── defaults.go
│ │ │ │ ├── deprecated.go
│ │ │ │ ├── discard.go
│ │ │ │ ├── extensions.go
│ │ │ │ ├── properties.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── text_decode.go
│ │ │ │ ├── text_encode.go
│ │ │ │ ├── wire.go
│ │ │ │ └── wrappers.go
│ │ │ └── ptypes/
│ │ │ ├── any/
│ │ │ │ └── any.pb.go
│ │ │ ├── any.go
│ │ │ ├── doc.go
│ │ │ ├── duration/
│ │ │ │ └── duration.pb.go
│ │ │ ├── duration.go
│ │ │ ├── timestamp/
│ │ │ │ └── timestamp.pb.go
│ │ │ └── timestamp.go
│ │ ├── hashicorp/
│ │ │ ├── consul/
│ │ │ │ └── api/
│ │ │ │ ├── .copywrite.hcl
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── acl.go
│ │ │ │ ├── agent.go
│ │ │ │ ├── api.go
│ │ │ │ ├── catalog.go
│ │ │ │ ├── config_entry.go
│ │ │ │ ├── config_entry_discoverychain.go
│ │ │ │ ├── config_entry_exports.go
│ │ │ │ ├── config_entry_gateways.go
│ │ │ │ ├── config_entry_inline_certificate.go
│ │ │ │ ├── config_entry_intentions.go
│ │ │ │ ├── config_entry_jwt_provider.go
│ │ │ │ ├── config_entry_mesh.go
│ │ │ │ ├── config_entry_rate_limit_ip.go
│ │ │ │ ├── config_entry_routes.go
│ │ │ │ ├── config_entry_sameness_group.go
│ │ │ │ ├── config_entry_status.go
│ │ │ │ ├── connect.go
│ │ │ │ ├── connect_ca.go
│ │ │ │ ├── connect_intention.go
│ │ │ │ ├── coordinate.go
│ │ │ │ ├── debug.go
│ │ │ │ ├── discovery_chain.go
│ │ │ │ ├── event.go
│ │ │ │ ├── health.go
│ │ │ │ ├── internal.go
│ │ │ │ ├── kv.go
│ │ │ │ ├── lock.go
│ │ │ │ ├── namespace.go
│ │ │ │ ├── operator.go
│ │ │ │ ├── operator_area.go
│ │ │ │ ├── operator_audit.go
│ │ │ │ ├── operator_autopilot.go
│ │ │ │ ├── operator_keyring.go
│ │ │ │ ├── operator_license.go
│ │ │ │ ├── operator_raft.go
│ │ │ │ ├── operator_segment.go
│ │ │ │ ├── operator_usage.go
│ │ │ │ ├── partition.go
│ │ │ │ ├── peering.go
│ │ │ │ ├── prepared_query.go
│ │ │ │ ├── raw.go
│ │ │ │ ├── semaphore.go
│ │ │ │ ├── session.go
│ │ │ │ ├── snapshot.go
│ │ │ │ ├── status.go
│ │ │ │ └── txn.go
│ │ │ ├── errwrap/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ └── errwrap.go
│ │ │ ├── go-cleanhttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── cleanhttp.go
│ │ │ │ ├── doc.go
│ │ │ │ └── handlers.go
│ │ │ ├── go-hclog/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── colorize_unix.go
│ │ │ │ ├── colorize_windows.go
│ │ │ │ ├── context.go
│ │ │ │ ├── exclude.go
│ │ │ │ ├── global.go
│ │ │ │ ├── interceptlogger.go
│ │ │ │ ├── intlogger.go
│ │ │ │ ├── logger.go
│ │ │ │ ├── nulllogger.go
│ │ │ │ ├── stacktrace.go
│ │ │ │ ├── stdlog.go
│ │ │ │ └── writer.go
│ │ │ ├── go-immutable-radix/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── edges.go
│ │ │ │ ├── iradix.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── node.go
│ │ │ │ ├── raw_iter.go
│ │ │ │ └── reverse_iter.go
│ │ │ ├── go-multierror/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── append.go
│ │ │ │ ├── flatten.go
│ │ │ │ ├── format.go
│ │ │ │ ├── group.go
│ │ │ │ ├── multierror.go
│ │ │ │ ├── prefix.go
│ │ │ │ └── sort.go
│ │ │ ├── go-retryablehttp/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CODEOWNERS
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── client.go
│ │ │ │ └── roundtripper.go
│ │ │ ├── go-rootcerts/
│ │ │ │ ├── .travis.yml
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── doc.go
│ │ │ │ ├── rootcerts.go
│ │ │ │ ├── rootcerts_base.go
│ │ │ │ └── rootcerts_darwin.go
│ │ │ ├── go-secure-stdlib/
│ │ │ │ ├── parseutil/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── parsepath.go
│ │ │ │ │ └── parseutil.go
│ │ │ │ └── strutil/
│ │ │ │ ├── LICENSE
│ │ │ │ └── strutil.go
│ │ │ ├── go-sockaddr/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── GNUmakefile
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── doc.go
│ │ │ │ ├── ifaddr.go
│ │ │ │ ├── ifaddrs.go
│ │ │ │ ├── ifattr.go
│ │ │ │ ├── ipaddr.go
│ │ │ │ ├── ipaddrs.go
│ │ │ │ ├── ipv4addr.go
│ │ │ │ ├── ipv6addr.go
│ │ │ │ ├── rfc.go
│ │ │ │ ├── route_info.go
│ │ │ │ ├── route_info_android.go
│ │ │ │ ├── route_info_bsd.go
│ │ │ │ ├── route_info_default.go
│ │ │ │ ├── route_info_linux.go
│ │ │ │ ├── route_info_solaris.go
│ │ │ │ ├── route_info_test_windows.go
│ │ │ │ ├── route_info_windows.go
│ │ │ │ ├── sockaddr.go
│ │ │ │ ├── sockaddrs.go
│ │ │ │ └── unixsock.go
│ │ │ ├── golang-lru/
│ │ │ │ ├── LICENSE
│ │ │ │ └── simplelru/
│ │ │ │ ├── lru.go
│ │ │ │ └── lru_interface.go
│ │ │ ├── hcl/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .travis.yml
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── appveyor.yml
│ │ │ │ ├── decoder.go
│ │ │ │ ├── hcl/
│ │ │ │ │ ├── ast/
│ │ │ │ │ │ ├── ast.go
│ │ │ │ │ │ └── walk.go
│ │ │ │ │ ├── parser/
│ │ │ │ │ │ ├── error.go
│ │ │ │ │ │ └── parser.go
│ │ │ │ │ ├── scanner/
│ │ │ │ │ │ └── scanner.go
│ │ │ │ │ ├── strconv/
│ │ │ │ │ │ └── quote.go
│ │ │ │ │ └── token/
│ │ │ │ │ ├── position.go
│ │ │ │ │ └── token.go
│ │ │ │ ├── hcl.go
│ │ │ │ ├── json/
│ │ │ │ │ ├── parser/
│ │ │ │ │ │ ├── flatten.go
│ │ │ │ │ │ └── parser.go
│ │ │ │ │ ├── scanner/
│ │ │ │ │ │ └── scanner.go
│ │ │ │ │ └── token/
│ │ │ │ │ ├── position.go
│ │ │ │ │ └── token.go
│ │ │ │ ├── lex.go
│ │ │ │ └── parse.go
│ │ │ ├── serf/
│ │ │ │ ├── LICENSE
│ │ │ │ └── coordinate/
│ │ │ │ ├── client.go
│ │ │ │ ├── config.go
│ │ │ │ ├── coordinate.go
│ │ │ │ └── phantom.go
│ │ │ └── vault/
│ │ │ └── api/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── auth.go
│ │ │ ├── auth_token.go
│ │ │ ├── client.go
│ │ │ ├── help.go
│ │ │ ├── kv.go
│ │ │ ├── kv_v1.go
│ │ │ ├── kv_v2.go
│ │ │ ├── lifetime_watcher.go
│ │ │ ├── logical.go
│ │ │ ├── output_policy.go
│ │ │ ├── output_string.go
│ │ │ ├── plugin_helpers.go
│ │ │ ├── plugin_runtime_types.go
│ │ │ ├── plugin_types.go
│ │ │ ├── replication_status.go
│ │ │ ├── request.go
│ │ │ ├── response.go
│ │ │ ├── secret.go
│ │ │ ├── ssh.go
│ │ │ ├── ssh_agent.go
│ │ │ ├── sudo_paths.go
│ │ │ ├── sys.go
│ │ │ ├── sys_audit.go
│ │ │ ├── sys_auth.go
│ │ │ ├── sys_capabilities.go
│ │ │ ├── sys_config_cors.go
│ │ │ ├── sys_generate_root.go
│ │ │ ├── sys_hastatus.go
│ │ │ ├── sys_health.go
│ │ │ ├── sys_init.go
│ │ │ ├── sys_leader.go
│ │ │ ├── sys_leases.go
│ │ │ ├── sys_mfa.go
│ │ │ ├── sys_monitor.go
│ │ │ ├── sys_mounts.go
│ │ │ ├── sys_plugins.go
│ │ │ ├── sys_plugins_runtimes.go
│ │ │ ├── sys_policy.go
│ │ │ ├── sys_raft.go
│ │ │ ├── sys_rekey.go
│ │ │ ├── sys_rotate.go
│ │ │ ├── sys_seal.go
│ │ │ └── sys_stepdown.go
│ │ ├── jmespath/
│ │ │ └── go-jmespath/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── api.go
│ │ │ ├── astnodetype_string.go
│ │ │ ├── functions.go
│ │ │ ├── interpreter.go
│ │ │ ├── lexer.go
│ │ │ ├── parser.go
│ │ │ ├── toktype_string.go
│ │ │ └── util.go
│ │ ├── kelseyhightower/
│ │ │ └── memkv/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── kvpair.go
│ │ │ └── store.go
│ │ ├── mattn/
│ │ │ ├── go-colorable/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── colorable_appengine.go
│ │ │ │ ├── colorable_others.go
│ │ │ │ ├── colorable_windows.go
│ │ │ │ ├── go.test.sh
│ │ │ │ └── noncolorable.go
│ │ │ └── go-isatty/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── go.test.sh
│ │ │ ├── isatty_bsd.go
│ │ │ ├── isatty_others.go
│ │ │ ├── isatty_plan9.go
│ │ │ ├── isatty_solaris.go
│ │ │ ├── isatty_tcgets.go
│ │ │ └── isatty_windows.go
│ │ ├── mitchellh/
│ │ │ ├── go-homedir/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ └── homedir.go
│ │ │ └── mapstructure/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── decode_hooks.go
│ │ │ ├── error.go
│ │ │ └── mapstructure.go
│ │ ├── ryanuber/
│ │ │ └── go-glob/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── glob.go
│ │ └── samuel/
│ │ └── go-zookeeper/
│ │ ├── LICENSE
│ │ └── zk/
│ │ ├── conn.go
│ │ ├── constants.go
│ │ ├── dnshostprovider.go
│ │ ├── flw.go
│ │ ├── lock.go
│ │ ├── structs.go
│ │ └── util.go
│ ├── go.etcd.io/
│ │ └── etcd/
│ │ ├── api/
│ │ │ └── v3/
│ │ │ ├── LICENSE
│ │ │ ├── authpb/
│ │ │ │ ├── auth.pb.go
│ │ │ │ └── auth.proto
│ │ │ ├── etcdserverpb/
│ │ │ │ ├── etcdserver.pb.go
│ │ │ │ ├── etcdserver.proto
│ │ │ │ ├── raft_internal.pb.go
│ │ │ │ ├── raft_internal.proto
│ │ │ │ ├── raft_internal_stringer.go
│ │ │ │ ├── rpc.pb.go
│ │ │ │ └── rpc.proto
│ │ │ ├── membershippb/
│ │ │ │ ├── membership.pb.go
│ │ │ │ └── membership.proto
│ │ │ ├── mvccpb/
│ │ │ │ ├── kv.pb.go
│ │ │ │ └── kv.proto
│ │ │ ├── v3rpc/
│ │ │ │ └── rpctypes/
│ │ │ │ ├── doc.go
│ │ │ │ ├── error.go
│ │ │ │ ├── md.go
│ │ │ │ └── metadatafields.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ └── client/
│ │ ├── pkg/
│ │ │ └── v3/
│ │ │ ├── LICENSE
│ │ │ ├── logutil/
│ │ │ │ ├── doc.go
│ │ │ │ ├── log_level.go
│ │ │ │ ├── zap.go
│ │ │ │ └── zap_journal.go
│ │ │ ├── systemd/
│ │ │ │ ├── doc.go
│ │ │ │ └── journal.go
│ │ │ └── types/
│ │ │ ├── doc.go
│ │ │ ├── id.go
│ │ │ ├── set.go
│ │ │ ├── slice.go
│ │ │ ├── urls.go
│ │ │ └── urlsmap.go
│ │ └── v3/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── auth.go
│ │ ├── client.go
│ │ ├── cluster.go
│ │ ├── compact_op.go
│ │ ├── compare.go
│ │ ├── config.go
│ │ ├── credentials/
│ │ │ └── credentials.go
│ │ ├── ctx.go
│ │ ├── doc.go
│ │ ├── internal/
│ │ │ ├── endpoint/
│ │ │ │ └── endpoint.go
│ │ │ └── resolver/
│ │ │ └── resolver.go
│ │ ├── kv.go
│ │ ├── lease.go
│ │ ├── logger.go
│ │ ├── maintenance.go
│ │ ├── op.go
│ │ ├── options.go
│ │ ├── retry.go
│ │ ├── retry_interceptor.go
│ │ ├── sort.go
│ │ ├── txn.go
│ │ ├── utils.go
│ │ └── watch.go
│ ├── golang.org/
│ │ └── x/
│ │ ├── crypto/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ └── pbkdf2/
│ │ │ └── pbkdf2.go
│ │ ├── exp/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── constraints/
│ │ │ │ └── constraints.go
│ │ │ └── slices/
│ │ │ ├── cmp.go
│ │ │ ├── slices.go
│ │ │ ├── sort.go
│ │ │ ├── zsortanyfunc.go
│ │ │ └── zsortordered.go
│ │ ├── net/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── http/
│ │ │ │ └── httpguts/
│ │ │ │ ├── guts.go
│ │ │ │ └── httplex.go
│ │ │ ├── http2/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── ascii.go
│ │ │ │ ├── ciphers.go
│ │ │ │ ├── client_conn_pool.go
│ │ │ │ ├── databuffer.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── frame.go
│ │ │ │ ├── gotrack.go
│ │ │ │ ├── headermap.go
│ │ │ │ ├── hpack/
│ │ │ │ │ ├── encode.go
│ │ │ │ │ ├── hpack.go
│ │ │ │ │ ├── huffman.go
│ │ │ │ │ ├── static_table.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── http2.go
│ │ │ │ ├── pipe.go
│ │ │ │ ├── server.go
│ │ │ │ ├── transport.go
│ │ │ │ ├── write.go
│ │ │ │ ├── writesched.go
│ │ │ │ ├── writesched_priority.go
│ │ │ │ ├── writesched_random.go
│ │ │ │ └── writesched_roundrobin.go
│ │ │ ├── idna/
│ │ │ │ ├── go118.go
│ │ │ │ ├── idna10.0.0.go
│ │ │ │ ├── idna9.0.0.go
│ │ │ │ ├── pre_go118.go
│ │ │ │ ├── punycode.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables11.0.0.go
│ │ │ │ ├── tables12.0.0.go
│ │ │ │ ├── tables13.0.0.go
│ │ │ │ ├── tables15.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── trie.go
│ │ │ │ ├── trie12.0.0.go
│ │ │ │ ├── trie13.0.0.go
│ │ │ │ └── trieval.go
│ │ │ ├── internal/
│ │ │ │ └── timeseries/
│ │ │ │ └── timeseries.go
│ │ │ └── trace/
│ │ │ ├── events.go
│ │ │ ├── histogram.go
│ │ │ └── trace.go
│ │ ├── sys/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── unix/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── affinity_linux.go
│ │ │ │ ├── aliases.go
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_bsd_386.s
│ │ │ │ ├── asm_bsd_amd64.s
│ │ │ │ ├── asm_bsd_arm.s
│ │ │ │ ├── asm_bsd_arm64.s
│ │ │ │ ├── asm_bsd_ppc64.s
│ │ │ │ ├── asm_bsd_riscv64.s
│ │ │ │ ├── asm_linux_386.s
│ │ │ │ ├── asm_linux_amd64.s
│ │ │ │ ├── asm_linux_arm.s
│ │ │ │ ├── asm_linux_arm64.s
│ │ │ │ ├── asm_linux_loong64.s
│ │ │ │ ├── asm_linux_mips64x.s
│ │ │ │ ├── asm_linux_mipsx.s
│ │ │ │ ├── asm_linux_ppc64x.s
│ │ │ │ ├── asm_linux_riscv64.s
│ │ │ │ ├── asm_linux_s390x.s
│ │ │ │ ├── asm_openbsd_mips64.s
│ │ │ │ ├── asm_solaris_amd64.s
│ │ │ │ ├── asm_zos_s390x.s
│ │ │ │ ├── bluetooth_linux.go
│ │ │ │ ├── cap_freebsd.go
│ │ │ │ ├── constants.go
│ │ │ │ ├── dev_aix_ppc.go
│ │ │ │ ├── dev_aix_ppc64.go
│ │ │ │ ├── dev_darwin.go
│ │ │ │ ├── dev_dragonfly.go
│ │ │ │ ├── dev_freebsd.go
│ │ │ │ ├── dev_linux.go
│ │ │ │ ├── dev_netbsd.go
│ │ │ │ ├── dev_openbsd.go
│ │ │ │ ├── dev_zos.go
│ │ │ │ ├── dirent.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── env_unix.go
│ │ │ │ ├── epoll_zos.go
│ │ │ │ ├── fcntl.go
│ │ │ │ ├── fcntl_darwin.go
│ │ │ │ ├── fcntl_linux_32bit.go
│ │ │ │ ├── fdset.go
│ │ │ │ ├── fstatfs_zos.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── gccgo_c.c
│ │ │ │ ├── gccgo_linux_amd64.go
│ │ │ │ ├── ifreq_linux.go
│ │ │ │ ├── ioctl_linux.go
│ │ │ │ ├── ioctl_signed.go
│ │ │ │ ├── ioctl_unsigned.go
│ │ │ │ ├── ioctl_zos.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mmap_nomremap.go
│ │ │ │ ├── mremap.go
│ │ │ │ ├── pagesize_unix.go
│ │ │ │ ├── pledge_openbsd.go
│ │ │ │ ├── ptrace_darwin.go
│ │ │ │ ├── ptrace_ios.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── readdirent_getdents.go
│ │ │ │ ├── readdirent_getdirentries.go
│ │ │ │ ├── sockcmsg_dragonfly.go
│ │ │ │ ├── sockcmsg_linux.go
│ │ │ │ ├── sockcmsg_unix.go
│ │ │ │ ├── sockcmsg_unix_other.go
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_aix.go
│ │ │ │ ├── syscall_aix_ppc.go
│ │ │ │ ├── syscall_aix_ppc64.go
│ │ │ │ ├── syscall_bsd.go
│ │ │ │ ├── syscall_darwin.go
│ │ │ │ ├── syscall_darwin_amd64.go
│ │ │ │ ├── syscall_darwin_arm64.go
│ │ │ │ ├── syscall_darwin_libSystem.go
│ │ │ │ ├── syscall_dragonfly.go
│ │ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ │ ├── syscall_freebsd.go
│ │ │ │ ├── syscall_freebsd_386.go
│ │ │ │ ├── syscall_freebsd_amd64.go
│ │ │ │ ├── syscall_freebsd_arm.go
│ │ │ │ ├── syscall_freebsd_arm64.go
│ │ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ │ ├── syscall_hurd.go
│ │ │ │ ├── syscall_hurd_386.go
│ │ │ │ ├── syscall_illumos.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_linux_386.go
│ │ │ │ ├── syscall_linux_alarm.go
│ │ │ │ ├── syscall_linux_amd64.go
│ │ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ │ ├── syscall_linux_arm.go
│ │ │ │ ├── syscall_linux_arm64.go
│ │ │ │ ├── syscall_linux_gc.go
│ │ │ │ ├── syscall_linux_gc_386.go
│ │ │ │ ├── syscall_linux_gc_arm.go
│ │ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ │ ├── syscall_linux_loong64.go
│ │ │ │ ├── syscall_linux_mips64x.go
│ │ │ │ ├── syscall_linux_mipsx.go
│ │ │ │ ├── syscall_linux_ppc.go
│ │ │ │ ├── syscall_linux_ppc64x.go
│ │ │ │ ├── syscall_linux_riscv64.go
│ │ │ │ ├── syscall_linux_s390x.go
│ │ │ │ ├── syscall_linux_sparc64.go
│ │ │ │ ├── syscall_netbsd.go
│ │ │ │ ├── syscall_netbsd_386.go
│ │ │ │ ├── syscall_netbsd_amd64.go
│ │ │ │ ├── syscall_netbsd_arm.go
│ │ │ │ ├── syscall_netbsd_arm64.go
│ │ │ │ ├── syscall_openbsd.go
│ │ │ │ ├── syscall_openbsd_386.go
│ │ │ │ ├── syscall_openbsd_amd64.go
│ │ │ │ ├── syscall_openbsd_arm.go
│ │ │ │ ├── syscall_openbsd_arm64.go
│ │ │ │ ├── syscall_openbsd_libc.go
│ │ │ │ ├── syscall_openbsd_mips64.go
│ │ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ │ ├── syscall_solaris.go
│ │ │ │ ├── syscall_solaris_amd64.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_unix_gc.go
│ │ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ │ ├── syscall_zos_s390x.go
│ │ │ │ ├── sysvshm_linux.go
│ │ │ │ ├── sysvshm_unix.go
│ │ │ │ ├── sysvshm_unix_other.go
│ │ │ │ ├── timestruct.go
│ │ │ │ ├── unveil_openbsd.go
│ │ │ │ ├── xattr_bsd.go
│ │ │ │ ├── zerrors_aix_ppc.go
│ │ │ │ ├── zerrors_aix_ppc64.go
│ │ │ │ ├── zerrors_darwin_amd64.go
│ │ │ │ ├── zerrors_darwin_arm64.go
│ │ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ │ ├── zerrors_freebsd_386.go
│ │ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ │ ├── zerrors_freebsd_arm.go
│ │ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ │ ├── zerrors_linux.go
│ │ │ │ ├── zerrors_linux_386.go
│ │ │ │ ├── zerrors_linux_amd64.go
│ │ │ │ ├── zerrors_linux_arm.go
│ │ │ │ ├── zerrors_linux_arm64.go
│ │ │ │ ├── zerrors_linux_loong64.go
│ │ │ │ ├── zerrors_linux_mips.go
│ │ │ │ ├── zerrors_linux_mips64.go
│ │ │ │ ├── zerrors_linux_mips64le.go
│ │ │ │ ├── zerrors_linux_mipsle.go
│ │ │ │ ├── zerrors_linux_ppc.go
│ │ │ │ ├── zerrors_linux_ppc64.go
│ │ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ │ ├── zerrors_linux_riscv64.go
│ │ │ │ ├── zerrors_linux_s390x.go
│ │ │ │ ├── zerrors_linux_sparc64.go
│ │ │ │ ├── zerrors_netbsd_386.go
│ │ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ │ ├── zerrors_netbsd_arm.go
│ │ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_386.go
│ │ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ │ ├── zerrors_openbsd_arm.go
│ │ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ │ ├── zerrors_solaris_amd64.go
│ │ │ │ ├── zerrors_zos_s390x.go
│ │ │ │ ├── zptrace_armnn_linux.go
│ │ │ │ ├── zptrace_linux_arm64.go
│ │ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ │ ├── zptrace_x86_linux.go
│ │ │ │ ├── zsyscall_aix_ppc.go
│ │ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ │ ├── zsyscall_freebsd_386.go
│ │ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ │ ├── zsyscall_linux.go
│ │ │ │ ├── zsyscall_linux_386.go
│ │ │ │ ├── zsyscall_linux_amd64.go
│ │ │ │ ├── zsyscall_linux_arm.go
│ │ │ │ ├── zsyscall_linux_arm64.go
│ │ │ │ ├── zsyscall_linux_loong64.go
│ │ │ │ ├── zsyscall_linux_mips.go
│ │ │ │ ├── zsyscall_linux_mips64.go
│ │ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ │ ├── zsyscall_linux_ppc.go
│ │ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ │ ├── zsyscall_linux_s390x.go
│ │ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ │ ├── zsyscall_netbsd_386.go
│ │ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_386.go
│ │ │ │ ├── zsyscall_openbsd_386.s
│ │ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ │ ├── zsyscall_zos_s390x.go
│ │ │ │ ├── zsysctl_openbsd_386.go
│ │ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ │ ├── zsysnum_freebsd_386.go
│ │ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ │ ├── zsysnum_linux_386.go
│ │ │ │ ├── zsysnum_linux_amd64.go
│ │ │ │ ├── zsysnum_linux_arm.go
│ │ │ │ ├── zsysnum_linux_arm64.go
│ │ │ │ ├── zsysnum_linux_loong64.go
│ │ │ │ ├── zsysnum_linux_mips.go
│ │ │ │ ├── zsysnum_linux_mips64.go
│ │ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ │ ├── zsysnum_linux_ppc.go
│ │ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ │ ├── zsysnum_linux_s390x.go
│ │ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ │ ├── zsysnum_netbsd_386.go
│ │ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_386.go
│ │ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_zos_s390x.go
│ │ │ │ ├── ztypes_aix_ppc.go
│ │ │ │ ├── ztypes_aix_ppc64.go
│ │ │ │ ├── ztypes_darwin_amd64.go
│ │ │ │ ├── ztypes_darwin_arm64.go
│ │ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ │ ├── ztypes_freebsd_386.go
│ │ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ │ ├── ztypes_freebsd_arm.go
│ │ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ │ ├── ztypes_linux.go
│ │ │ │ ├── ztypes_linux_386.go
│ │ │ │ ├── ztypes_linux_amd64.go
│ │ │ │ ├── ztypes_linux_arm.go
│ │ │ │ ├── ztypes_linux_arm64.go
│ │ │ │ ├── ztypes_linux_loong64.go
│ │ │ │ ├── ztypes_linux_mips.go
│ │ │ │ ├── ztypes_linux_mips64.go
│ │ │ │ ├── ztypes_linux_mips64le.go
│ │ │ │ ├── ztypes_linux_mipsle.go
│ │ │ │ ├── ztypes_linux_ppc.go
│ │ │ │ ├── ztypes_linux_ppc64.go
│ │ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ │ ├── ztypes_linux_riscv64.go
│ │ │ │ ├── ztypes_linux_s390x.go
│ │ │ │ ├── ztypes_linux_sparc64.go
│ │ │ │ ├── ztypes_netbsd_386.go
│ │ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ │ ├── ztypes_netbsd_arm.go
│ │ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_386.go
│ │ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ │ ├── ztypes_openbsd_arm.go
│ │ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ │ ├── ztypes_solaris_amd64.go
│ │ │ │ └── ztypes_zos_s390x.go
│ │ │ └── windows/
│ │ │ ├── aliases.go
│ │ │ ├── dll_windows.go
│ │ │ ├── empty.s
│ │ │ ├── env_windows.go
│ │ │ ├── eventlog.go
│ │ │ ├── exec_windows.go
│ │ │ ├── memory_windows.go
│ │ │ ├── mkerrors.bash
│ │ │ ├── mkknownfolderids.bash
│ │ │ ├── mksyscall.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── security_windows.go
│ │ │ ├── service.go
│ │ │ ├── setupapi_windows.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_windows.go
│ │ │ ├── types_windows.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ ├── types_windows_arm.go
│ │ │ ├── types_windows_arm64.go
│ │ │ ├── zerrors_windows.go
│ │ │ ├── zknownfolderids_windows.go
│ │ │ └── zsyscall_windows.go
│ │ ├── text/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── secure/
│ │ │ │ └── bidirule/
│ │ │ │ ├── bidirule.go
│ │ │ │ ├── bidirule10.0.0.go
│ │ │ │ └── bidirule9.0.0.go
│ │ │ ├── transform/
│ │ │ │ └── transform.go
│ │ │ └── unicode/
│ │ │ ├── bidi/
│ │ │ │ ├── bidi.go
│ │ │ │ ├── bracket.go
│ │ │ │ ├── core.go
│ │ │ │ ├── prop.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables11.0.0.go
│ │ │ │ ├── tables12.0.0.go
│ │ │ │ ├── tables13.0.0.go
│ │ │ │ ├── tables15.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ └── trieval.go
│ │ │ └── norm/
│ │ │ ├── composition.go
│ │ │ ├── forminfo.go
│ │ │ ├── input.go
│ │ │ ├── iter.go
│ │ │ ├── normalize.go
│ │ │ ├── readwriter.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── transform.go
│ │ │ └── trie.go
│ │ └── time/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ └── rate/
│ │ ├── rate.go
│ │ └── sometimes.go
│ ├── google.golang.org/
│ │ ├── genproto/
│ │ │ ├── LICENSE
│ │ │ ├── googleapis/
│ │ │ │ ├── api/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── annotations/
│ │ │ │ │ │ ├── annotations.pb.go
│ │ │ │ │ │ ├── client.pb.go
│ │ │ │ │ │ ├── field_behavior.pb.go
│ │ │ │ │ │ ├── field_info.pb.go
│ │ │ │ │ │ ├── http.pb.go
│ │ │ │ │ │ ├── resource.pb.go
│ │ │ │ │ │ └── routing.pb.go
│ │ │ │ │ ├── launch_stage.pb.go
│ │ │ │ │ └── tidyfix.go
│ │ │ │ └── rpc/
│ │ │ │ ├── LICENSE
│ │ │ │ └── status/
│ │ │ │ └── status.pb.go
│ │ │ └── internal/
│ │ │ └── doc.go
│ │ ├── grpc/
│ │ │ ├── AUTHORS
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── GOVERNANCE.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS.md
│ │ │ ├── Makefile
│ │ │ ├── NOTICE.txt
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── attributes/
│ │ │ │ └── attributes.go
│ │ │ ├── backoff/
│ │ │ │ └── backoff.go
│ │ │ ├── backoff.go
│ │ │ ├── balancer/
│ │ │ │ ├── balancer.go
│ │ │ │ ├── base/
│ │ │ │ │ ├── balancer.go
│ │ │ │ │ └── base.go
│ │ │ │ ├── conn_state_evaluator.go
│ │ │ │ ├── grpclb/
│ │ │ │ │ └── state/
│ │ │ │ │ └── state.go
│ │ │ │ └── roundrobin/
│ │ │ │ └── roundrobin.go
│ │ │ ├── balancer_conn_wrappers.go
│ │ │ ├── binarylog/
│ │ │ │ └── grpc_binarylog_v1/
│ │ │ │ └── binarylog.pb.go
│ │ │ ├── call.go
│ │ │ ├── channelz/
│ │ │ │ └── channelz.go
│ │ │ ├── clientconn.go
│ │ │ ├── codec.go
│ │ │ ├── codegen.sh
│ │ │ ├── codes/
│ │ │ │ ├── code_string.go
│ │ │ │ └── codes.go
│ │ │ ├── connectivity/
│ │ │ │ └── connectivity.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── insecure/
│ │ │ │ │ └── insecure.go
│ │ │ │ └── tls.go
│ │ │ ├── dialoptions.go
│ │ │ ├── doc.go
│ │ │ ├── encoding/
│ │ │ │ ├── encoding.go
│ │ │ │ └── proto/
│ │ │ │ └── proto.go
│ │ │ ├── grpclog/
│ │ │ │ ├── component.go
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── interceptor.go
│ │ │ ├── internal/
│ │ │ │ ├── backoff/
│ │ │ │ │ └── backoff.go
│ │ │ │ ├── balancer/
│ │ │ │ │ └── gracefulswitch/
│ │ │ │ │ └── gracefulswitch.go
│ │ │ │ ├── balancerload/
│ │ │ │ │ └── load.go
│ │ │ │ ├── binarylog/
│ │ │ │ │ ├── binarylog.go
│ │ │ │ │ ├── binarylog_testutil.go
│ │ │ │ │ ├── env_config.go
│ │ │ │ │ ├── method_logger.go
│ │ │ │ │ └── sink.go
│ │ │ │ ├── buffer/
│ │ │ │ │ └── unbounded.go
│ │ │ │ ├── channelz/
│ │ │ │ │ ├── funcs.go
│ │ │ │ │ ├── id.go
│ │ │ │ │ ├── logging.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── types_linux.go
│ │ │ │ │ ├── types_nonlinux.go
│ │ │ │ │ ├── util_linux.go
│ │ │ │ │ └── util_nonlinux.go
│ │ │ │ ├── credentials/
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── spiffe.go
│ │ │ │ │ ├── syscallconn.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── envconfig/
│ │ │ │ │ ├── envconfig.go
│ │ │ │ │ ├── observability.go
│ │ │ │ │ └── xds.go
│ │ │ │ ├── grpclog/
│ │ │ │ │ ├── grpclog.go
│ │ │ │ │ └── prefixLogger.go
│ │ │ │ ├── grpcrand/
│ │ │ │ │ └── grpcrand.go
│ │ │ │ ├── grpcsync/
│ │ │ │ │ ├── callback_serializer.go
│ │ │ │ │ ├── event.go
│ │ │ │ │ ├── oncefunc.go
│ │ │ │ │ └── pubsub.go
│ │ │ │ ├── grpcutil/
│ │ │ │ │ ├── compressor.go
│ │ │ │ │ ├── encode_duration.go
│ │ │ │ │ ├── grpcutil.go
│ │ │ │ │ ├── metadata.go
│ │ │ │ │ ├── method.go
│ │ │ │ │ └── regex.go
│ │ │ │ ├── idle/
│ │ │ │ │ └── idle.go
│ │ │ │ ├── internal.go
│ │ │ │ ├── metadata/
│ │ │ │ │ └── metadata.go
│ │ │ │ ├── pretty/
│ │ │ │ │ └── pretty.go
│ │ │ │ ├── resolver/
│ │ │ │ │ ├── config_selector.go
│ │ │ │ │ ├── dns/
│ │ │ │ │ │ └── dns_resolver.go
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ └── passthrough.go
│ │ │ │ │ └── unix/
│ │ │ │ │ └── unix.go
│ │ │ │ ├── serviceconfig/
│ │ │ │ │ ├── duration.go
│ │ │ │ │ └── serviceconfig.go
│ │ │ │ ├── status/
│ │ │ │ │ └── status.go
│ │ │ │ ├── syscall/
│ │ │ │ │ ├── syscall_linux.go
│ │ │ │ │ └── syscall_nonlinux.go
│ │ │ │ ├── transport/
│ │ │ │ │ ├── bdp_estimator.go
│ │ │ │ │ ├── controlbuf.go
│ │ │ │ │ ├── defaults.go
│ │ │ │ │ ├── flowcontrol.go
│ │ │ │ │ ├── handler_server.go
│ │ │ │ │ ├── http2_client.go
│ │ │ │ │ ├── http2_server.go
│ │ │ │ │ ├── http_util.go
│ │ │ │ │ ├── logging.go
│ │ │ │ │ ├── networktype/
│ │ │ │ │ │ └── networktype.go
│ │ │ │ │ ├── proxy.go
│ │ │ │ │ └── transport.go
│ │ │ │ └── xds_handshake_cluster.go
│ │ │ ├── keepalive/
│ │ │ │ └── keepalive.go
│ │ │ ├── metadata/
│ │ │ │ └── metadata.go
│ │ │ ├── peer/
│ │ │ │ └── peer.go
│ │ │ ├── picker_wrapper.go
│ │ │ ├── pickfirst.go
│ │ │ ├── preloader.go
│ │ │ ├── regenerate.sh
│ │ │ ├── resolver/
│ │ │ │ ├── manual/
│ │ │ │ │ └── manual.go
│ │ │ │ ├── map.go
│ │ │ │ └── resolver.go
│ │ │ ├── resolver_conn_wrapper.go
│ │ │ ├── rpc_util.go
│ │ │ ├── server.go
│ │ │ ├── service_config.go
│ │ │ ├── serviceconfig/
│ │ │ │ └── serviceconfig.go
│ │ │ ├── shared_buffer_pool.go
│ │ │ ├── stats/
│ │ │ │ ├── handlers.go
│ │ │ │ └── stats.go
│ │ │ ├── status/
│ │ │ │ └── status.go
│ │ │ ├── stream.go
│ │ │ ├── tap/
│ │ │ │ └── tap.go
│ │ │ ├── trace.go
│ │ │ ├── version.go
│ │ │ └── vet.sh
│ │ └── protobuf/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── encoding/
│ │ │ ├── protojson/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── encode.go
│ │ │ │ └── well_known_types.go
│ │ │ ├── prototext/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ └── protowire/
│ │ │ └── wire.go
│ │ ├── internal/
│ │ │ ├── descfmt/
│ │ │ │ └── stringer.go
│ │ │ ├── descopts/
│ │ │ │ └── options.go
│ │ │ ├── detrand/
│ │ │ │ └── rand.go
│ │ │ ├── encoding/
│ │ │ │ ├── defval/
│ │ │ │ │ └── default.go
│ │ │ │ ├── json/
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── decode_number.go
│ │ │ │ │ ├── decode_string.go
│ │ │ │ │ ├── decode_token.go
│ │ │ │ │ └── encode.go
│ │ │ │ ├── messageset/
│ │ │ │ │ └── messageset.go
│ │ │ │ ├── tag/
│ │ │ │ │ └── tag.go
│ │ │ │ └── text/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ ├── errors/
│ │ │ │ ├── errors.go
│ │ │ │ ├── is_go112.go
│ │ │ │ └── is_go113.go
│ │ │ ├── filedesc/
│ │ │ │ ├── build.go
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_lazy.go
│ │ │ │ ├── desc_list.go
│ │ │ │ ├── desc_list_gen.go
│ │ │ │ └── placeholder.go
│ │ │ ├── filetype/
│ │ │ │ └── build.go
│ │ │ ├── flags/
│ │ │ │ ├── flags.go
│ │ │ │ ├── proto_legacy_disable.go
│ │ │ │ └── proto_legacy_enable.go
│ │ │ ├── genid/
│ │ │ │ ├── any_gen.go
│ │ │ │ ├── api_gen.go
│ │ │ │ ├── descriptor_gen.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── duration_gen.go
│ │ │ │ ├── empty_gen.go
│ │ │ │ ├── field_mask_gen.go
│ │ │ │ ├── goname.go
│ │ │ │ ├── map_entry.go
│ │ │ │ ├── source_context_gen.go
│ │ │ │ ├── struct_gen.go
│ │ │ │ ├── timestamp_gen.go
│ │ │ │ ├── type_gen.go
│ │ │ │ ├── wrappers.go
│ │ │ │ └── wrappers_gen.go
│ │ │ ├── impl/
│ │ │ │ ├── api_export.go
│ │ │ │ ├── checkinit.go
│ │ │ │ ├── codec_extension.go
│ │ │ │ ├── codec_field.go
│ │ │ │ ├── codec_gen.go
│ │ │ │ ├── codec_map.go
│ │ │ │ ├── codec_map_go111.go
│ │ │ │ ├── codec_map_go112.go
│ │ │ │ ├── codec_message.go
│ │ │ │ ├── codec_messageset.go
│ │ │ │ ├── codec_reflect.go
│ │ │ │ ├── codec_tables.go
│ │ │ │ ├── codec_unsafe.go
│ │ │ │ ├── convert.go
│ │ │ │ ├── convert_list.go
│ │ │ │ ├── convert_map.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── legacy_enum.go
│ │ │ │ ├── legacy_export.go
│ │ │ │ ├── legacy_extension.go
│ │ │ │ ├── legacy_file.go
│ │ │ │ ├── legacy_message.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── merge_gen.go
│ │ │ │ ├── message.go
│ │ │ │ ├── message_reflect.go
│ │ │ │ ├── message_reflect_field.go
│ │ │ │ ├── message_reflect_gen.go
│ │ │ │ ├── pointer_reflect.go
│ │ │ │ ├── pointer_unsafe.go
│ │ │ │ ├── validate.go
│ │ │ │ └── weak.go
│ │ │ ├── order/
│ │ │ │ ├── order.go
│ │ │ │ └── range.go
│ │ │ ├── pragma/
│ │ │ │ └── pragma.go
│ │ │ ├── set/
│ │ │ │ └── ints.go
│ │ │ ├── strs/
│ │ │ │ ├── strings.go
│ │ │ │ ├── strings_pure.go
│ │ │ │ └── strings_unsafe.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ ├── proto/
│ │ │ ├── checkinit.go
│ │ │ ├── decode.go
│ │ │ ├── decode_gen.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gen.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── merge.go
│ │ │ ├── messageset.go
│ │ │ ├── proto.go
│ │ │ ├── proto_methods.go
│ │ │ ├── proto_reflect.go
│ │ │ ├── reset.go
│ │ │ ├── size.go
│ │ │ ├── size_gen.go
│ │ │ └── wrappers.go
│ │ ├── reflect/
│ │ │ ├── protodesc/
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_resolve.go
│ │ │ │ ├── desc_validate.go
│ │ │ │ └── proto.go
│ │ │ ├── protoreflect/
│ │ │ │ ├── methods.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── source.go
│ │ │ │ ├── source_gen.go
│ │ │ │ ├── type.go
│ │ │ │ ├── value.go
│ │ │ │ ├── value_equal.go
│ │ │ │ ├── value_pure.go
│ │ │ │ ├── value_union.go
│ │ │ │ └── value_unsafe.go
│ │ │ └── protoregistry/
│ │ │ └── registry.go
│ │ ├── runtime/
│ │ │ ├── protoiface/
│ │ │ │ ├── legacy.go
│ │ │ │ └── methods.go
│ │ │ └── protoimpl/
│ │ │ ├── impl.go
│ │ │ └── version.go
│ │ └── types/
│ │ ├── descriptorpb/
│ │ │ └── descriptor.pb.go
│ │ └── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ └── timestamppb/
│ │ └── timestamp.pb.go
│ ├── gopkg.in/
│ │ └── yaml.v2/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── LICENSE.libyaml
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── apic.go
│ │ ├── decode.go
│ │ ├── emitterc.go
│ │ ├── encode.go
│ │ ├── parserc.go
│ │ ├── readerc.go
│ │ ├── resolve.go
│ │ ├── scannerc.go
│ │ ├── sorter.go
│ │ ├── writerc.go
│ │ ├── yaml.go
│ │ ├── yamlh.go
│ │ └── yamlprivateh.go
│ └── modules.txt
└── version.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
bin
vendor
pkg
================================================
FILE: .gitignore
================================================
bin/
.idea/
================================================
FILE: .travis.yml
================================================
language: go
go:
- 1.x
- tip
env:
- VAULT_ADDR='http://127.0.0.1:8200' CONSUL_VERSION=0.9.3 ETCD_VERSION=3.3.1 DYNAMODB_VERSION=2017-02-16 VAULT_VERSION=0.10.1 ZOOKEEPER_VERSION=3.4.10 RANCHER_VERSION=0.6.0
services:
- redis
before_install:
# install consul
- wget https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
- unzip consul_${CONSUL_VERSION}_linux_amd64.zip
- sudo mv consul /bin/
- consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -bind 127.0.0.1 &
# install etcd
- wget https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
- tar xzf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
- sudo mv etcd-v${ETCD_VERSION}-linux-amd64/etcd /bin/
- sudo mv etcd-v${ETCD_VERSION}-linux-amd64/etcdctl /bin/
- unset ETCD_VERSION
- etcd &
# install DynamoDB
- sudo pip install awscli
- mkdir /tmp/dynamodb
- wget -O - https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_${DYNAMODB_VERSION}.tar.gz | tar xz --directory /tmp/dynamodb
- java -Djava.library.path=/tmp/dynamodb/DynamoDBLocal_lib -jar /tmp/dynamodb/DynamoDBLocal.jar -inMemory &
# Install rancher metadata
- wget https://github.com/rancher/rancher-metadata/releases/download/v${RANCHER_VERSION}/rancher-metadata.tar.gz
- mkdir -p ./rancher-metadata
- tar xzf rancher-metadata.tar.gz --strip-components=1 -C ./rancher-metadata
- sudo mv ./rancher-metadata/bin/rancher-metadata /bin/
# Install vault
- wget https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip
- unzip vault_${VAULT_VERSION}_linux_amd64.zip
- sudo mv vault /bin/
- vault server -dev &
# Install zookeeper
- wget http://www.eu.apache.org/dist/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/zookeeper-${ZOOKEEPER_VERSION}.tar.gz
- tar xzf zookeeper-${ZOOKEEPER_VERSION}.tar.gz
- mkdir /tmp/zookeeper && cp integration/zookeeper/zoo.cfg zookeeper-${ZOOKEEPER_VERSION}/conf/zoo.cfg
- zookeeper-${ZOOKEEPER_VERSION}/bin/zkServer.sh start
# Run AWS SSM mocking server
- go run ./integration/ssm/main.go &
install:
- make build
- sudo make install
script:
- make test
- make integration
================================================
FILE: CHANGELOG
================================================
### v0.16.0
28f72608 Release arm64 binaries
4528af01 Add option to specify auth backend mount path in Vault
b51998d6 new etcdv3 implementation
fa37c993 isFileExist() was not defined in windows
a23aa1c7 Update Vault Kubernetes authentication doc
9b0ce8e6 Fix vendor name for logrus
ccc17eb5 fix fileStat close when open failed on windows
e3864219 add parseBool to template_funcs
94bf80e7 Add Kubernetes auth for Vault backend
304efb5a Add AppRole authN for Vault backend
fb208461 Redis Backend Updates: WatchPrefix Support, Hash Support, Standard Redis Key Naming Convention
36d874f5 Fix bug with multiple watches for etcdv3
1fd12493 backend/etcd: add scheme to srv discovered endpoints
a88c922a Vault TLS certificates auth method
b77b9232 Add atoi function to template funcs and test
### v0.15.0
0c4cb29e Don't pass empty prefix to zookeeper nodeWalk
5d6e2790 Update template.md - added forgotten verb
19d6514d remove fmt.Println
802e6a11 Added windows cmd support
59001ca3 Fix handling of absent parameters for ssm backend
8419c708 AWS SSM - don't treat "ParameterNotFound" as a fatal error
0a09632a Add support for consul BasicAuth
adf8d486 Fix panic during Consul client creation
027be91f Update docker Multi-Stage build
376d3f99 fix etcdv3 client watch: reuse previous watch to avoid memory leak
f711530d fix(confd): etcd curl err when make integration
### v0.14.0
95ba861f Replace godep with dep
cb53644c Template integration with https://github.com/xordataexchange/crypt provided values
6da43945 add go version and git commit sha1 to version string
8f052819 yaml/json file backend
61652a2c Add AWS SSM Parameter Store backend
### v0.13.0
181e3e3 Update dependencies
509268d Remove StackEngine backend
3a61969 Add further installation instructions
dd47bbb Introducing WaitPrefix for the Rancher backend
35ffe8f Adding nested key support to Vault backend v2
f1833a6 ETCD V3 support
89c59d4 Feature new template func add
2b080af added some additional text/template sorting methods
fbea3b9 Fixes #562 by not adding the URL scheme to the node at DNS lookup time
ab93ff1 Windows support
695e62e add trimSuffix template function
3049df8 Add base64 encode/decode template helpers
485b31c improved etcd watch support
8528d3c added support to specify a redis database (in the connection string)
### v0.12.0
5f3f79d Change etcd node port because the official port of etcd is 2379
9073dae Fix typo in docs
0ea1edb Remove unnecessary loop in Consul backend.
dbbee0a Fix travis configuration to use latest dynamoDB binary
ad5f74f Fix typo in quick-start-guide.md
7ac1091 Upgrade Dockerfile to use latest stable Alpine which has Go 1.6
20b3d37 add env backend integration tests
c6622ed updated template docs
9d57489 Specify default Vault backend node
b34d223 Add simple redis example since one was missing from quickstart
32d46e5 Fix typo in template-resources.md
7c89004 Fix up Rancher metadata service description and links
2a54c58 Fix missing braces and extra parenthesis on formatted datatime example
6e198db Fix DynamoDB credentials handling
705f2ee Fix dynamodb nil pointers
e48e48f Use SVG for the build image
6bb3c21 Add file exists function to template functions
57b649d zookeeper watch support
59da585 extended getenv & map template functions
d423123 updated README for vault
e60c2e2 Add support for redis password authentication
f3a02e7 Adding example goreman Procfile for etcd
aae4190 updated Dockerfile.build.alpine
cf62311 update some docs
54f715c Add lookupSRV function.
7afb8d6 fixed broken etcd watch support
5a5af59 switched to new etcd client
5d2955a Remove gb install
1577855 Fix typos in docs/tomcat-sample.md
d133c25 Added support for Vault backend
071e6ab IP dns resolving function for templates
ccf2486 redis: try to recover from closed connections
66a31bf Add support for etcd BasicAuth
d9ea46c Added documentation for stackengine as a backend
a1dee21 add -sync-only flag
c615c18 update checklist
233ac99 Add more debugging output for onetime and env.
d7f835d Create tomcat-sample.md
### v0.11.0
46d3c69 load template resources every interval
6b01b27 Add Rancher Metadata backend
bec0b60 link to the right command-line-flags doc
be20ca7 Fix typo in templates.md
745cf2b add default node for zookeeper backend
0dd4c53 Add StackEngine backend support
f446ce4 Load AWS credentials through a provider chain
f206b47 Add strings.Replace support
### v0.10.0
70cf76a move contrib to root dir
34a0ff7 Updating README.md to include new backends
fee8361 Fix broken links to documentation
d9d4cb1 Use the gb tool for dep management and building.
1ef34cb template: don't crash on template error
7531530 Log command output on error
fed32fe Draft: Support for DynamoDB
7f59d50 Use correct application name for ZooKeeper example
03a7c7e feat: add strings.Contains support
6307c26 change opdemand emails to engine yard
5350113 client cert config from environment variables
b6f414e Adding better support for Consul, enabling SSL/TLS client config
e94151b update release checklist
ce4eb5c bump to v1.0.0-dev
503d745 remove --quiet, --debug and --verbose
c9cefaf random doc fixes
### v0.9.0
8888b7a Add maintainers file
431e31b add release checklist document
f782957 bump etcd to v2.0.9 for integration tests
1b2d669 *feature) add recursive get toml files.
94fc0a6 allow override of BIN_DIR
7cce514 log that we're skipping config file to debug
6e0cbfc Enable watch from the config file
0410cbd bump version to 0.8.0
c7f53e1 add go 1.4 to travis.ci version matrix
7a2e2f4 Add toUpper, toLower support
4a8e079 Fix "The event in requested index is outdated and cleared" error
211a5cb add --log-level flag
0a0858c fix godeps
821cd61 properly format error messages
2ad79d6 general integration test nitpicks
913eb2e hook up etcd integration tests
2ad2fd4 Improved docs for how to use go templates to traverse json
7b4f06a hook up consul integration tests to travis
ae640bf hook up redis integration tests
828d568 remove unused service templates
7d374e6 remove unused log_test
68eb9ad Add simple redis support
b4c103c Revert "Added jsonGet support to template_funcs"
1e08562 Added jsonGet support to template_funcs
f84b57d add scripts for building, installing and testing confd
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Confd
Want to hack on Confd? Awesome! Here are instructions to get you started. They are probably not
perfect, please let us know if anything feels wrong or incomplete.
# Who are the Maintainers?
## BDFL
Confd follows the timeless, highly efficient and totally unfair system known as [Benevolent dictator
for life](http://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life).
Kelsey Hightower - the creator of Confd - serves as the project's BDFL. Kelsey serves as the final
arbiter of any disputes and has the final say on project direction.
## Core Maintainers
Core maintainers are exceptionally knowledgeable about Confd. Core maintainers are responsible for
the following:
- respond to github issues, review and merge pull requests
- help shape confd's roadmap
- actively participate in feature development and general maintenance
- answer and help users in #confd
- interview and recruit new members as contributing maintainers
Pull requests which are considered minor or "showstoppers" can be merged with at least one core maintainer's
LGTM, otherwise they need approval from the BDFL.
### Who assigns maintainers?
Kelsey.
### How can I become a maintainer?
- make yourself useful by contributing code, bugfixes, support etc.
- volunteer on the irc channel
Don't forget: being a maintainer is a time investment. Make sure you will have time to make
yourself available. You don't have to be a maintainer to make a difference on the project!
================================================
FILE: Dockerfile.build.alpine
================================================
FROM golang:1.10.2-alpine
RUN apk add --no-cache make git
RUN mkdir -p /go/src/github.com/kelseyhightower/confd && \
ln -s /go/src/github.com/kelseyhightower/confd /app
WORKDIR /app
================================================
FILE: LICENSE
================================================
Copyright (c) 2013 Kelsey Hightower
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MAINTAINERS
================================================
Chris Armstrong <carmstrong@engineyard.com> (@carmstrong)
Gabriel Monroy <gmonroy@engineyard.com> (@gabrtv)
Kelsey Hightower <kelsey.hightower@gmail.com> (@kelseyhightower)
Matthew Fisher <mfisher@engineyard.com> (@bacongobbler)
Oleksandr Kushchenko <gearok@gmail.com> (@okushchenko)
================================================
FILE: Makefile
================================================
.PHONY: build install clean test integration dep release
VERSION=`egrep -o '[0-9]+\.[0-9a-z.\-]+' version.go`
GIT_SHA=`git rev-parse --short HEAD || echo`
build:
@echo "Building confd..."
@mkdir -p bin
@go build -ldflags "-X main.GitSHA=${GIT_SHA}" -o bin/confd .
install:
@echo "Installing confd..."
@install -c bin/confd /usr/local/bin/confd
clean:
@rm -f bin/*
test:
@echo "Running tests..."
@go test `go list ./... | grep -v vendor/`
integration:
@echo "Running integration tests..."
@for i in `find ./integration -name test.sh`; do \
echo "Running $$i"; \
bash $$i || exit 1; \
bash integration/expect/check.sh || exit 1; \
rm /tmp/confd-*; \
done
dep:
@dep ensure
release:
@docker build -q -t confd_builder -f Dockerfile.build.alpine .
@for platform in darwin linux windows; do \
if [ $$platform == windows ]; then extension=.exe; fi; \
docker run -it --rm -v ${PWD}:/app -e "GOOS=$$platform" -e "GOARCH=amd64" -e "CGO_ENABLED=0" confd_builder go build -ldflags="-s -w -X main.GitSHA=${GIT_SHA}" -o bin/confd-${VERSION}-$$platform-amd64$$extension; \
done
@docker run -it --rm -v ${PWD}:/app -e "GOOS=linux" -e "GOARCH=arm64" -e "CGO_ENABLED=0" confd_builder go build -ldflags="-s -w -X main.GitSHA=${GIT_SHA}" -o bin/confd-${VERSION}-linux-arm64;
@upx bin/confd-${VERSION}-*
================================================
FILE: README.md
================================================
# confd
[](https://travis-ci.org/kelseyhightower/confd)
`confd` is a lightweight configuration management tool focused on:
* keeping local configuration files up-to-date using data stored in [etcd](https://github.com/coreos/etcd),
[consul](http://consul.io), [dynamodb](http://aws.amazon.com/dynamodb/), [redis](http://redis.io),
[vault](https://vaultproject.io), [zookeeper](https://zookeeper.apache.org), [aws ssm parameter store](https://aws.amazon.com/ec2/systems-manager/) or env vars and processing [template resources](docs/template-resources.md).
* reloading applications to pick up new config file changes
## Project Status
`confd` is currently being cleaned up to build on later versions of Go and moving to adopt native support for [Go modules](https://go.dev/blog/using-go-modules). As part of this work the following major changes are being made:
* The `etcd` and `etcdv3` backend are going to be merged. etcd v2 has been deprecated and both backend will now use etcdv3 client libraries.
* The `cget`, `cgets`, `cgetv`, and `cgetvs` templates function have been removed due to an unmaintained dependency `github.com/xordataexchange/crypt/encoding/secconf`. We need to rethink encryption in the core project and rely only on the standard library going forward. In the meanwhile these template function will not work and if support is required you will need to stick with an older version of confd.
## Community
* IRC: `#confd` on Freenode
* Mailing list: [Google Groups](https://groups.google.com/forum/#!forum/confd-users)
* Website: [www.confd.io](http://www.confd.io)
## Building
Go 1.10 is required to build confd, which uses the new vendor directory.
```
$ mkdir -p $GOPATH/src/github.com/kelseyhightower
$ git clone https://github.com/kelseyhightower/confd.git $GOPATH/src/github.com/kelseyhightower/confd
$ cd $GOPATH/src/github.com/kelseyhightower/confd
$ make
```
You should now have confd in your `bin/` directory:
```
$ ls bin/
confd
```
## Getting Started
Before we begin be sure to [download and install confd](docs/installation.md).
* [quick start guide](docs/quick-start-guide.md)
## Next steps
Check out the [docs directory](docs) for more docs.
================================================
FILE: backends/client.go
================================================
package backends
import (
"errors"
"strings"
"github.com/kelseyhightower/confd/backends/consul"
"github.com/kelseyhightower/confd/backends/dynamodb"
"github.com/kelseyhightower/confd/backends/env"
"github.com/kelseyhightower/confd/backends/etcdv3"
"github.com/kelseyhightower/confd/backends/file"
"github.com/kelseyhightower/confd/backends/rancher"
"github.com/kelseyhightower/confd/backends/redis"
"github.com/kelseyhightower/confd/backends/ssm"
"github.com/kelseyhightower/confd/backends/vault"
"github.com/kelseyhightower/confd/backends/zookeeper"
"github.com/kelseyhightower/confd/log"
)
// The StoreClient interface is implemented by objects that can retrieve
// key/value pairs from a backend store.
type StoreClient interface {
GetValues(keys []string) (map[string]string, error)
WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error)
}
// New is used to create a storage client based on our configuration.
func New(config Config) (StoreClient, error) {
if config.Backend == "" {
config.Backend = "etcd"
}
backendNodes := config.BackendNodes
if config.Backend == "file" {
log.Info("Backend source(s) set to " + strings.Join(config.YAMLFile, ", "))
} else {
log.Info("Backend source(s) set to " + strings.Join(backendNodes, ", "))
}
switch config.Backend {
case "consul":
return consul.New(config.BackendNodes, config.Scheme,
config.ClientCert, config.ClientKey,
config.ClientCaKeys,
config.BasicAuth,
config.Username,
config.Password,
)
case "etcd":
// etcd v2 has been deprecated and etcdv3 is now the client for both the etcd and etcdv3 backends.
return etcdv3.NewEtcdClient(backendNodes, config.ClientCert, config.ClientKey, config.ClientCaKeys, config.BasicAuth, config.Username, config.Password)
case "etcdv3":
return etcdv3.NewEtcdClient(backendNodes, config.ClientCert, config.ClientKey, config.ClientCaKeys, config.BasicAuth, config.Username, config.Password)
case "zookeeper":
return zookeeper.NewZookeeperClient(backendNodes)
case "rancher":
return rancher.NewRancherClient(backendNodes)
case "redis":
return redis.NewRedisClient(backendNodes, config.ClientKey, config.Separator)
case "env":
return env.NewEnvClient()
case "file":
return file.NewFileClient(config.YAMLFile, config.Filter)
case "vault":
vaultConfig := map[string]string{
"app-id": config.AppID,
"user-id": config.UserID,
"role-id": config.RoleID,
"secret-id": config.SecretID,
"username": config.Username,
"password": config.Password,
"token": config.AuthToken,
"cert": config.ClientCert,
"key": config.ClientKey,
"caCert": config.ClientCaKeys,
"path": config.Path,
}
return vault.New(backendNodes[0], config.AuthType, vaultConfig)
case "dynamodb":
table := config.Table
log.Info("DynamoDB table set to " + table)
return dynamodb.NewDynamoDBClient(table)
case "ssm":
return ssm.New()
}
return nil, errors.New("Invalid backend")
}
================================================
FILE: backends/config.go
================================================
package backends
import (
util "github.com/kelseyhightower/confd/util"
)
type Config struct {
AuthToken string `toml:"auth_token"`
AuthType string `toml:"auth_type"`
Backend string `toml:"backend"`
BasicAuth bool `toml:"basic_auth"`
ClientCaKeys string `toml:"client_cakeys"`
ClientCert string `toml:"client_cert"`
ClientKey string `toml:"client_key"`
ClientInsecure bool `toml:"client_insecure"`
BackendNodes util.Nodes `toml:"nodes"`
Password string `toml:"password"`
Scheme string `toml:"scheme"`
Table string `toml:"table"`
Separator string `toml:"separator"`
Username string `toml:"username"`
AppID string `toml:"app_id"`
UserID string `toml:"user_id"`
RoleID string `toml:"role_id"`
SecretID string `toml:"secret_id"`
YAMLFile util.Nodes `toml:"file"`
Filter string `toml:"filter"`
Path string `toml:"path"`
Role string
}
================================================
FILE: backends/consul/client.go
================================================
package consul
import (
"path"
"strings"
"github.com/hashicorp/consul/api"
)
// Client provides a wrapper around the consulkv client
type ConsulClient struct {
client *api.KV
}
// NewConsulClient returns a new client to Consul for the given address
func New(nodes []string, scheme, cert, key, caCert string, basicAuth bool, username string, password string) (*ConsulClient, error) {
conf := api.DefaultConfig()
conf.Scheme = scheme
if len(nodes) > 0 {
conf.Address = nodes[0]
}
if basicAuth {
conf.HttpAuth = &api.HttpBasicAuth{
Username: username,
Password: password,
}
}
if cert != "" && key != "" {
conf.TLSConfig.CertFile = cert
conf.TLSConfig.KeyFile = key
}
if caCert != "" {
conf.TLSConfig.CAFile = caCert
}
client, err := api.NewClient(conf)
if err != nil {
return nil, err
}
return &ConsulClient{client.KV()}, nil
}
// GetValues queries Consul for keys
func (c *ConsulClient) GetValues(keys []string) (map[string]string, error) {
vars := make(map[string]string)
for _, key := range keys {
key := strings.TrimPrefix(key, "/")
pairs, _, err := c.client.List(key, nil)
if err != nil {
return vars, err
}
for _, p := range pairs {
vars[path.Join("/", p.Key)] = string(p.Value)
}
}
return vars, nil
}
type watchResponse struct {
waitIndex uint64
err error
}
func (c *ConsulClient) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
respChan := make(chan watchResponse)
go func() {
opts := api.QueryOptions{
WaitIndex: waitIndex,
}
_, meta, err := c.client.List(prefix, &opts)
if err != nil {
respChan <- watchResponse{waitIndex, err}
return
}
respChan <- watchResponse{meta.LastIndex, err}
}()
select {
case <-stopChan:
return waitIndex, nil
case r := <-respChan:
return r.waitIndex, r.err
}
}
================================================
FILE: backends/dynamodb/client.go
================================================
package dynamodb
import (
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/kelseyhightower/confd/log"
)
// Client is a wrapper around the DynamoDB client
// and also holds the table to lookup key value pairs from
type Client struct {
client *dynamodb.DynamoDB
table string
}
// NewDynamoDBClient returns an *dynamodb.Client with a connection to the region
// configured via the AWS_REGION environment variable.
// It returns an error if the connection cannot be made or the table does not exist.
func NewDynamoDBClient(table string) (*Client, error) {
var c *aws.Config
if os.Getenv("DYNAMODB_LOCAL") != "" {
log.Debug("DYNAMODB_LOCAL is set")
endpoint := "http://localhost:8000"
c = &aws.Config{
Endpoint: &endpoint,
}
} else {
c = nil
}
session := session.New(c)
// Fail early, if no credentials can be found
_, err := session.Config.Credentials.Get()
if err != nil {
return nil, err
}
d := dynamodb.New(session)
// Check if the table exists
_, err = d.DescribeTable(&dynamodb.DescribeTableInput{TableName: &table})
if err != nil {
return nil, err
}
return &Client{d, table}, nil
}
// GetValues retrieves the values for the given keys from DynamoDB
func (c *Client) GetValues(keys []string) (map[string]string, error) {
vars := make(map[string]string)
for _, key := range keys {
// Check if we can find the single item
m := make(map[string]*dynamodb.AttributeValue)
m["key"] = &dynamodb.AttributeValue{S: aws.String(key)}
g, err := c.client.GetItem(&dynamodb.GetItemInput{Key: m, TableName: &c.table})
if err != nil {
return vars, err
}
if g.Item != nil {
if val, ok := g.Item["value"]; ok {
if val.S != nil {
vars[key] = *val.S
} else {
log.Warning("Skipping key '%s'. 'value' is not of type 'string'.", key)
}
continue
}
}
// Check for nested keys
q, err := c.client.Scan(
&dynamodb.ScanInput{
ScanFilter: map[string]*dynamodb.Condition{
"key": &dynamodb.Condition{
AttributeValueList: []*dynamodb.AttributeValue{
&dynamodb.AttributeValue{S: aws.String(key)}},
ComparisonOperator: aws.String("BEGINS_WITH")}},
AttributesToGet: []*string{aws.String("key"), aws.String("value")},
TableName: aws.String(c.table),
Select: aws.String("SPECIFIC_ATTRIBUTES"),
})
if err != nil {
return vars, err
}
for _, i := range q.Items {
item := i
if val, ok := item["value"]; ok {
if val.S != nil {
vars[*item["key"].S] = *val.S
} else {
log.Warning("Skipping key '%s'. 'value' is not of type 'string'.", *item["key"].S)
}
continue
}
}
}
return vars, nil
}
// WatchPrefix is not implemented
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
<-stopChan
return 0, nil
}
================================================
FILE: backends/env/client.go
================================================
package env
import (
"fmt"
"os"
"strings"
"github.com/kelseyhightower/confd/log"
)
var replacer = strings.NewReplacer("/", "_")
// Client provides a shell for the env client
type Client struct{}
// NewEnvClient returns a new client
func NewEnvClient() (*Client, error) {
return &Client{}, nil
}
// GetValues queries the environment for keys
func (c *Client) GetValues(keys []string) (map[string]string, error) {
allEnvVars := os.Environ()
envMap := make(map[string]string)
for _, e := range allEnvVars {
index := strings.Index(e, "=")
envMap[e[:index]] = e[index+1:]
}
vars := make(map[string]string)
for _, key := range keys {
k := transform(key)
for envKey, envValue := range envMap {
if strings.HasPrefix(envKey, k) {
vars[clean(envKey)] = envValue
}
}
}
log.Debug(fmt.Sprintf("Key Map: %#v", vars))
return vars, nil
}
func transform(key string) string {
k := strings.TrimPrefix(key, "/")
return strings.ToUpper(replacer.Replace(k))
}
var cleanReplacer = strings.NewReplacer("_", "/")
func clean(key string) string {
newKey := "/" + key
return cleanReplacer.Replace(strings.ToLower(newKey))
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
<-stopChan
return 0, nil
}
================================================
FILE: backends/etcd/client.go
================================================
package etcd
import (
"context"
"crypto/tls"
"crypto/x509"
"io/ioutil"
"strings"
"time"
"github.com/kelseyhightower/confd/log"
clientv3 "go.etcd.io/etcd/client/v3"
"sync"
)
// A watch only tells the latest revision
type Watch struct {
// Last seen revision
revision int64
// A channel to wait, will be closed after revision changes
cond chan struct{}
// Use RWMutex to protect cond variable
rwl sync.RWMutex
}
// Wait until revision is greater than lastRevision
func (w *Watch) WaitNext(ctx context.Context, lastRevision int64, notify chan<- int64) {
for {
w.rwl.RLock()
if w.revision > lastRevision {
w.rwl.RUnlock()
break
}
cond := w.cond
w.rwl.RUnlock()
select {
case <-cond:
case <-ctx.Done():
return
}
}
// We accept larger revision, so do not need to use RLock
select {
case notify <- w.revision:
case <-ctx.Done():
}
}
// Update revision
func (w *Watch) update(newRevision int64) {
w.rwl.Lock()
defer w.rwl.Unlock()
w.revision = newRevision
close(w.cond)
w.cond = make(chan struct{})
}
func createWatch(client *clientv3.Client, prefix string) (*Watch, error) {
w := &Watch{0, make(chan struct{}), sync.RWMutex{}}
go func() {
rch := client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithCreatedNotify())
log.Debug("Watch created on %s", prefix)
for {
for wresp := range rch {
if wresp.CompactRevision > w.revision {
// respect CompactRevision
w.update(wresp.CompactRevision)
log.Debug("Watch to '%s' updated to %d by CompactRevision", prefix, wresp.CompactRevision)
} else if wresp.Header.GetRevision() > w.revision {
// Watch created or updated
w.update(wresp.Header.GetRevision())
log.Debug("Watch to '%s' updated to %d by header revision", prefix, wresp.Header.GetRevision())
}
if err := wresp.Err(); err != nil {
log.Error("Watch error: %s", err.Error())
}
}
log.Warning("Watch to '%s' stopped at revision %d", prefix, w.revision)
// Disconnected or cancelled
// Wait for a moment to avoid reconnecting
// too quickly
time.Sleep(time.Duration(1) * time.Second)
// Start from next revision so we are not missing anything
if w.revision > 0 {
rch = client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithRev(w.revision+1))
} else {
// Start from the latest revision
rch = client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithCreatedNotify())
}
}
}()
return w, nil
}
// Client is a wrapper around the etcd client
type Client struct {
client *clientv3.Client
watches map[string]*Watch
// Protect watch
wm sync.Mutex
}
// NewEtcdClient returns an *etcdv3.Client with a connection to named machines.
func NewEtcdClient(machines []string, cert, key, caCert string, basicAuth bool, username string, password string) (*Client, error) {
cfg := clientv3.Config{
Endpoints: machines,
DialTimeout: 5 * time.Second,
DialKeepAliveTime: 10 * time.Second,
DialKeepAliveTimeout: 3 * time.Second,
}
if basicAuth {
cfg.Username = username
cfg.Password = password
}
tlsEnabled := false
tlsConfig := &tls.Config{
InsecureSkipVerify: false,
}
if caCert != "" {
certBytes, err := ioutil.ReadFile(caCert)
if err != nil {
return &Client{}, err
}
caCertPool := x509.NewCertPool()
ok := caCertPool.AppendCertsFromPEM(certBytes)
if ok {
tlsConfig.RootCAs = caCertPool
}
tlsEnabled = true
}
if cert != "" && key != "" {
tlsCert, err := tls.LoadX509KeyPair(cert, key)
if err != nil {
return &Client{}, err
}
tlsConfig.Certificates = []tls.Certificate{tlsCert}
tlsEnabled = true
}
if tlsEnabled {
cfg.TLS = tlsConfig
}
client, err := clientv3.New(cfg)
if err != nil {
return &Client{}, err
}
return &Client{client, make(map[string]*Watch), sync.Mutex{}}, nil
}
// GetValues queries etcd for keys prefixed by prefix.
func (c *Client) GetValues(keys []string) (map[string]string, error) {
// Use all operations on the same revision
var first_rev int64 = 0
vars := make(map[string]string)
// Default ETCDv3 TXN limitation. Since it is configurable from v3.3,
// maybe an option should be added (also set max-txn=0 can disable Txn?)
maxTxnOps := 128
getOps := make([]string, 0, maxTxnOps)
doTxn := func(ops []string) error {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(3)*time.Second)
defer cancel()
txnOps := make([]clientv3.Op, 0, maxTxnOps)
for _, k := range ops {
txnOps = append(txnOps, clientv3.OpGet(k,
clientv3.WithPrefix(),
clientv3.WithSort(clientv3.SortByKey, clientv3.SortDescend),
clientv3.WithRev(first_rev)))
}
result, err := c.client.Txn(ctx).Then(txnOps...).Commit()
if err != nil {
return err
}
for i, r := range result.Responses {
originKey := ops[i]
// append a '/' if not already exists
originKeyFixed := originKey
if !strings.HasSuffix(originKeyFixed, "/") {
originKeyFixed = originKey + "/"
}
for _, ev := range r.GetResponseRange().Kvs {
k := string(ev.Key)
if k == originKey || strings.HasPrefix(k, originKeyFixed) {
vars[string(ev.Key)] = string(ev.Value)
}
}
}
if first_rev == 0 {
// Save the revison of the first request
first_rev = result.Header.GetRevision()
}
return nil
}
for _, key := range keys {
getOps = append(getOps, key)
if len(getOps) >= maxTxnOps {
if err := doTxn(getOps); err != nil {
return vars, err
}
getOps = getOps[:0]
}
}
if len(getOps) > 0 {
if err := doTxn(getOps); err != nil {
return vars, err
}
}
return vars, nil
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
var err error
// Create watch for each key
watches := make(map[string]*Watch)
c.wm.Lock()
for _, k := range keys {
watch, ok := c.watches[k]
if !ok {
watch, err = createWatch(c.client, k)
if err != nil {
c.wm.Unlock()
return 0, err
}
c.watches[k] = watch
}
watches[k] = watch
}
c.wm.Unlock()
ctx, cancel := context.WithCancel(context.Background())
cancelRoutine := make(chan struct{})
defer cancel()
defer close(cancelRoutine)
go func() {
select {
case <-stopChan:
cancel()
case <-cancelRoutine:
return
}
}()
notify := make(chan int64)
// Wait for all watches
for _, v := range watches {
go v.WaitNext(ctx, int64(waitIndex), notify)
}
select {
case nextRevision := <-notify:
return uint64(nextRevision), err
case <-ctx.Done():
return 0, ctx.Err()
}
return 0, err
}
================================================
FILE: backends/etcdv3/client.go
================================================
package etcdv3
import (
"context"
"crypto/tls"
"crypto/x509"
"io/ioutil"
"strings"
"time"
"github.com/kelseyhightower/confd/log"
clientv3 "go.etcd.io/etcd/client/v3"
"sync"
)
// A watch only tells the latest revision
type Watch struct {
// Last seen revision
revision int64
// A channel to wait, will be closed after revision changes
cond chan struct{}
// Use RWMutex to protect cond variable
rwl sync.RWMutex
}
// Wait until revision is greater than lastRevision
func (w *Watch) WaitNext(ctx context.Context, lastRevision int64, notify chan<- int64) {
for {
w.rwl.RLock()
if w.revision > lastRevision {
w.rwl.RUnlock()
break
}
cond := w.cond
w.rwl.RUnlock()
select {
case <-cond:
case <-ctx.Done():
return
}
}
// We accept larger revision, so do not need to use RLock
select {
case notify <- w.revision:
case <-ctx.Done():
}
}
// Update revision
func (w *Watch) update(newRevision int64) {
w.rwl.Lock()
defer w.rwl.Unlock()
w.revision = newRevision
close(w.cond)
w.cond = make(chan struct{})
}
func createWatch(client *clientv3.Client, prefix string) (*Watch, error) {
w := &Watch{0, make(chan struct{}), sync.RWMutex{}}
go func() {
rch := client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithCreatedNotify())
log.Debug("Watch created on %s", prefix)
for {
for wresp := range rch {
if wresp.CompactRevision > w.revision {
// respect CompactRevision
w.update(wresp.CompactRevision)
log.Debug("Watch to '%s' updated to %d by CompactRevision", prefix, wresp.CompactRevision)
} else if wresp.Header.GetRevision() > w.revision {
// Watch created or updated
w.update(wresp.Header.GetRevision())
log.Debug("Watch to '%s' updated to %d by header revision", prefix, wresp.Header.GetRevision())
}
if err := wresp.Err(); err != nil {
log.Error("Watch error: %s", err.Error())
}
}
log.Warning("Watch to '%s' stopped at revision %d", prefix, w.revision)
// Disconnected or cancelled
// Wait for a moment to avoid reconnecting
// too quickly
time.Sleep(time.Duration(1) * time.Second)
// Start from next revision so we are not missing anything
if w.revision > 0 {
rch = client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithRev(w.revision+1))
} else {
// Start from the latest revision
rch = client.Watch(context.Background(), prefix, clientv3.WithPrefix(),
clientv3.WithCreatedNotify())
}
}
}()
return w, nil
}
// Client is a wrapper around the etcd client
type Client struct {
client *clientv3.Client
watches map[string]*Watch
// Protect watch
wm sync.Mutex
}
// NewEtcdClient returns an *etcdv3.Client with a connection to named machines.
func NewEtcdClient(machines []string, cert, key, caCert string, basicAuth bool, username string, password string) (*Client, error) {
cfg := clientv3.Config{
Endpoints: machines,
DialTimeout: 5 * time.Second,
DialKeepAliveTime: 10 * time.Second,
DialKeepAliveTimeout: 3 * time.Second,
}
if basicAuth {
cfg.Username = username
cfg.Password = password
}
tlsEnabled := false
tlsConfig := &tls.Config{
InsecureSkipVerify: false,
}
if caCert != "" {
certBytes, err := ioutil.ReadFile(caCert)
if err != nil {
return &Client{}, err
}
caCertPool := x509.NewCertPool()
ok := caCertPool.AppendCertsFromPEM(certBytes)
if ok {
tlsConfig.RootCAs = caCertPool
}
tlsEnabled = true
}
if cert != "" && key != "" {
tlsCert, err := tls.LoadX509KeyPair(cert, key)
if err != nil {
return &Client{}, err
}
tlsConfig.Certificates = []tls.Certificate{tlsCert}
tlsEnabled = true
}
if tlsEnabled {
cfg.TLS = tlsConfig
}
client, err := clientv3.New(cfg)
if err != nil {
return &Client{}, err
}
return &Client{client, make(map[string]*Watch), sync.Mutex{}}, nil
}
// GetValues queries etcd for keys prefixed by prefix.
func (c *Client) GetValues(keys []string) (map[string]string, error) {
// Use all operations on the same revision
var first_rev int64 = 0
vars := make(map[string]string)
// Default ETCDv3 TXN limitation. Since it is configurable from v3.3,
// maybe an option should be added (also set max-txn=0 can disable Txn?)
maxTxnOps := 128
getOps := make([]string, 0, maxTxnOps)
doTxn := func(ops []string) error {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(3)*time.Second)
defer cancel()
txnOps := make([]clientv3.Op, 0, maxTxnOps)
for _, k := range ops {
txnOps = append(txnOps, clientv3.OpGet(k,
clientv3.WithPrefix(),
clientv3.WithSort(clientv3.SortByKey, clientv3.SortDescend),
clientv3.WithRev(first_rev)))
}
result, err := c.client.Txn(ctx).Then(txnOps...).Commit()
if err != nil {
return err
}
for i, r := range result.Responses {
originKey := ops[i]
// append a '/' if not already exists
originKeyFixed := originKey
if !strings.HasSuffix(originKeyFixed, "/") {
originKeyFixed = originKey + "/"
}
for _, ev := range r.GetResponseRange().Kvs {
k := string(ev.Key)
if k == originKey || strings.HasPrefix(k, originKeyFixed) {
vars[string(ev.Key)] = string(ev.Value)
}
}
}
if first_rev == 0 {
// Save the revison of the first request
first_rev = result.Header.GetRevision()
}
return nil
}
for _, key := range keys {
getOps = append(getOps, key)
if len(getOps) >= maxTxnOps {
if err := doTxn(getOps); err != nil {
return vars, err
}
getOps = getOps[:0]
}
}
if len(getOps) > 0 {
if err := doTxn(getOps); err != nil {
return vars, err
}
}
return vars, nil
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
var err error
// Create watch for each key
watches := make(map[string]*Watch)
c.wm.Lock()
for _, k := range keys {
watch, ok := c.watches[k]
if !ok {
watch, err = createWatch(c.client, k)
if err != nil {
c.wm.Unlock()
return 0, err
}
c.watches[k] = watch
}
watches[k] = watch
}
c.wm.Unlock()
ctx, cancel := context.WithCancel(context.Background())
cancelRoutine := make(chan struct{})
defer cancel()
defer close(cancelRoutine)
go func() {
select {
case <-stopChan:
cancel()
case <-cancelRoutine:
return
}
}()
notify := make(chan int64)
// Wait for all watches
for _, v := range watches {
go v.WaitNext(ctx, int64(waitIndex), notify)
}
select {
case nextRevision := <-notify:
return uint64(nextRevision), err
case <-ctx.Done():
return 0, ctx.Err()
}
return 0, err
}
================================================
FILE: backends/file/client.go
================================================
package file
import (
"fmt"
"io/ioutil"
"path"
"strconv"
"strings"
"github.com/fsnotify/fsnotify"
"github.com/kelseyhightower/confd/log"
util "github.com/kelseyhightower/confd/util"
"gopkg.in/yaml.v2"
)
var replacer = strings.NewReplacer("/", "_")
// Client provides a shell for the yaml client
type Client struct {
filepath []string
filter string
}
type ResultError struct {
response uint64
err error
}
func NewFileClient(filepath []string, filter string) (*Client, error) {
return &Client{filepath: filepath, filter: filter}, nil
}
func readFile(path string, vars map[string]string) error {
yamlMap := make(map[interface{}]interface{})
data, err := ioutil.ReadFile(path)
if err != nil {
return err
}
err = yaml.Unmarshal(data, &yamlMap)
if err != nil {
return err
}
err = nodeWalk(yamlMap, "/", vars)
if err != nil {
return err
}
return nil
}
func (c *Client) GetValues(keys []string) (map[string]string, error) {
vars := make(map[string]string)
var filePaths []string
for _, path := range c.filepath {
p, err := util.RecursiveFilesLookup(path, c.filter)
if err != nil {
return nil, err
}
filePaths = append(filePaths, p...)
}
for _, path := range filePaths {
err := readFile(path, vars)
if err != nil {
return nil, err
}
}
VarsLoop:
for k, _ := range vars {
for _, key := range keys {
if strings.HasPrefix(k, key) {
continue VarsLoop
}
}
delete(vars, k)
}
log.Debug(fmt.Sprintf("Key Map: %#v", vars))
return vars, nil
}
// nodeWalk recursively descends nodes, updating vars.
func nodeWalk(node interface{}, key string, vars map[string]string) error {
switch node.(type) {
case []interface{}:
for i, j := range node.([]interface{}) {
key := path.Join(key, strconv.Itoa(i))
nodeWalk(j, key, vars)
}
case map[interface{}]interface{}:
for k, v := range node.(map[interface{}]interface{}) {
key := path.Join(key, k.(string))
nodeWalk(v, key, vars)
}
case string:
vars[key] = node.(string)
case int:
vars[key] = strconv.Itoa(node.(int))
case bool:
vars[key] = strconv.FormatBool(node.(bool))
case float64:
vars[key] = strconv.FormatFloat(node.(float64), 'f', -1, 64)
}
return nil
}
func (c *Client) watchChanges(watcher *fsnotify.Watcher, stopChan chan bool) ResultError {
outputChannel := make(chan ResultError)
go func() error {
defer close(outputChannel)
for {
select {
case event := <-watcher.Events:
log.Debug(fmt.Sprintf("Event: %s", event))
if event.Op&fsnotify.Write == fsnotify.Write ||
event.Op&fsnotify.Remove == fsnotify.Remove ||
event.Op&fsnotify.Create == fsnotify.Create {
outputChannel <- ResultError{response: 1, err: nil}
}
case err := <-watcher.Errors:
outputChannel <- ResultError{response: 0, err: err}
case <-stopChan:
outputChannel <- ResultError{response: 1, err: nil}
}
}
}()
return <-outputChannel
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
if waitIndex == 0 {
return 1, nil
}
watcher, err := fsnotify.NewWatcher()
if err != nil {
return 0, err
}
defer watcher.Close()
for _, path := range c.filepath {
isDir, err := util.IsDirectory(path)
if err != nil {
return 0, err
}
if isDir {
dirs, err := util.RecursiveDirsLookup(path, "*")
if err != nil {
return 0, err
}
for _, dir := range dirs {
err = watcher.Add(dir)
if err != nil {
return 0, err
}
}
} else {
err = watcher.Add(path)
if err != nil {
return 0, err
}
}
}
output := c.watchChanges(watcher, stopChan)
if output.response != 2 {
return output.response, output.err
}
return waitIndex, nil
}
================================================
FILE: backends/rancher/client.go
================================================
package rancher
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"reflect"
"strconv"
"strings"
"time"
log "github.com/kelseyhightower/confd/log"
)
const (
MetaDataURL = "http://rancher-metadata"
)
type Client struct {
url string
httpClient *http.Client
}
func NewRancherClient(backendNodes []string) (*Client, error) {
url := MetaDataURL
if len(backendNodes) > 0 {
url = "http://" + backendNodes[0]
}
log.Info("Using Rancher Metadata URL: " + url)
client := &Client{
url: url,
httpClient: &http.Client{},
}
err := client.testConnection()
return client, err
}
func (c *Client) GetValues(keys []string) (map[string]string, error) {
vars := map[string]string{}
for _, key := range keys {
body, err := c.makeMetaDataRequest(key)
if err != nil {
return vars, err
}
var jsonResponse interface{}
if err = json.Unmarshal(body, &jsonResponse); err != nil {
return vars, err
}
if err = treeWalk(key, jsonResponse, vars); err != nil {
return vars, err
}
}
return vars, nil
}
func treeWalk(root string, val interface{}, vars map[string]string) error {
switch val.(type) {
case map[string]interface{}:
for k := range val.(map[string]interface{}) {
treeWalk(strings.Join([]string{root, k}, "/"), val.(map[string]interface{})[k], vars)
}
case []interface{}:
for i, item := range val.([]interface{}) {
idx := strconv.Itoa(i)
if i, isMap := item.(map[string]interface{}); isMap {
if name, exists := i["name"]; exists {
idx = name.(string)
}
}
treeWalk(strings.Join([]string{root, idx}, "/"), item, vars)
}
case bool:
vars[root] = strconv.FormatBool(val.(bool))
case string:
vars[root] = val.(string)
case float64:
vars[root] = strconv.FormatFloat(val.(float64), 'f', -1, 64)
case nil:
vars[root] = "null"
default:
log.Error("Unknown type: " + reflect.TypeOf(val).Name())
}
return nil
}
func (c *Client) makeMetaDataRequest(path string) ([]byte, error) {
req, _ := http.NewRequest("GET", strings.Join([]string{c.url, path}, ""), nil)
req.Header.Set("Accept", "application/json")
resp, err := c.httpClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
}
func (c *Client) testConnection() error {
var err error
maxTime := 20 * time.Second
for i := 1 * time.Second; i < maxTime; i *= time.Duration(2) {
if _, err = c.makeMetaDataRequest("/"); err != nil {
time.Sleep(i)
} else {
return nil
}
}
return err
}
type watchResponse struct {
waitIndex uint64
err error
}
type timeout interface {
Timeout() bool
}
func (c *Client) waitVersion(prefix string, version string) (string, error) {
// Long poll for 10 seconds
path := fmt.Sprintf("%s/version?wait=true&value=%s&maxWait=10", prefix, version)
for {
resp, err := c.makeMetaDataRequest(path)
if err != nil {
t, ok := err.(timeout)
if ok && t.Timeout() {
continue
}
return "", err
}
err = json.Unmarshal(resp, &version)
return version, err
}
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
// return something > 0 to trigger an initial retrieval from the store
if waitIndex == 0 {
return 1, nil
}
respChan := make(chan watchResponse)
go func() {
version := "init"
for {
newVersion, err := c.waitVersion(prefix, version)
if err != nil {
respChan <- watchResponse{0, err}
return
}
if version != newVersion && version != "init" {
respChan <- watchResponse{1, nil}
return
}
version = newVersion
}
}()
for {
select {
case <-stopChan:
return waitIndex, nil
case r := <-respChan:
return r.waitIndex, r.err
}
}
}
================================================
FILE: backends/redis/client.go
================================================
package redis
import (
"fmt"
"os"
"strconv"
"strings"
"time"
"github.com/garyburd/redigo/redis"
"github.com/kelseyhightower/confd/log"
)
type watchResponse struct {
waitIndex uint64
err error
}
// Client is a wrapper around the redis client
type Client struct {
client redis.Conn
machines []string
password string
separator string
psc redis.PubSubConn
pscChan chan watchResponse
}
// Iterate through `machines`, trying to connect to each in turn.
// Returns the first successful connection or the last error encountered.
// Assumes that `machines` is non-empty.
func tryConnect(machines []string, password string, timeout bool) (redis.Conn, int, error) {
var err error
for _, address := range machines {
var conn redis.Conn
var db int
idx := strings.Index(address, "/")
if idx != -1 {
// a database is provided
db, err = strconv.Atoi(address[idx+1:])
if err == nil {
address = address[:idx]
}
}
network := "tcp"
if _, err = os.Stat(address); err == nil {
network = "unix"
}
log.Debug(fmt.Sprintf("Trying to connect to redis node %s", address))
var dialops []redis.DialOption
if timeout {
dialops = []redis.DialOption{
redis.DialConnectTimeout(time.Second),
redis.DialReadTimeout(time.Second),
redis.DialWriteTimeout(time.Second),
redis.DialDatabase(db),
}
} else {
dialops = []redis.DialOption{
redis.DialConnectTimeout(time.Second),
redis.DialWriteTimeout(time.Second),
redis.DialDatabase(db),
}
}
if password != "" {
dialops = append(dialops, redis.DialPassword(password))
}
conn, err = redis.Dial(network, address, dialops...)
if err != nil {
continue
}
return conn, db, nil
}
return nil, 0, err
}
// Retrieves a connected redis client from the client wrapper.
// Existing connections will be tested with a PING command before being returned. Tries to reconnect once if necessary.
// Returns the established redis connection or the error encountered.
func (c *Client) connectedClient() (redis.Conn, error) {
if c.client != nil {
log.Debug("Testing existing redis connection.")
resp, err := c.client.Do("PING")
if (err != nil && err == redis.ErrNil) || resp != "PONG" {
log.Error(fmt.Sprintf("Existing redis connection no longer usable. "+
"Will try to re-establish. Error: %s", err.Error()))
c.client = nil
}
}
// Existing client could have been deleted by previous block
if c.client == nil {
var err error
c.client, _, err = tryConnect(c.machines, c.password, true)
if err != nil {
return nil, err
}
}
return c.client, nil
}
// NewRedisClient returns an *redis.Client with a connection to named machines.
// It returns an error if a connection to the cluster cannot be made.
func NewRedisClient(machines []string, password string, separator string) (*Client, error) {
if separator == "" {
separator = "/"
}
log.Debug(fmt.Sprintf("Redis Separator: %#v", separator))
var err error
clientWrapper := &Client{machines: machines, password: password, separator: separator, client: nil, pscChan: make(chan watchResponse), psc: redis.PubSubConn{Conn: nil} }
clientWrapper.client, _, err = tryConnect(machines, password, true)
return clientWrapper, err
}
func (c *Client) transform(key string) string {
if c.separator == "/" {
return key;
}
k := strings.TrimPrefix(key, "/")
return strings.Replace(k, "/", c.separator, -1);
}
func (c *Client) clean(key string) string {
k := key
if !strings.HasPrefix(k, "/") {
k = "/" + k
}
return strings.Replace(k, c.separator, "/", -1);
}
// GetValues queries redis for keys prefixed by prefix.
func (c *Client) GetValues(keys []string) (map[string]string, error) {
// Ensure we have a connected redis client
rClient, err := c.connectedClient()
if err != nil && err != redis.ErrNil {
return nil, err
}
vars := make(map[string]string)
for _, key := range keys {
key = strings.Replace(key, "/*", "", -1)
k := c.transform(key)
t, err := redis.String(rClient.Do("TYPE", k))
if err == nil && err != redis.ErrNil {
if t == "string" {
value, err := redis.String(rClient.Do("GET", k))
if err == nil {
vars[key] = value
continue
}
if err != redis.ErrNil {
return vars, err
}
} else if t == "hash" {
idx := 0
for {
values, err := redis.Values(rClient.Do("HSCAN", k, idx, "MATCH", "*", "COUNT", "1000"))
if err != nil && err != redis.ErrNil {
return vars, err
}
idx, _ = redis.Int(values[0], nil)
items, _ := redis.Strings(values[1], nil)
for i := 0; i < len(items); i+=2 {
var newKey, value string
if newKey, err = redis.String(items[i], nil); err != nil {
return vars, err
}
if value, err = redis.String(items[i+1], nil); err != nil {
return vars, err
}
vars[c.clean(k + "/" + newKey)] = value
}
if idx == 0 {
break
}
}
} else {
if key == "/" {
k = "*"
} else {
k = fmt.Sprintf(c.transform("%s/*"), k)
}
idx := 0
for {
values, err := redis.Values(rClient.Do("SCAN", idx, "MATCH", k, "COUNT", "1000"))
if err != nil && err != redis.ErrNil {
return vars, err
}
idx, _ = redis.Int(values[0], nil)
items, _ := redis.Strings(values[1], nil)
for _, item := range items {
var newKey string
if newKey, err = redis.String(item, nil); err != nil {
return vars, err
}
if value, err := redis.String(rClient.Do("GET", newKey)); err == nil {
vars[c.clean(newKey)] = value
}
}
if idx == 0 {
break
}
}
}
} else {
return vars, err
}
}
log.Debug(fmt.Sprintf("Key Map: %#v", vars))
return vars, nil
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
if waitIndex == 0 {
return 1, nil
}
if len(c.pscChan) > 0 {
var respChan watchResponse
for len(c.pscChan) > 0 {
respChan = <-c.pscChan
}
return respChan.waitIndex, respChan.err
}
go func() {
if c.psc.Conn == nil {
rClient, db, err := tryConnect(c.machines, c.password, false);
if err != nil {
c.psc = redis.PubSubConn{Conn: nil}
c.pscChan <- watchResponse{0, err}
return
}
c.psc = redis.PubSubConn{Conn: rClient}
go func() {
defer func() {
c.psc.Close()
c.psc = redis.PubSubConn{Conn: nil}
}()
for {
switch n := c.psc.Receive().(type) {
case redis.PMessage:
log.Debug(fmt.Sprintf("Redis Message: %s %s\n", n.Channel, n.Data))
data := string(n.Data)
commands := [12]string{"del", "append", "rename_from", "rename_to", "expire", "set", "incrby", "incrbyfloat", "hset", "hincrby", "hincrbyfloat", "hdel"}
for _, command := range commands {
if command == data {
c.pscChan <- watchResponse{1, nil}
break
}
}
case redis.Subscription:
log.Debug(fmt.Sprintf("Redis Subscription: %s %s %d\n", n.Kind, n.Channel, n.Count))
if n.Count == 0 {
c.pscChan <- watchResponse{0, nil}
return
}
case error:
log.Debug(fmt.Sprintf("Redis error: %v\n", n))
c.pscChan <- watchResponse{0, n}
return
}
}
}()
c.psc.PSubscribe("__keyspace@" + strconv.Itoa(db) + "__:" + c.transform(prefix) + "*")
}
}()
select {
case <-stopChan:
c.psc.PUnsubscribe()
return waitIndex, nil
case r := <- c.pscChan:
return r.waitIndex, r.err
}
}
================================================
FILE: backends/ssm/client.go
================================================
package ssm
import (
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ssm"
"github.com/kelseyhightower/confd/log"
)
type Client struct {
client *ssm.SSM
}
func New() (*Client, error) {
// Create a session to share configuration, and load external configuration.
sess := session.Must(session.NewSession())
// Fail early, if no credentials can be found
_, err := sess.Config.Credentials.Get()
if err != nil {
return nil, err
}
var c *aws.Config
if os.Getenv("SSM_LOCAL") != "" {
log.Debug("SSM_LOCAL is set")
endpoint := "http://localhost:8001"
c = &aws.Config{
Endpoint: &endpoint,
}
} else {
c = nil
}
// Create the service's client with the session.
svc := ssm.New(sess, c)
return &Client{svc}, nil
}
// GetValues retrieves the values for the given keys from AWS SSM Parameter Store
func (c *Client) GetValues(keys []string) (map[string]string, error) {
vars := make(map[string]string)
var err error
for _, key := range keys {
log.Debug("Processing key=%s", key)
var resp map[string]string
resp, err = c.getParametersWithPrefix(key)
if err != nil {
return vars, err
}
if len(resp) == 0 {
resp, err = c.getParameter(key)
if err != nil && err.(awserr.Error).Code() != ssm.ErrCodeParameterNotFound {
return vars, err
}
}
for k, v := range resp {
vars[k] = v
}
}
return vars, nil
}
func (c *Client) getParametersWithPrefix(prefix string) (map[string]string, error) {
var err error
parameters := make(map[string]string)
params := &ssm.GetParametersByPathInput{
Path: aws.String(prefix),
Recursive: aws.Bool(true),
WithDecryption: aws.Bool(true),
}
c.client.GetParametersByPathPages(params,
func(page *ssm.GetParametersByPathOutput, lastPage bool) bool {
for _, p := range page.Parameters {
parameters[*p.Name] = *p.Value
}
return !lastPage
})
return parameters, err
}
func (c *Client) getParameter(name string) (map[string]string, error) {
parameters := make(map[string]string)
params := &ssm.GetParameterInput{
Name: aws.String(name),
WithDecryption: aws.Bool(true),
}
resp, err := c.client.GetParameter(params)
if err != nil {
return parameters, err
}
parameters[*resp.Parameter.Name] = *resp.Parameter.Value
return parameters, nil
}
// WatchPrefix is not implemented
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
<-stopChan
return 0, nil
}
================================================
FILE: backends/vault/client.go
================================================
package vault
import (
"crypto/tls"
"crypto/x509"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"path"
vaultapi "github.com/hashicorp/vault/api"
"github.com/kelseyhightower/confd/log"
)
// Client is a wrapper around the vault client
type Client struct {
client *vaultapi.Client
}
// get a
func getParameter(key string, parameters map[string]string) string {
value := parameters[key]
if value == "" {
// panic if a configuration is missing
panic(fmt.Sprintf("%s is missing from configuration", key))
}
return value
}
// panicToError converts a panic to an error
func panicToError(err *error) {
if r := recover(); r != nil {
switch t := r.(type) {
case string:
*err = errors.New(t)
case error:
*err = t
default: // panic again if we don't know how to handle
panic(r)
}
}
}
// authenticate with the remote client
func authenticate(c *vaultapi.Client, authType string, params map[string]string) (err error) {
var secret *vaultapi.Secret
// handle panics gracefully by creating an error
// this would happen when we get a parameter that is missing
defer panicToError(&err)
path := params["path"]
if path == "" {
path = authType
if authType == "app-role" {
path = "approle"
}
}
url := fmt.Sprintf("/auth/%s/login", path)
switch authType {
case "app-role":
secret, err = c.Logical().Write(url, map[string]interface{}{
"role_id": getParameter("role-id", params),
"secret_id": getParameter("secret-id", params),
})
case "app-id":
secret, err = c.Logical().Write(url, map[string]interface{}{
"app_id": getParameter("app-id", params),
"user_id": getParameter("user-id", params),
})
case "github":
secret, err = c.Logical().Write(url, map[string]interface{}{
"token": getParameter("token", params),
})
case "token":
c.SetToken(getParameter("token", params))
secret, err = c.Logical().Read("/auth/token/lookup-self")
case "userpass":
username, password := getParameter("username", params), getParameter("password", params)
secret, err = c.Logical().Write(fmt.Sprintf("%s/%s", url, username), map[string]interface{}{
"password": password,
})
case "kubernetes":
jwt, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token")
if err != nil {
return err
}
secret, err = c.Logical().Write(url, map[string]interface{}{
"jwt": string(jwt[:]),
"role": getParameter("role-id", params),
})
case "cert":
secret, err = c.Logical().Write(url, map[string]interface{}{})
}
if err != nil {
return err
}
// if the token has already been set
if c.Token() != "" {
return nil
}
if secret == nil || secret.Auth == nil {
return errors.New("Unable to authenticate")
}
log.Debug("client authenticated with auth backend: %s", authType)
// the default place for a token is in the auth section
// otherwise, the backend will set the token itself
c.SetToken(secret.Auth.ClientToken)
return nil
}
func getConfig(address, cert, key, caCert string) (*vaultapi.Config, error) {
conf := vaultapi.DefaultConfig()
conf.Address = address
tlsConfig := &tls.Config{}
if cert != "" && key != "" {
clientCert, err := tls.LoadX509KeyPair(cert, key)
if err != nil {
return nil, err
}
tlsConfig.Certificates = []tls.Certificate{clientCert}
tlsConfig.BuildNameToCertificate()
}
if caCert != "" {
ca, err := ioutil.ReadFile(caCert)
if err != nil {
return nil, err
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(ca)
tlsConfig.RootCAs = caCertPool
}
conf.HttpClient.Transport = &http.Transport{
TLSClientConfig: tlsConfig,
}
return conf, nil
}
// New returns an *vault.Client with a connection to named machines.
// It returns an error if a connection to the cluster cannot be made.
func New(address, authType string, params map[string]string) (*Client, error) {
if authType == "" {
return nil, errors.New("you have to set the auth type when using the vault backend")
}
log.Info("Vault authentication backend set to %s", authType)
conf, err := getConfig(address, params["cert"], params["key"], params["caCert"])
if err != nil {
return nil, err
}
c, err := vaultapi.NewClient(conf)
if err != nil {
return nil, err
}
if err := authenticate(c, authType, params); err != nil {
return nil, err
}
return &Client{c}, nil
}
// GetValues queries etcd for keys prefixed by prefix.
func (c *Client) GetValues(keys []string) (map[string]string, error) {
branches := make(map[string]bool)
for _, key := range keys {
walkTree(c, key, branches)
}
vars := make(map[string]string)
for key := range branches {
log.Debug("getting %s from vault", key)
resp, err := c.client.Logical().Read(key)
if err != nil {
log.Debug("there was an error extracting %s", key)
return nil, err
}
if resp == nil || resp.Data == nil {
continue
}
// if the key has only one string value
// treat it as a string and not a map of values
if val, ok := isKV(resp.Data); ok {
vars[key] = val
} else {
// save the json encoded response
// and flatten it to allow usage of gets & getvs
js, _ := json.Marshal(resp.Data)
vars[key] = string(js)
flatten(key, resp.Data, vars)
}
}
return vars, nil
}
// isKV checks if a given map has only one key of type string
// if so, returns the value of that key
func isKV(data map[string]interface{}) (string, bool) {
if len(data) == 1 {
if value, ok := data["value"]; ok {
if text, ok := value.(string); ok {
return text, true
}
}
}
return "", false
}
// recursively walks on all the values of a specific key and set them in the variables map
func flatten(key string, value interface{}, vars map[string]string) {
switch value.(type) {
case string:
log.Debug("setting key %s to: %s", key, value)
vars[key] = value.(string)
case map[string]interface{}:
inner := value.(map[string]interface{})
for innerKey, innerValue := range inner {
innerKey = path.Join(key, "/", innerKey)
flatten(innerKey, innerValue, vars)
}
default: // we don't know how to handle non string or maps of strings
log.Warning("type of '%s' is not supported (%T)", key, value)
}
}
// recursively walk the branches in the Vault, adding to branches map
func walkTree(c *Client, key string, branches map[string]bool) error {
log.Debug("listing %s from vault", key)
// strip trailing slash as long as it's not the only character
if last := len(key) - 1; last > 0 && key[last] == '/' {
key = key[:last]
}
if branches[key] {
// already processed this branch
return nil
}
branches[key] = true
resp, err := c.client.Logical().List(key)
if err != nil {
log.Debug("there was an error extracting %s", key)
return err
}
if resp == nil || resp.Data == nil || resp.Data["keys"] == nil {
return nil
}
switch resp.Data["keys"].(type) {
case []interface{}:
// expected
default:
log.Warning("key list type of '%s' is not supported (%T)", key, resp.Data["keys"])
return nil
}
keyList := resp.Data["keys"].([]interface{})
for _, innerKey := range keyList {
switch innerKey.(type) {
case string:
innerKey = path.Join(key, "/", innerKey.(string))
walkTree(c, innerKey.(string), branches)
default: // we don't know how to handle other data types
log.Warning("type of '%s' is not supported (%T)", key, keyList)
}
}
return nil
}
// WatchPrefix - not implemented at the moment
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
<-stopChan
return 0, nil
}
================================================
FILE: backends/zookeeper/client.go
================================================
package zookeeper
import (
"path/filepath"
"strings"
"time"
"github.com/kelseyhightower/confd/log"
zk "github.com/samuel/go-zookeeper/zk"
)
// Client provides a wrapper around the zookeeper client
type Client struct {
client *zk.Conn
}
func NewZookeeperClient(machines []string) (*Client, error) {
c, _, err := zk.Connect(machines, time.Second) //*10)
if err != nil {
panic(err)
}
return &Client{c}, nil
}
func nodeWalk(prefix string, c *Client, vars map[string]string) error {
var s string
l, stat, err := c.client.Children(prefix)
if err != nil {
return err
}
if stat.NumChildren == 0 {
b, _, err := c.client.Get(prefix)
if err != nil {
return err
}
vars[prefix] = string(b)
} else {
for _, key := range l {
if prefix == "/" {
s = "/" + key
} else {
s = prefix + "/" + key
}
_, stat, err := c.client.Exists(s)
if err != nil {
return err
}
if stat.NumChildren == 0 {
b, _, err := c.client.Get(s)
if err != nil {
return err
}
vars[s] = string(b)
} else {
nodeWalk(s, c, vars)
}
}
}
return nil
}
func (c *Client) GetValues(keys []string) (map[string]string, error) {
vars := make(map[string]string)
for _, v := range keys {
v = strings.Replace(v, "/*", "", -1)
_, _, err := c.client.Exists(v)
if err != nil {
return vars, err
}
err = nodeWalk(v, c, vars)
if err != nil {
return vars, err
}
}
return vars, nil
}
type watchResponse struct {
waitIndex uint64
err error
}
func (c *Client) watch(key string, respChan chan watchResponse, cancelRoutine chan bool) {
_, _, keyEventCh, err := c.client.GetW(key)
if err != nil {
respChan <- watchResponse{0, err}
}
_, _, childEventCh, err := c.client.ChildrenW(key)
if err != nil {
respChan <- watchResponse{0, err}
}
for {
select {
case e := <-keyEventCh:
if e.Type == zk.EventNodeDataChanged {
respChan <- watchResponse{1, e.Err}
}
case e := <-childEventCh:
if e.Type == zk.EventNodeChildrenChanged {
respChan <- watchResponse{1, e.Err}
}
case <-cancelRoutine:
log.Debug("Stop watching: " + key)
// There is no way to stop GetW/ChildrenW so just quit
return
}
}
}
func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex uint64, stopChan chan bool) (uint64, error) {
// return something > 0 to trigger a key retrieval from the store
if waitIndex == 0 {
return 1, nil
}
// List the childrens first
entries, err := c.GetValues([]string{prefix})
if err != nil {
return 0, err
}
respChan := make(chan watchResponse)
cancelRoutine := make(chan bool)
defer close(cancelRoutine)
//watch all subfolders for changes
watchMap := make(map[string]string)
for k, _ := range entries {
for _, v := range keys {
if strings.HasPrefix(k, v) {
for dir := filepath.Dir(k); dir != "/"; dir = filepath.Dir(dir) {
if _, ok := watchMap[dir]; !ok {
watchMap[dir] = ""
log.Debug("Watching: " + dir)
go c.watch(dir, respChan, cancelRoutine)
}
}
break
}
}
}
//watch all keys in prefix for changes
for k, _ := range entries {
for _, v := range keys {
if strings.HasPrefix(k, v) {
log.Debug("Watching: " + k)
go c.watch(k, respChan, cancelRoutine)
break
}
}
}
for {
select {
case <-stopChan:
return waitIndex, nil
case r := <-respChan:
return r.waitIndex, r.err
}
}
}
================================================
FILE: confd.go
================================================
package main
import (
"flag"
"fmt"
"os"
"os/signal"
"runtime"
"syscall"
"github.com/kelseyhightower/confd/backends"
"github.com/kelseyhightower/confd/log"
"github.com/kelseyhightower/confd/resource/template"
)
func main() {
flag.Parse()
if config.PrintVersion {
fmt.Printf("confd %s (Git SHA: %s, Go Version: %s)\n", Version, GitSHA, runtime.Version())
os.Exit(0)
}
if err := initConfig(); err != nil {
log.Fatal(err.Error())
}
log.Info("Starting confd")
storeClient, err := backends.New(config.BackendsConfig)
if err != nil {
log.Fatal(err.Error())
}
config.TemplateConfig.StoreClient = storeClient
if config.OneTime {
if err := template.Process(config.TemplateConfig); err != nil {
log.Fatal(err.Error())
}
os.Exit(0)
}
stopChan := make(chan bool)
doneChan := make(chan bool)
errChan := make(chan error, 10)
var processor template.Processor
switch {
case config.Watch:
processor = template.WatchProcessor(config.TemplateConfig, stopChan, doneChan, errChan)
default:
processor = template.IntervalProcessor(config.TemplateConfig, stopChan, doneChan, errChan, config.Interval)
}
go processor.Process()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case err := <-errChan:
log.Error(err.Error())
case s := <-signalChan:
log.Info(fmt.Sprintf("Captured %v. Exiting...", s))
close(doneChan)
case <-doneChan:
os.Exit(0)
}
}
}
================================================
FILE: config.go
================================================
package main
import (
"errors"
"flag"
"fmt"
"net"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/BurntSushi/toml"
"github.com/kelseyhightower/confd/backends"
"github.com/kelseyhightower/confd/log"
"github.com/kelseyhightower/confd/resource/template"
)
type TemplateConfig = template.Config
type BackendsConfig = backends.Config
// A Config structure is used to configure confd.
type Config struct {
TemplateConfig
BackendsConfig
Interval int `toml:"interval"`
SRVDomain string `toml:"srv_domain"`
SRVRecord string `toml:"srv_record"`
LogLevel string `toml:"log-level"`
Watch bool `toml:"watch"`
PrintVersion bool
ConfigFile string
OneTime bool
}
var config Config
func init() {
flag.StringVar(&config.AuthToken, "auth-token", "", "Auth bearer token to use")
flag.StringVar(&config.Backend, "backend", "etcd", "backend to use")
flag.BoolVar(&config.BasicAuth, "basic-auth", false, "Use Basic Auth to authenticate (only used with -backend=consul and -backend=etcd)")
flag.StringVar(&config.ClientCaKeys, "client-ca-keys", "", "client ca keys")
flag.StringVar(&config.ClientCert, "client-cert", "", "the client cert")
flag.StringVar(&config.ClientKey, "client-key", "", "the client key")
flag.BoolVar(&config.ClientInsecure, "client-insecure", false, "Allow connections to SSL sites without certs (only used with -backend=etcd)")
flag.StringVar(&config.ConfDir, "confdir", "/etc/confd", "confd conf directory")
flag.StringVar(&config.ConfigFile, "config-file", "/etc/confd/confd.toml", "the confd config file")
flag.Var(&config.YAMLFile, "file", "the YAML file to watch for changes (only used with -backend=file)")
flag.StringVar(&config.Filter, "filter", "*", "files filter (only used with -backend=file)")
flag.IntVar(&config.Interval, "interval", 600, "backend polling interval")
flag.BoolVar(&config.KeepStageFile, "keep-stage-file", false, "keep staged files")
flag.StringVar(&config.LogLevel, "log-level", "", "level which confd should log messages")
flag.Var(&config.BackendNodes, "node", "list of backend nodes")
flag.BoolVar(&config.Noop, "noop", false, "only show pending changes")
flag.BoolVar(&config.OneTime, "onetime", false, "run once and exit")
flag.StringVar(&config.Prefix, "prefix", "", "key path prefix")
flag.BoolVar(&config.PrintVersion, "version", false, "print version and exit")
flag.StringVar(&config.Scheme, "scheme", "http", "the backend URI scheme for nodes retrieved from DNS SRV records (http or https)")
flag.StringVar(&config.SRVDomain, "srv-domain", "", "the name of the resource record")
flag.StringVar(&config.SRVRecord, "srv-record", "", "the SRV record to search for backends nodes. Example: _etcd-client._tcp.example.com")
flag.BoolVar(&config.SyncOnly, "sync-only", false, "sync without check_cmd and reload_cmd")
flag.StringVar(&config.AuthType, "auth-type", "", "Vault auth backend type to use (only used with -backend=vault)")
flag.StringVar(&config.AppID, "app-id", "", "Vault app-id to use with the app-id backend (only used with -backend=vault and auth-type=app-id)")
flag.StringVar(&config.UserID, "user-id", "", "Vault user-id to use with the app-id backend (only used with -backend=value and auth-type=app-id)")
flag.StringVar(&config.RoleID, "role-id", "", "Vault role-id to use with the AppRole, Kubernetes backends (only used with -backend=vault and either auth-type=app-role or auth-type=kubernetes)")
flag.StringVar(&config.SecretID, "secret-id", "", "Vault secret-id to use with the AppRole backend (only used with -backend=vault and auth-type=app-role)")
flag.StringVar(&config.Path, "path", "", "Vault mount path of the auth method (only used with -backend=vault)")
flag.StringVar(&config.Table, "table", "", "the name of the DynamoDB table (only used with -backend=dynamodb)")
flag.StringVar(&config.Separator, "separator", "", "the separator to replace '/' with when looking up keys in the backend, prefixed '/' will also be removed (only used with -backend=redis)")
flag.StringVar(&config.Username, "username", "", "the username to authenticate as (only used with vault and etcd backends)")
flag.StringVar(&config.Password, "password", "", "the password to authenticate with (only used with vault and etcd backends)")
flag.BoolVar(&config.Watch, "watch", false, "enable watch support")
}
// initConfig initializes the confd configuration by first setting defaults,
// then overriding settings from the confd config file, then overriding
// settings from environment variables, and finally overriding
// settings from flags set on the command line.
// It returns an error if any.
func initConfig() error {
_, err := os.Stat(config.ConfigFile)
if os.IsNotExist(err) {
log.Debug("Skipping confd config file.")
} else {
log.Debug("Loading " + config.ConfigFile)
configBytes, err := os.ReadFile(config.ConfigFile)
if err != nil {
return err
}
_, err = toml.Decode(string(configBytes), &config)
if err != nil {
return err
}
}
// Update config from environment variables.
processEnv()
if config.LogLevel != "" {
log.SetLevel(config.LogLevel)
}
if config.SRVDomain != "" && config.SRVRecord == "" {
config.SRVRecord = fmt.Sprintf("_%s._tcp.%s.", config.Backend, config.SRVDomain)
}
// Update BackendNodes from SRV records.
if config.Backend != "env" && config.SRVRecord != "" {
log.Info("SRV record set to " + config.SRVRecord)
srvNodes, err := getBackendNodesFromSRV(config.SRVRecord)
if err != nil {
return errors.New("Cannot get nodes from SRV records " + err.Error())
}
switch config.Backend {
case "etcd":
vsm := make([]string, len(srvNodes))
for i, v := range srvNodes {
vsm[i] = config.Scheme + "://" + v
}
srvNodes = vsm
}
config.BackendNodes = srvNodes
}
if len(config.BackendNodes) == 0 {
switch config.Backend {
case "consul":
config.BackendNodes = []string{"127.0.0.1:8500"}
case "etcd":
peerstr := os.Getenv("ETCDCTL_PEERS")
if len(peerstr) > 0 {
config.BackendNodes = strings.Split(peerstr, ",")
} else {
config.BackendNodes = []string{"http://127.0.0.1:4001"}
}
case "etcdv3":
config.BackendNodes = []string{"127.0.0.1:2379"}
case "redis":
config.BackendNodes = []string{"127.0.0.1:6379"}
case "vault":
config.BackendNodes = []string{"http://127.0.0.1:8200"}
case "zookeeper":
config.BackendNodes = []string{"127.0.0.1:2181"}
}
}
// Initialize the storage client
log.Info("Backend set to " + config.Backend)
if config.Watch {
unsupportedBackends := map[string]bool{
"dynamodb": true,
"ssm": true,
}
if unsupportedBackends[config.Backend] {
log.Info(fmt.Sprintf("Watch is not supported for backend %s. Exiting...", config.Backend))
os.Exit(1)
}
}
if config.Backend == "dynamodb" && config.Table == "" {
return errors.New("no DynamoDB table configured")
}
config.ConfigDir = filepath.Join(config.ConfDir, "conf.d")
config.TemplateDir = filepath.Join(config.ConfDir, "templates")
return nil
}
func getBackendNodesFromSRV(record string) ([]string, error) {
nodes := make([]string, 0)
// Ignore the CNAME as we don't need it.
_, addrs, err := net.LookupSRV("", "", record)
if err != nil {
return nodes, err
}
for _, srv := range addrs {
host := strings.TrimRight(srv.Target, ".")
port := strconv.FormatUint(uint64(srv.Port), 10)
nodes = append(nodes, net.JoinHostPort(host, port))
}
return nodes, nil
}
func processEnv() {
cakeys := os.Getenv("CONFD_CLIENT_CAKEYS")
if len(cakeys) > 0 && config.ClientCaKeys == "" {
config.ClientCaKeys = cakeys
}
cert := os.Getenv("CONFD_CLIENT_CERT")
if len(cert) > 0 && config.ClientCert == "" {
config.ClientCert = cert
}
key := os.Getenv("CONFD_CLIENT_KEY")
if len(key) > 0 && config.ClientKey == "" {
config.ClientKey = key
}
}
================================================
FILE: config_test.go
================================================
package main
import (
"reflect"
"testing"
"github.com/kelseyhightower/confd/log"
)
func TestInitConfigDefaultConfig(t *testing.T) {
log.SetLevel("warn")
want := Config{
BackendsConfig: BackendsConfig{
Backend: "etcd",
BackendNodes: []string{"http://127.0.0.1:4001"},
Scheme: "http",
Filter: "*",
},
TemplateConfig: TemplateConfig{
ConfDir: "/etc/confd",
ConfigDir: "/etc/confd/conf.d",
TemplateDir: "/etc/confd/templates",
Noop: false,
},
ConfigFile: "/etc/confd/confd.toml",
Interval: 600,
}
if err := initConfig(); err != nil {
t.Errorf(err.Error())
}
if !reflect.DeepEqual(want, config) {
t.Errorf("initConfig() = %v, want %v", config, want)
}
}
================================================
FILE: contrib/etcd/Procfile
================================================
# Use goreman to run `go get github.com/mattn/goreman`
etcd0: /usr/local/bin/etcd --name etcd0 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:2380 --initial-advertise-peer-urls http://127.0.0.1:2380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'etcd0=http://127.0.0.1:2380,etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380,etcd4=http://127.0.0.1:42380' --initial-cluster-state new --data-dir=/tmp/etcd0
etcd1: /usr/local/bin/etcd --name etcd1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'etcd0=http://127.0.0.1:2380,etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380,etcd4=http://127.0.0.1:42380' --initial-cluster-state new --data-dir=/tmp/etcd1
etcd2: /usr/local/bin/etcd --name etcd2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'etcd0=http://127.0.0.1:2380,etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380,etcd4=http://127.0.0.1:42380' --initial-cluster-state new --data-dir=/tmp/etcd2
etcd3: /usr/local/bin/etcd --name etcd3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'etcd0=http://127.0.0.1:2380,etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380,etcd4=http://127.0.0.1:42380' --initial-cluster-state new --data-dir=/tmp/etcd3
etcd4: /usr/local/bin/etcd --name etcd4 --listen-client-urls http://127.0.0.1:42379 --advertise-client-urls http://127.0.0.1:42379 --listen-peer-urls http://127.0.0.1:42380 --initial-advertise-peer-urls http://127.0.0.1:42380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'etcd0=http://127.0.0.1:2380,etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380,etcd4=http://127.0.0.1:42380' --initial-cluster-state new --data-dir=/tmp/etcd4
================================================
FILE: contrib/generate-changelog.sh
================================================
#!/usr/bin/env bash
# Generates a changelog of all merges from a given release all the way to HEAD.
REPO=https://github.com/kelseyhightower/confd
usage() {
echo "Usage: $0 <FROM> [TO]"
}
# Print usage summary if user didn't specify a beginning
if [ -z "$1" ];
then
usage
exit 1
fi
FROM=$1
TO=${2:-HEAD}
printf "### $TO\n\n"
git --no-pager log --merges --format="%h %b" $FROM..$TO
================================================
FILE: docs/command-line-flags.md
================================================
# Command Line Flags
Command line flags override the confd [configuration file](configuration-guide.md).
```
confd -h
```
```Text
Usage of confd:
-app-id string
Vault app-id to use with the app-id backend (only used with -backend=vault and auth-type=app-id)
-auth-token string
Auth bearer token to use
-auth-type string
Vault auth backend type to use (only used with -backend=vault)
-backend string
backend to use (default "etcd")
-basic-auth
Use Basic Auth to authenticate (only used with -backend=consul and -backend=etcd)
-client-ca-keys string
client ca keys
-client-cert string
the client cert
-client-key string
the client key
-confdir string
confd conf directory (default "/etc/confd")
-config-file string
the confd config file (default "/etc/confd/confd.toml")
-file value
the YAML file to watch for changes (only used with -backend=file)
-filter string
files filter (only used with -backend=file) (default "*")
-interval int
backend polling interval (default 600)
-keep-stage-file
keep staged files
-log-level string
level which confd should log messages
-node value
list of backend nodes
-noop
only show pending changes
-onetime
run once and exit
-password string
the password to authenticate with (only used with vault and etcd backends)
-path string
Vault mount path of the auth method (only used with -backend=vault)
-prefix string
key path prefix
-role-id string
Vault role-id to use with the AppRole, Kubernetes backends (only used with -backend=vault and either auth-type=app-role or auth-type=kubernetes)
-scheme string
the backend URI scheme for nodes retrieved from DNS SRV records (http or https) (default "http")
-secret-id string
Vault secret-id to use with the AppRole backend (only used with -backend=vault and auth-type=app-role)
-secret-keyring string
path to armored PGP secret keyring (for use with crypt functions)
-separator string
the separator to replace '/' with when looking up keys in the backend, prefixed '/' will also be removed (only used with -backend=redis)
-srv-domain string
the name of the resource record
-srv-record string
the SRV record to search for backends nodes. Example: _etcd-client._tcp.example.com
-sync-only
sync without check_cmd and reload_cmd
-table string
the name of the DynamoDB table (only used with -backend=dynamodb)
-user-id string
Vault user-id to use with the app-id backend (only used with -backend=value and auth-type=app-id)
-username string
the username to authenticate as (only used with vault and etcd backends)
-version
print version and exit
-watch
enable watch support
```
> The -scheme flag is only used to set the URL scheme for nodes retrieved from DNS SRV records.
================================================
FILE: docs/configuration-guide.md
================================================
# Configuration Guide
The confd configuration file is written in [TOML](https://github.com/mojombo/toml)
and loaded from `/etc/confd/confd.toml` by default. You can specify the config file via the `-config-file` command line flag.
> Note: You can use confd without a configuration file. See [Command Line Flags](https://github.com/kelseyhightower/confd/blob/master/docs/command-line-flags.md).
Optional:
* `backend` (string) - The backend to use. ("etcd")
* `client_cakeys` (string) - The client CA key file.
* `client_cert` (string) - The client cert file.
* `client_key` (string) - The client key file.
* `confdir` (string) - The path to confd configs. ("/etc/confd")
* `interval` (int) - The backend polling interval in seconds. (600)
* `log-level` (string) - level which confd should log messages ("info")
* `nodes` (array of strings) - List of backend nodes. (["http://127.0.0.1:4001"])
* `noop` (bool) - Enable noop mode. Process all template resources; skip target update.
* `prefix` (string) - The string to prefix to keys. ("/")
* `scheme` (string) - The backend URI scheme. ("http" or "https")
* `srv_domain` (string) - The name of the resource record.
* `srv_record` (string) - The SRV record to search for backends nodes.
* `sync-only` (bool) - sync without check_cmd and reload_cmd.
* `watch` (bool) - Enable watch support.
* `auth_token` (string) - Auth bearer token to use.
* `auth_type` (string) - Vault auth backend type to use.
* `basic_auth` (bool) - Use Basic Auth to authenticate (only used with -backend=consul and -backend=etcd).
* `table` (string) - The name of the DynamoDB table (only used with -backend=dynamodb).
* `separator` (string) - The separator to replace '/' with when looking up keys in the backend, prefixed '/' will also be removed (only used with -backend=redis)
* `username` (string) - The username to authenticate as (only used with vault and etcd backends).
* `password` (string) - The password to authenticate with (only used with vault and etcd backends).
* `app_id` (string) - Vault app-id to use with the app-id backend (only used with -backend=vault and auth-type=app-id).
* `user_id` (string) - Vault user-id to use with the app-id backend (only used with -backend=value and auth-type=app-id).
* `role_id` (string) - Vault role-id to use with the AppRole, Kubernetes backends (only used with -backend=vault and either auth-type=app-role or auth-type=kubernetes).
* `secret_id` (string) - Vault secret-id to use with the AppRole backend (only used with -backend=vault and auth-type=app-role).
* `file` (array of strings) - The YAML file to watch for changes (only used with -backend=file).
* `filter` (string) - Files filter (only used with -backend=file) (default "*").
* `path` (string) - Vault mount path of the auth method (only used with -backend=vault).
Example:
```TOML
backend = "etcd"
client_cert = "/etc/confd/ssl/client.crt"
client_key = "/etc/confd/ssl/client.key"
confdir = "/etc/confd"
log-level = "debug"
interval = 600
nodes = [
"http://127.0.0.1:4001",
]
noop = false
prefix = "/production"
scheme = "https"
srv_domain = "etcd.example.com"
```
================================================
FILE: docs/data_encryption.md
================================================
Encrypting your data
====================
This example is shown using etcd, but any of the supported backends *should* work.
## Creating PGP keys
[`crypt`](https://github.com/xordataexchange/crypt), unlike gpg, requires your keypair to be in ASCII armor format.
For the purpose of this example you can use [the pair provided below](#local-testing-keypair-sample), or you can
[create your own](#local-testing-keypair-generating).
### Using my sample key pair (unsafe for anything other than local testing)
save the following as `.pubring.gpg`
```no-highlight
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFUbhEMBCADHqlGZuIDSyw7ZXngMJYltREr8llsfdSR8kmEaoCp2ts3rqzZ2
hRX6xLrRnV0gB8+H1y+1Ly5IqR5guAG2Gs5j4ds6R4xtwHN9OnXXqTfqlXroUg55
/1RjEIxaso5GPY6+DO7GVYMY1hXgiLhlkvpdUAcZeZNS/HR/ytw7dDPaM51DTREm
XZ1+IHaNgIFtHtbHx44TZ4a0CvFSefRJXV6/o7ik9GLE6CyBsb80vXN1KiRLL5kl
ItPWqlF1mH2SvKAxfn0xQuGWenoiILq7Nj79XVcrKOVdrQ7m/oXiW/Rp8pzMcFNo
a2KuQkHI3+PPQnCR0qPXNSPQM0bF8hXLHMQpABEBAAG0LWFwcCAoYXBwIGNvbmZp
Z3VyYXRpb24ga2V5KSA8YXBwQGV4YW1wbGUuY29tPokBNwQTAQoAIQUCVRuEQwIb
AwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRCvl84Mdvp1vzfqB/9YNCDixrE5
AfJTsK9qzhyENHpssd0z0zKNTKCKSU/Qe86tTE6OixFHJPquSJNvz74pY/6skC5C
1fAMBMSzTiie4jsKS5jj0OpXbMTCgRChN+p0zHXOmVkP80mE3+YifCruhhMriJO5
obhk81e6QiwKqiiijwpDKH/hT2oWTrKjxEC11pVtZ4GGwQlttfWr1csGWfK7ge5M
BH/RAKL4YBPWw5HPud5rXV8GItId1TQZsGYrW3lsDOytDAzIPypvkvX5+ZcyHgVs
HmpjjVj1zWfVLq0xKwkDYsf+W5k3wedmbCGbZWIfE2U1iBr3mSvJWpqSYw5VhgJ4
xOQTNPE2I+3GuQENBFUbhEMBCACfnBVTyoHtRe/D3ie7plkxBmzMfHlKbw4E7JPR
7/KIXARYSfUPdxgtekGZSTJ+I+CLqaGQncpcGGoTPe7gV/EH1j3VJNKh9z3pdXYP
TgWM+BhLCdoE58eBDnoSIoNkZDbwxTt+bCHXz2Nl4nCXDZWW23WE3gbr+sNPL3e2
/A4lGeCJYgS1ZMxRn74HkXNV6BnR/pgHnuZkN+Psz0XAqACPHIlYmWjI9WA5hTFA
hT7pvsYbGZKTFu1nGqdL2S7vT5cRt6s61nolJ9zm2fjRKZAHBGIh/+ha9KqMqABy
DD+vgkWRubcshSXJuhbbKSt8VICKFtkYqRxyJ5YRX4hIh73TABEBAAGJAR8EGAEK
AAkFAlUbhEMCGwwACgkQr5fODHb6db8dYwgAjtaNFTRswtRfK6O/M9utcZNgkXrY
9jO5KqrRCIFRNpjqpH9ELVVzqsyCjhYGjV9nQmcKe6t6ngbN/NvZElylJNxzI5S1
X2zJEjiFR30CMH1iV4YDA4uymRXRk5E/MtChv/2jZkoLNNZjIAgWpbfsKBI/iyWW
3plHWaquDB+q10kf9YY0t4L8t50Q11vUsTlaeQW96OzdwCJwopmFzb1DWWv89lJm
nqa+WVcyIIcWzb5yk7BaAVEcBAazSQRIVKL1CbF3CT5B+bCxrSZW/J1ujss6NbkO
Wkuw67YL468ms6fPlLihzyCcxFE1S5c6k4PKXuixcFF4/tvn+7i40vL9yw==
=oNlb
-----END PGP PUBLIC KEY BLOCK-----
```
save the following as `.secring.gpg`
```no-highlight
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQOYBFUbhEMBCADHqlGZuIDSyw7ZXngMJYltREr8llsfdSR8kmEaoCp2ts3rqzZ2
hRX6xLrRnV0gB8+H1y+1Ly5IqR5guAG2Gs5j4ds6R4xtwHN9OnXXqTfqlXroUg55
/1RjEIxaso5GPY6+DO7GVYMY1hXgiLhlkvpdUAcZeZNS/HR/ytw7dDPaM51DTREm
XZ1+IHaNgIFtHtbHx44TZ4a0CvFSefRJXV6/o7ik9GLE6CyBsb80vXN1KiRLL5kl
ItPWqlF1mH2SvKAxfn0xQuGWenoiILq7Nj79XVcrKOVdrQ7m/oXiW/Rp8pzMcFNo
a2KuQkHI3+PPQnCR0qPXNSPQM0bF8hXLHMQpABEBAAEAB/0UKGlZnCuBXJfQsT1s
eIOx4OGzM5jaibCX1Q1xqzbuSlFq2BvFBnWsHh2AWSNUPwWgQMTjxXImStCy0hD2
KimpIt3Huf5+/B2MyJCqJ77p85J3jwVAItuJrtuEsp8zjzZwkIywwGReZwrJYvQ+
6QJW1mQJGeGaULuQRVJLvFUZ08tUg73RIdHaiLauBu+jjcWL0HrpA7sK+EiMcSgJ
PqgD2myHy7e3+7Cp+gGn5dvA4l6eVLvujg55b79kcae/N7lV1I/+nvNCkx7bWubg
OlTu4I8MzH7KEI0CF3hHD0Oo8qGQH4P0fxAhCyHxrq342JEdx4HD2iJVwFdP4ZzG
yFwBBADN516627Ijgz5NJFBTDtZMDTaJbXwzWJGBDz2sisVMjC2XUyBnxa0i45/N
vzGhqa+IgBg0HJtuohyUq6dukzpcWv8h/N+3VzXRSYY3XUxWlQzat+TFKfLxlCAW
yS2syJywjLE3r0OCR7M7XgDNp8hOoynzbZlzA/jUC8WyJUZRKQQA+D5jNdC6uKpT
a/0yXFpl+2TiR70g5CuoqQ1yZAMgwcMCCrcrf9Dh1FVS+letEZZQAm7lZUEYhlM/
GrRF0tGkQMxsIi+mW1hiJRWXFH4J5jGp2J47G3q7QMxIVjMQRC2yJI3cZPwIYIql
vLzBp+wQuE+1/0VDANW4XbWXZyJSOwEEAPMPb9S7s94RRvDUXWAWhDi3U9Ak4A3Z
ovdFZNMR6hQ5fS0LObwGWbGpu9d11yoOOpM7VK6+0y7BfZLDaDKdTEVArCZ1SoRY
6gbwUTSAm/JYFSFMHgFcSMrHH35cEL08SFGRJzpSt72M0IsQfj29IhXfBMOUe0rD
eXZEIafzrIYbOLC0LWFwcCAoYXBwIGNvbmZpZ3VyYXRpb24ga2V5KSA8YXBwQGV4
YW1wbGUuY29tPokBNwQTAQoAIQUCVRuEQwIbAwULCQgHAwUVCgkICwUWAgMBAAIe
AQIXgAAKCRCvl84Mdvp1vzfqB/9YNCDixrE5AfJTsK9qzhyENHpssd0z0zKNTKCK
SU/Qe86tTE6OixFHJPquSJNvz74pY/6skC5C1fAMBMSzTiie4jsKS5jj0OpXbMTC
gRChN+p0zHXOmVkP80mE3+YifCruhhMriJO5obhk81e6QiwKqiiijwpDKH/hT2oW
TrKjxEC11pVtZ4GGwQlttfWr1csGWfK7ge5MBH/RAKL4YBPWw5HPud5rXV8GItId
1TQZsGYrW3lsDOytDAzIPypvkvX5+ZcyHgVsHmpjjVj1zWfVLq0xKwkDYsf+W5k3
wedmbCGbZWIfE2U1iBr3mSvJWpqSYw5VhgJ4xOQTNPE2I+3GnQOYBFUbhEMBCACf
nBVTyoHtRe/D3ie7plkxBmzMfHlKbw4E7JPR7/KIXARYSfUPdxgtekGZSTJ+I+CL
qaGQncpcGGoTPe7gV/EH1j3VJNKh9z3pdXYPTgWM+BhLCdoE58eBDnoSIoNkZDbw
xTt+bCHXz2Nl4nCXDZWW23WE3gbr+sNPL3e2/A4lGeCJYgS1ZMxRn74HkXNV6BnR
/pgHnuZkN+Psz0XAqACPHIlYmWjI9WA5hTFAhT7pvsYbGZKTFu1nGqdL2S7vT5cR
t6s61nolJ9zm2fjRKZAHBGIh/+ha9KqMqAByDD+vgkWRubcshSXJuhbbKSt8VICK
FtkYqRxyJ5YRX4hIh73TABEBAAEAB/4g9azrzDZPZrFQC8i9tejWOGLwSUYMymkl
OCuAX2IAqavWBZO/GVNbVNNGEbkFFmiQvrtX71Wx9fK1vYTePBrQiPvkz4FVpAZb
dv+lwnFf/n2ZxVOJzslCi9hGdW0XpqA30SrrfO3yMGfwyrWAY/Q/nlsi0Gyyf2qk
qAM7PMq4+08CwuOwHOorS+ibLARX778ug5JKqiJhAt5s+sXQFId7cnozU24MDrOc
JvBgsCaPO1NbPYE+whIsWTigmc4YCAiIlKjPghxAS8kFOaO2FnGAzeS0S8o02R+f
/JNL24+z7kpY7JxUe9c1+n5DD88fRllBCmWr0HtSFFMgsQ0ZZ6E9BADFpse6Jm/i
q6qb9WJKHJAg+w3klBHwB+P18oGtinzCvnaSSayJRjUDmmJMURvR1FUZHNsxhm4D
3yGlr3XAAES6ijaajRRzl2q7yG63quN72FGH/sBE57KatXtI30hds62HJlZks16I
QxaFpaqRSYIPf5yQFseLn7YboXqSR2QgzQQAzrpZ7jECITDxCiQHdyitSl9IOqYw
sti73WkBYFr5GApJQ6mW9XthAMI762vGUWlm8NMi/S1lwI+A1VAcXyHsk16TYL9B
uQcyqHjkKrrPE5AePPrTPXsVQoFIXfDk3JfBhRclcWsG3HGtFj6LZUKsmXncoCZD
YL7tu9RYM4oC2R8D/Rai2XkEnmJkxbdogm4k8ZHYWbxPemZtaa/nBdlB9WEmFKDv
86rkS+JHJouc+h7fIT4WaL/e2589w7RimdUw+5b4zA5mvFdqT2zYWBEKbmZwoGOM
pYGIYa2v01mCgO/fy55lrZFQdVGP0nz5ob1R3Eaoh5rTClxiWe6KYjgr1UmgP9uJ
AR8EGAEKAAkFAlUbhEMCGwwACgkQr5fODHb6db8dYwgAjtaNFTRswtRfK6O/M9ut
cZNgkXrY9jO5KqrRCIFRNpjqpH9ELVVzqsyCjhYGjV9nQmcKe6t6ngbN/NvZElyl
JNxzI5S1X2zJEjiFR30CMH1iV4YDA4uymRXRk5E/MtChv/2jZkoLNNZjIAgWpbfs
KBI/iyWW3plHWaquDB+q10kf9YY0t4L8t50Q11vUsTlaeQW96OzdwCJwopmFzb1D
WWv89lJmnqa+WVcyIIcWzb5yk7BaAVEcBAazSQRIVKL1CbF3CT5B+bCxrSZW/J1u
jss6NbkOWkuw67YL468ms6fPlLihzyCcxFE1S5c6k4PKXuixcFF4/tvn+7i40vL9
yw==
=DPU+
-----END PGP PRIVATE KEY BLOCK-----
```
### Generating your own key pair
```shell
$ cat << EOF > app.batch
%echo Generating a configuration OpenPGP key
Key-Type: default
Subkey-Type: default
Name-Real: app
Name-Comment: app configuration key
Name-Email: app@example.com
Expire-Date: 0
%pubring .pubring.gpg
%secring .secring.gpg
%commit
%echo done
EOF
$ gpg2 --batch --armor --gen-key app.batch
```
## Encrypting and storing your data
There are many ways of doing this as long as the input data follows the following format, `base64(gpg(gzip(data)))`.
Below are two ways to get you going quickly, the first using plain old [gpg](https://gnupg.org/) and second using the
[crypt cli utility](https://github.com/xordataexchange/crypt/tree/master/bin/crypt) (which is not the same as
[`man 3 crypt`](http://linux.die.net/man/3/crypt)).
### Storing data using gpg(2)
```shell
$ mkdir -p ~/tmp/gpg # so we don't interfere with any current pgp keys
$ chmod 700 ~/tmp/gpg
$ gpg2 --homedir ~/tmp/gpg --import .pubring.gpg
$ export TEST_RECIPIENT=76FA75BF # if you used my key from above
$ export TEST_RECIPIENT="$(gpg2 --homedir ~/tmp/gpg --list-keys\
| grep 'pub '\
| cut -f2 -d/\
| cut -f1 -d' ')" # if you generated your own keypair
$ curl\
--location\
--request PUT\
--data-urlencode value="$(echo 'secret text'\
| gzip -c\
| gpg2 --homedir ~/tmp/gpg\
--compress-level 0\
--encrypt\
--default-recipient ${TEST_RECIPIENT}\
| base64)"\
http://127.0.0.1:4001/v2/keys/secret/test1
# - or if you have etcdctl -
$ echo 'secret text'\
| gzip -c\
| gpg2 --homedir ~/tmp/gpg\
--compress-level 0\
--encrypt\
--default-recipient ${TEST_RECIPIENT}\
| base64\
| etcdctl set /secret/test1
```
### Storing data using [`crypt`](https://github.com/xordataexchange/crypt)
```shell
$ go get github.com/xordataexchange/crypt/bin/crypt
$ crypt set /secret/test1 /path/to/secret-file.txt
# - or -
$ crypt set /secret/test1 <(echo "secret text")
```
## Verify your encrypted data
You should see your base64 encrypted data here
```shell
$ curl http://127.0.0.1:4001/v2/keys/secret/test1
# - or -
$ etcdctl get /secret/test1
```
Get [`crypt`](https://github.com/xordataexchange/crypt) if you haven't done so already.
```shell
$ go get github.com/xordataexchange/crypt/bin/crypt
```
The following will print your decrypted text to stdout.
```shell
$ crypt get /secret/test1
```
## Putting it all together, using with confd
Now that we've verified we can put encrypted data in your datastore, lets have
confd extract it into a template.
```
$ mkdir ~/tmp/confd-config/{conf.d,templates}
$ cat << EOF > ~/tmp/confd-config/conf.d/secret.toml
[template]
prefix = "/secret"
src = "secret.tmpl"
dest = "/tmp/secret.txt"
keys = [
"/test1"
]
EOF
$ cat << EOF > ~/tmp/confd-config/templates/secret.tmpl
your secret value is: {{ cgetv "/test1" }}
and again with the key here:
{{with cget "/test1"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
and here again in a loop:
{{range cgets "/*"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
and again in another loop:
{{range cgetvs "/*"}}
value: {{.}}
{{end}}
EOF
$ confd -node=http://127.0.0.1:4001 -secret-keyring=/path/to/.secring.gpg -confdir ~/tmp/confd-config -interval 2
```
Now take a look at `/tmp/secret.txt`.
================================================
FILE: docs/dns-srv-records.md
================================================
# DNS SRV Records
SRV records can be used to declare the backend nodes; just use the `-srv-domain` flag.
## Examples
### etcd
```
dig SRV _etcd._tcp.confd.io
```
```
...
;; ANSWER SECTION:
_etcd._tcp.confd.io. 300 IN SRV 1 100 4001 etcd.confd.io.
```
-
```
confd -backend etcd -srv-domain confd.io
```
### consul
```
dig SRV _consul._tcp.confd.io
```
```
...
;; ANSWER SECTION:
_consul._tcp.confd.io. 300 IN SRV 1 100 8500 consul.confd.io.
```
-
```
confd -backend consul -srv-domain confd.io
```
## The backend scheme
By default the `scheme` is set to http; change it with the `-scheme` flag.
```
confd -scheme https -srv-domain confd.io
```
Both the SRV domain and scheme can be configured in the confd configuration file. See the [Configuration Guide](configuration-guide.md) for more details.
================================================
FILE: docs/installation.md
================================================
# Installation
### Binary Download
Currently confd ships binaries for OS X and Linux 64bit systems. You can download the latest release from [GitHub](https://github.com/kelseyhightower/confd/releases)
#### OS X
```
$ wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-darwin-amd64
```
#### Linux
Download the binary
```
$ wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
```
Move the binary to an installation path, make it executable, and add to path
```
mkdir -p /opt/confd/bin
mv confd-0.16.0-linux-amd64 /opt/confd/bin/confd
chmod +x /opt/confd/bin/confd
export PATH="$PATH:/opt/confd/bin"
```
#### Building from Source
```
$ make build
$ make install
```
#### Building from Source for Alpine Linux
Since many people are using Alpine Linux as their base images for Docker there's support to build Alpine package also. Naturally by using Docker itself. :)
```
$ docker build -t confd_builder -f Dockerfile.build.alpine .
$ docker run -ti --rm -v $(pwd):/app confd_builder make build
```
The above docker commands will produce binary in the local bin directory.
#### Build for your Image using Multi-Stage build
With multi-stage builds you can keep the whole process contained in your Dockerfile using:
```
FROM golang:1.9-alpine as confd
ARG CONFD_VERSION=0.16.0
ADD https://github.com/kelseyhightower/confd/archive/v${CONFD_VERSION}.tar.gz /tmp/
RUN apk add --no-cache \
bzip2 \
make && \
mkdir -p /go/src/github.com/kelseyhightower/confd && \
cd /go/src/github.com/kelseyhightower/confd && \
tar --strip-components=1 -zxf /tmp/v${CONFD_VERSION}.tar.gz && \
go install github.com/kelseyhightower/confd && \
rm -rf /tmp/v${CONFD_VERSION}.tar.gz
FROM tomcat:8.5.15-jre8-alpine
COPY --from=confd /go/bin/confd /usr/local/bin/confd
# Then do other useful things...
```
### Next Steps
Get up and running with the [Quick Start Guide](quick-start-guide.md).
================================================
FILE: docs/logging.md
================================================
# Logging
confd logs everything to stdout. You can control the types of messages that get printed by using the `-log-level` flag and corresponding configuration file settings. See the [Configuration Guide](configuration-guide.md) for more details.
Example log messages:
```Bash
2013-11-03T19:04:53-08:00 confd[21356]: INFO SRV domain set to confd.io
2013-11-03T19:04:53-08:00 confd[21356]: INFO Starting confd
2013-11-03T19:04:53-08:00 confd[21356]: INFO etcd nodes set to http://etcd0.confd.io:4001, http://etcd1.confd.io:4001
2013-11-03T19:04:54-08:00 confd[21356]: INFO /tmp/myconf2.conf has md5sum ae5c061f41de8895b6ef70803de9a455 should be 50d4ce679e1cf13e10cd9de90d258996
2013-11-03T19:04:54-08:00 confd[21356]: INFO Target config /tmp/myconf2.conf out of sync
2013-11-03T19:04:54-08:00 confd[21356]: INFO Target config /tmp/myconf2.conf has been updated
```
================================================
FILE: docs/noop-mode.md
================================================
# Noop Mode
When in noop mode target configuration files will not be modified.
## Usage
### commandline flag
```
confd -noop
```
### configuration file
```
noop = true
```
### Example
```
confd -onetime -noop
```
-
```
2014-07-08T22:30:10-07:00 confd[16397]: INFO /tmp/myconfig.conf has md5sum c1924fc5c5f2698e2019080b7c043b7a should be 8e76340b541b8ee29023c001a5e4da18
2014-07-08T22:30:10-07:00 confd[16397]: WARNING Noop mode enabled /tmp/myconfig.conf will not be modified
```
================================================
FILE: docs/quick-start-guide.md
================================================
# Quick Start Guide
Before we begin be sure to [download and install confd](installation.md).
## Select a backend
confd supports the following backends:
* etcd
* consul
* vault
* environment variables
* file
* redis
* zookeeper
* dynamodb
* rancher
* ssm (AWS Simple Systems Manager Parameter Store)
### Add keys
This guide assumes you have a working [etcd](https://github.com/coreos/etcd#getting-started), or [consul](http://www.consul.io/intro/getting-started/install.html) server up and running and the ability to add new keys.
#### etcd
```
etcdctl set /myapp/database/url db.example.com
etcdctl set /myapp/database/user rob
```
#### consul
```
curl -X PUT -d 'db.example.com' http://localhost:8500/v1/kv/myapp/database/url
curl -X PUT -d 'rob' http://localhost:8500/v1/kv/myapp/database/user
```
#### vault
```
vault mount -path myapp generic
vault write myapp/database url=db.example.com user=rob
```
#### environment variables
```
export MYAPP_DATABASE_URL=db.example.com
export MYAPP_DATABASE_USER=rob
```
#### file
myapp.yaml
```
myapp:
database:
url: db.example.com
user: rob
```
#### redis
```
redis-cli set /myapp/database/url db.example.com
redis-cli set /myapp/database/user rob
```
#### zookeeper
```
[zk: localhost:2181(CONNECTED) 1] create /myapp ""
[zk: localhost:2181(CONNECTED) 2] create /myapp/database ""
[zk: localhost:2181(CONNECTED) 3] create /myapp/database/url "db.example.com"
[zk: localhost:2181(CONNECTED) 4] create /myapp/database/user "rob"
```
#### dynamodb
First create a table with the following schema:
```
aws dynamodb create-table \
--region <YOUR_REGION> --table-name <YOUR_TABLE> \
--attribute-definitions AttributeName=key,AttributeType=S \
--key-schema AttributeName=key,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
```
Now create the items. The attribute value `value` must be of type [string](http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html):
```
aws dynamodb put-item --table-name <YOUR_TABLE> --region <YOUR_REGION> \
--item '{ "key": { "S": "/myapp/database/url" }, "value": {"S": "db.example.com"}}'
aws dynamodb put-item --table-name <YOUR_TABLE> --region <YOUR_REGION> \
--item '{ "key": { "S": "/myapp/database/user" }, "value": {"S": "rob"}}'
```
#### Rancher
This backend consumes the [Rancher](https://www.rancher.com) metadata service. For available keys, see the [Rancher Metadata Service docs](http://docs.rancher.com/rancher/rancher-services/metadata-service/).
#### ssm
```
aws ssm put-parameter --name "/myapp/database/url" --type "String" --value "db.example.com"
aws ssm put-parameter --name "/myapp/database/user" --type "SecureString" --value "rob"
```
### Create the confdir
The confdir is where template resource configs and source templates are stored.
```
sudo mkdir -p /etc/confd/{conf.d,templates}
```
### Create a template resource config
Template resources are defined in [TOML](https://github.com/mojombo/toml) config files under the `confdir`.
/etc/confd/conf.d/myconfig.toml
```
[template]
src = "myconfig.conf.tmpl"
dest = "/tmp/myconfig.conf"
keys = [
"/myapp/database/url",
"/myapp/database/user",
]
```
### Create the source template
Source templates are [Golang text templates](http://golang.org/pkg/text/template/#pkg-overview).
/etc/confd/templates/myconfig.conf.tmpl
```
[myconfig]
database_url = {{getv "/myapp/database/url"}}
database_user = {{getv "/myapp/database/user"}}
```
### Process the template
confd supports two modes of operation daemon and onetime. In daemon mode confd polls a backend for changes and updates destination configuration files if necessary.
#### etcd
```
confd -onetime -backend etcd -node http://127.0.0.1:2379
```
#### consul
```
confd -onetime -backend consul -node 127.0.0.1:8500
```
#### vault
```
ROOT_TOKEN=$(vault read -field id auth/token/lookup-self)
confd -onetime -backend vault -node http://127.0.0.1:8200 \
-auth-type token -auth-token $ROOT_TOKEN
```
#### dynamodb
```
confd -onetime -backend dynamodb -table <YOUR_TABLE>
```
#### env
```
confd -onetime -backend env
```
#### file
```
confd -onetime -backend file -file myapp.yaml
```
#### redis
```
confd -onetime -backend redis -node 192.168.255.210:6379
```
or if you want to connect to a specific redis database (4 in this example):
```
confd -onetime -backend redis -node 192.168.255.210:6379/4
```
#### rancher
```
confd -onetime -backend rancher -prefix /2015-07-25
```
*Note*: The metadata api prefix can be defined on the cli, or as part of your keys in the template toml file.
Output:
```
2014-07-08T20:38:36-07:00 confd[16252]: INFO Target config /tmp/myconfig.conf out of sync
2014-07-08T20:38:36-07:00 confd[16252]: INFO Target config /tmp/myconfig.conf has been updated
```
The `dest` configuration file should now be in sync.
```
cat /tmp/myconfig.conf
```
Output:
```
# This a comment
[myconfig]
database_url = db.example.com
database_user = rob
```
#### ssm
```
confd -onetime -backend ssm
```
## Advanced Example
In this example we will use confd to manage two nginx config files using a single template.
### Add keys
#### etcd
```
etcdctl set /myapp/subdomain myapp
etcdctl set /myapp/upstream/app2 "10.0.1.100:80"
etcdctl set /myapp/upstream/app1 "10.0.1.101:80"
etcdctl set /yourapp/subdomain yourapp
etcdctl set /yourapp/upstream/app2 "10.0.1.102:80"
etcdctl set /yourapp/upstream/app1 "10.0.1.103:80"
```
#### consul
```
curl -X PUT -d 'myapp' http://localhost:8500/v1/kv/myapp/subdomain
curl -X PUT -d '10.0.1.100:80' http://localhost:8500/v1/kv/myapp/upstream/app1
curl -X PUT -d '10.0.1.101:80' http://localhost:8500/v1/kv/myapp/upstream/app2
curl -X PUT -d 'yourapp' http://localhost:8500/v1/kv/yourapp/subdomain
curl -X PUT -d '10.0.1.102:80' http://localhost:8500/v1/kv/yourapp/upstream/app1
curl -X PUT -d '10.0.1.103:80' http://localhost:8500/v1/kv/yourapp/upstream/app2
```
### Create template resources
/etc/confd/conf.d/myapp-nginx.toml
```
[template]
prefix = "/myapp"
src = "nginx.tmpl"
dest = "/tmp/myapp.conf"
owner = "nginx"
mode = "0644"
keys = [
"/subdomain",
"/upstream",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"
```
/etc/confd/conf.d/yourapp-nginx.toml
```
[template]
prefix = "/yourapp"
src = "nginx.tmpl"
dest = "/tmp/yourapp.conf"
owner = "nginx"
mode = "0644"
keys = [
"/subdomain",
"/upstream",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"
```
### Create the source template
/etc/confd/templates/nginx.tmpl
```
upstream {{getv "/subdomain"}} {
{{range getvs "/upstream/*"}}
server {{.}};
{{end}}
}
server {
server_name {{getv "/subdomain"}}.example.com;
location / {
proxy_pass http://{{getv "/subdomain"}};
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
================================================
FILE: docs/release-checklist.md
================================================
# Release Checklist
In order to cut a new release, a few things must be done:
1. auto-generate the CHANGELOG using the provided script
2. bump version.go and docs/installation.md to the new release
3. push a tag for the new release
4. draft a [new release](https://github.com/kelseyhightower/confd/releases/new)
5. bump version.go to the next release, appending `-dev`
For the former, you can use the following script:
$ echo -e "$(./contrib/generate-changelog.sh v$LATEST_RELEASE)\n" | cat - CHANGELOG | sponge CHANGELOG
You can find `sponge` in the `moreutils` package on Ubuntu.
This script will generate all merged changes since $LATEST_RELEASE and append it to the top of the CHANGELOG. However, this will show up as "HEAD" at the top:
$ ./contrib/generate-changelog.sh v$LATEST_RELEASE
### HEAD
abc123 Some merged PR summary
...
You'll need to manually modify "HEAD" to show up as the latest release.
When drafting a new release, you must make sure that a `darwin`, `linux` and `windows` build of confd have
been uploaded. You must have Docker installed to build release binaries:
$ make release
You can then drag and drop these binaries into the release draft.
================================================
FILE: docs/template-resources.md
================================================
# Template Resources
Template resources are written in TOML and define a single template resource.
Template resources are stored under the `/etc/confd/conf.d` directory by default.
### Required
* `dest` (string) - The target file.
* `keys` (array of strings) - An array of keys.
* `src` (string) - The relative path of a [configuration template](templates.md).
### Optional
* `gid` (int) - The gid that should own the file. Defaults to the effective gid.
* `mode` (string) - The permission mode of the file.
* `uid` (int) - The uid that should own the file. Defaults to the effective uid.
* `reload_cmd` (string) - The command to reload config.
* `check_cmd` (string) - The command to check config. Use `{{.src}}` to reference the rendered source template.
* `prefix` (string) - The string to prefix to keys.
### Notes
When using the `reload_cmd` feature it's important that the command exits on its own. The reload
command is not managed by confd, and will block the configuration run until it exits.
## Example
```TOML
[template]
src = "nginx.conf.tmpl"
dest = "/etc/nginx/nginx.conf"
uid = 0
gid = 0
mode = "0644"
keys = [
"/nginx",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx restart"
```
================================================
FILE: docs/templates.md
================================================
# Templates
Templates define a single application configuration template.
Templates are stored under the `/etc/confd/templates` directory by default.
Templates are written in Go's [`text/template`](http://golang.org/pkg/text/template/).
## Template Functions
### map
creates a key-value map of string -> interface{}
```
{{$endpoint := map "name" "elasticsearch" "private_port" 9200 "public_port" 443}}
name: {{index $endpoint "name"}}
private-port: {{index $endpoint "private_port"}}
public-port: {{index $endpoint "public_port"}}
```
specifically useful if you use a sub-template and you want to pass multiple values to it.
### base
Alias for the [path.Base](https://golang.org/pkg/path/#Base) function.
```
{{with get "/key"}}
key: {{base .Key}}
value: {{.Value}}
{{end}}
```
### exists
Checks if the key exists. Return false if key is not found.
```
{{if exists "/key"}}
value: {{getv "/key"}}
{{end}}
```
### get
Returns the KVPair where key matches its argument. Returns an error if key is not found.
```
{{with get "/key"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
```
### cget
Returns the KVPair where key matches its argument and the value has been *encrypted*. Returns an error if key is not found.
```
{{with cget "/key"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
```
### gets
Returns all KVPair, []KVPair, where key matches its argument. Returns an error if key is not found.
```
{{range gets "/*"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
```
### cgets
Returns all KVPair, []KVPair, where key matches its argument and the values have been *encrypted*.
Returns an error if key is not found.
```
{{range cgets "/*"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
```
### getv
Returns the value as a string where key matches its argument or an optional default value.
Returns an error if key is not found and no default value given.
```
value: {{getv "/key"}}
```
#### With a default value
```
value: {{getv "/key" "default_value"}}
```
### cgetv
Returns the *encrypted* value as a string where key matches its argument. Returns an error if key is not found.
```
value: {{cgetv "/key"}}
```
### getvs
Returns all values, []string, where key matches its argument. Returns an error if key is not found.
```
{{range getvs "/*"}}
value: {{.}}
{{end}}
```
### cgetvs
Returns all *encrypted* values, []string, where key matches its argument. Returns an error if key is not found.
```
{{range cgetvs "/*"}}
value: {{.}}
{{end}}
```
### getenv
Wrapper for [os.Getenv](https://golang.org/pkg/os/#Getenv). Retrieves the value of the environment variable named by the key. It returns the value, which will be empty if the variable is not present. Optionally, you can give a default value that will be returned if the key is not present.
```
export HOSTNAME=`hostname`
```
```
hostname: {{getenv "HOSTNAME"}}
```
#### With a default value
```
ipaddr: {{getenv "HOST_IP" "127.0.0.1"}}
```
### datetime
Alias for [time.Now](https://golang.org/pkg/time/#Now)
```
# Generated by confd {{datetime}}
```
Outputs:
```
# Generated by confd 2015-01-23 13:34:56.093250283 -0800 PST
```
```
# Generated by confd {{datetime.Format "Jan 2, 2006 at 3:04pm (MST)"}}
```
Outputs:
```
# Generated by confd Jan 23, 2015 at 1:34pm (EST)
```
See the time package for more usage: http://golang.org/pkg/time/
### split
Wrapper for [strings.Split](http://golang.org/pkg/strings/#Split). Splits the input string on the separating string and returns a slice of substrings.
```
{{ $url := split (getv "/deis/service") ":" }}
host: {{index $url 0}}
port: {{index $url 1}}
```
### toUpper
Alias for [strings.ToUpper](http://golang.org/pkg/strings/#ToUpper) Returns uppercased string.
```
key: {{toUpper "value"}}
```
### toLower
Alias for [strings.ToLower](http://golang.org/pkg/strings/#ToLower). Returns lowercased string.
```
key: {{toLower "Value"}}
```
### json
Returns an map[string]interface{} of the json value.
### lookupSRV
Wrapper for [net.LookupSRV](https://golang.org/pkg/net/#LookupSRV). The wrapper also sorts the SRV records alphabetically by combining all the fields of the net.SRV struct to reduce unnecessary config reloads.
```
{{range lookupSRV "mail" "tcp" "example.com"}}
target: {{.Target}}
port: {{.Port}}
priority: {{.Priority}}
weight: {{.Weight}}
{{end}}
```
### base64Encode
Returns a base64 encoded string of the value.
```
key: {{base64Encode "Value"}}
```
### base64Decode
Returns the string representing the decoded base64 value.
```
key: {{base64Decode "VmFsdWU="}}
```
#### Add keys to etcd
```
etcdctl set /services/zookeeper/host1 '{"Id":"host1", "IP":"192.168.10.11"}'
etcdctl set /services/zookeeper/host2 '{"Id":"host2", "IP":"192.168.10.12"}'
```
#### Create the template resource
```
[template]
src = "services.conf.tmpl"
dest = "/tmp/services.conf"
keys = [
"/services/zookeeper/"
]
```
#### Create the template
```
{{range gets "/services/zookeeper/*"}}
{{$data := json .Value}}
id: {{$data.Id}}
ip: {{$data.IP}}
{{end}}
```
#### Advanced Map Traversals
Once you have parsed the JSON, it is possible to traverse it with normal Go
template functions such as `index`.
A more advanced structure, like this:
```
{
"animals": [
{"type": "dog", "name": "Fido"},
{"type": "cat", "name": "Misse"}
]
}
```
It can be traversed like this:
```
{{$data := json (getv "/test/data/")}}
type: {{ (index $data.animals 1).type }}
name: {{ (index $data.animals 1).name }}
{{range $data.animals}}
{{.name}}
{{end}}
```
### jsonArray
Returns a []interface{} from a json array such as `["a", "b", "c"]`.
```
{{range jsonArray (getv "/services/data/")}}
val: {{.}}
{{end}}
```
### ls
Returns all subkeys, []string, where path matches its argument. Returns an empty list if path is not found.
```
{{range ls "/deis/services"}}
value: {{.}}
{{end}}
```
### lsdir
Returns all subkeys, []string, where path matches its argument. It only returns subkeys that also have subkeys. Returns an empty list if path is not found.
```
{{range lsdir "/deis/services"}}
value: {{.}}
{{end}}
```
### dir
Returns the parent directory of a given key.
```
{{with dir "/services/data/url"}}
dir: {{.}}
{{end}}
```
### join
Alias for the [strings.Join](https://golang.org/pkg/strings/#Join) function.
```
{{$services := getvs "/services/elasticsearch/*"}}
services: {{join $services ","}}
```
### replace
Alias for the [strings.Replace](https://golang.org/pkg/strings/#Replace) function.
```
{{$backend := getv "/services/backend/nginx"}}
backend = {{replace $backend "-" "_" -1}}
```
### lookupIP
Wrapper for [net.LookupIP](https://golang.org/pkg/net/#LookupIP) function. The wrapper also sorts (alphabeticaly) the IP addresses. This is crucial since in dynamic environments DNS servers typically shuffle the addresses linked to domain name. And that would cause unnecessary config reloads.
```
{{range lookupIP "some.host.local"}}
server {{.}};
{{end}}
```
### atoi
Alias for the [strconv.Atoi](https://golang.org/pkg/strconv/#Atoi) function.
```
{{seq 1 (atoi (getv "/count"))}}
```
## Example Usage
```Bash
etcdctl set /nginx/domain 'example.com'
etcdctl set /nginx/root '/var/www/example_dotcom'
etcdctl set /nginx/worker_processes '2'
etcdctl set /app/upstream/app1 "10.0.1.100:80"
etcdctl set /app/upstream/app2 "10.0.1.101:80"
```
`/etc/confd/templates/nginx.conf.tmpl`
```Text
worker_processes {{getv "/nginx/worker_processes"}};
upstream app {
{{range getvs "/app/upstream/*"}}
server {{.}};
{{end}}
}
server {
listen 80;
server_name www.{{getv "/nginx/domain"}};
access_log /var/log/nginx/{{getv "/nginx/domain"}}.access.log;
error_log /var/log/nginx/{{getv "/nginx/domain"}}.log;
location / {
root {{getv "/nginx/root"}};
index index.html index.htm;
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
Output: `/etc/nginx/nginx.conf`
```Text
worker_processes 2;
upstream app {
server 10.0.1.100:80;
server 10.0.1.101:80;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
root /var/www/example_dotcom;
index index.html index.htm;
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
### Complex example
This examples show how to use a combination of the templates functions to do nested iteration.
#### Add keys to etcd
```
etcdctl mkdir /services/web/cust1/
etcdctl mkdir /services/web/cust2/
etcdctl set /services/web/cust1/2 '{"IP": "10.0.0.2"}'
etcdctl set /services/web/cust2/2 '{"IP": "10.0.0.4"}'
etcdctl set /services/web/cust2/1 '{"IP": "10.0.0.3"}'
etcdctl set /services/web/cust1/1 '{"IP": "10.0.0.1"}'
```
#### Create the template resource
```
[template]
src = "services.conf.tmpl"
dest = "/tmp/services.conf"
keys = [
"/services/web"
]
```
#### Create the template
```
{{range $dir := lsdir "/services/web"}}
upstream {{base $dir}} {
{{$custdir := printf "/services/web/%s/*" $dir}}{{range gets $custdir}}
server {{$data := json .Value}}{{$data.IP}}:80;
{{end}}
}
server {
server_name {{base $dir}}.example.com;
location / {
proxy_pass {{base $dir}};
}
}
{{end}}
```
Output:`/tmp/services.conf`
```Text
upstream cust1 {
server 10.0.0.1:80;
server 10.0.0.2:80;
}
server {
server_name cust1.example.com;
location / {
proxy_pass cust1;
}
}
upstream cust2 {
server 10.0.0.3:80;
server 10.0.0.4:80;
}
server {
server_name cust2.example.com;
location / {
proxy_pass cust2;
}
}
```
Go's [`text/template`](http://golang.org/pkg/text/template/) package is very powerful. For more details on it's capabilities see its [documentation.](http://golang.org/pkg/text/template/)
================================================
FILE: docs/tomcat-sample.md
================================================
# confd for Apache Tomcat
If you administrate an [Apache Tomcat](http://tomcat.apache.org/) you usually need to edit multiple config files and set some environment variables.
[confd](https://github.com/kelseyhightower/confd) can help here especially if you have multiple Tomcats in a cluster. Configuring Tomcat is an interesting sample, because it needs multiple config files and some environment variables.
Important configuration files of Tomcat are
- server.xml: e.g. configure here jvmRoute for load balancing, ports etc.
- tomcat-users.xml: configure access rights for manager webapp
A frequently used environment variable is CATALINA_OPTS: Here you can define memory settings
## server.xml
In this case we simply want to use the hostname for jvmRoute. Because it is not possible to execute a Unix command within a toml template, we use an environment variable "HOSTNAME" instead.
Copy the file conf/server.xml from your Tomcat installation to /etc/confd/templates/server.xml.tmpl and edit "Engine tag" and add jvmRoute
```
<Engine name="Catalina" defaultHost="localhost" jvmRoute="{{getenv "HOSTNAME"}}">
```
Create /etc/confd/conf.d/server.xml.toml
```
[template]
src = "server.xml.tmpl"
dest = "/usr/local/tomcat/conf/server.xml"
check_cmd = "/usr/local/tomcat/bin/catalina.sh configtest"
reload_cmd = "/usr/local/tomcat/bin/catalina.sh stop -force && /usr/local/tomcat/bin/catalina.sh start"
```
## tomcat-users.xml
We want to get the Tomcat-manager's credentials from a central configuration repository.
Copy the file conf/tomcat-users.xml from your Tomcat installation to /etc/confd/templates/tomcat-users.xml.tmpl
Add the following lines:
```
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<user username="{{getv "/user"}}" password="{{getv "/password"}}" roles="tomcat,manager-gui"/>
```
Create a /etc/confd/conf.d/tomcat-users.xml.toml
```
[template]
prefix = "tomcat"
keys = [
"user",
"password"
]
src = "tomcat-users.xml.tmpl"
dest = "/usr/local/tomcat/conf/tomcat-users.xml"
reload_cmd = "/usr/local/tomcat/bin/catalina.sh stop -force && /usr/local/tomcat/bin/catalina.sh start"
```
## catalina.sh
File catalina.sh is the startscript for Tomcat. If confd should set memory settings like Xmx or Xms, we could either create a catalina.sh.tmpl and proceed like above or we can try to use environment variables and leave catalina.sh untouched. Leaving catalina.sh untouched is preferred here. Because it is not possible to use environment variables within toml files, we need to write a minimal shell script that passes CATALINA_OPTS variable.
Create the file /etc/confd/conf.d/catalina_start.sh.tmpl
```
#!/bin/sh
CATALINA_OPTS="-Xms{{getv "/Xms"}} -Xmx{{getv "/Xmx"}}" /usr/local/tomcat/bin/catalina.sh start
```
Create the file /etc/confd/conf.d/catalina_start.sh.toml
```
[template]
prefix = "tomcat"
keys = [
"Xmx",
"Xms"
]
src = "catalina_start.sh.tmpl"
dest = "/usr/local/tomcat/bin/catalina_start.sh"
mode = "0775"
reload_cmd = "/usr/local/tomcat/bin/catalina.sh stop -force && /usr/local/tomcat/bin/catalina_start.sh start"
```
Finally we need to replace in all above templates ```catalina.sh start``` by ```catalina_start.sh start```
## test it
Follow conf documentation and test it calling ```confd -onetime``` or you try the complete sample in a Docker and/or Vagrant environment [here](https://github.com/muenchhausen/tomcat-confd)
================================================
FILE: docs/vault-kubernetes-auth.md
================================================
These are steps to get vault with Kubernetes auth working on minikube.
*Do not use default service account in prod instead create dedicated acount for Vault auth.*
- Deploy Helm
```
# Install Helm
Use the correct method for your OS from https://docs.helm.sh/using_helm/#installing-the-helm-client
# Deploy tiller into the cluster
helm init
- Install Vault in dev mode
```
# Add Vault chart
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
# Install Vault
# We need at least Vault 0.8.3
helm install incubator/vault --name vault --set vault.dev=true --set image.tag="0.9.5"
```
- Enable Kubernetes backend
```
# Get Vault pod name
export POD_NAME=$(kubectl get pods --namespace default -l "app=vault" -o jsonpath="{.items[0].metadata.name}")
# Get inside pod
kubectl exec -i -t ${POD_NAME} sh
# Set env vars for Vault client
export VAULT_TOKEN=$(cat /root/.vault-token)
# Set Vault host URL (do this everytime you exec back into container)
export VAULT_ADDR=http://127.0.0.1:8200
# Enable Kube auth backend
vault auth enable kubernetes
# Configure Kube auth backend
vault write auth/kubernetes/config \
kubernetes_host=https://kubernetes \
kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
# Create Vault policy for testing
vault policy write test -<<EOF
path "secret/*" {
capabilities = ["create"]
}
path "secret/foo" {
capabilities = ["read"]
}
EOF
# Create role for confd
vault write auth/kubernetes/role/confd \
bound_service_account_names=vault-auth \
bound_service_account_namespaces=default \
policies=test \
ttl=1h
# Write test secret
vault write secret/foo value=bar
# Now exit vault container
exit
```
- Create RBAC (if used) rule to allow acccess to TokenReview API
```
kubectl create -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: role-tokenreview-binding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
subjects:
- kind: ServiceAccount
name: vault-auth
namespace: default
EOF
```
- Start a pod with confd and get a secret
```
# Create service account for kube auth
kubectl create serviceaccount vault-auth
# Start pod
kubectl run test -i -t --image=quay.io/stepanstipl/test:confd-v7 \
--overrides='{ "apiVersion": "v1", "spec": {"serviceAccount": "vault-auth", "serviceAccountName": "vault-auth"} }' \
--restart=Never -- sh
# Inside the pod
# Create confd config
mkdir -p /etc/confd/conf.d /etc/confd/templates
echo '[template]
src = "test.conf.tmpl"
dest = "/tmp/test.conf"
keys = [
"/secret/foo",
]' > /etc/confd/conf.d/test.toml
# And template
echo '{{getv "/secret/foo"}}' > /etc/confd/templates/test.conf.tmpl
# and finally run confd
confd -onetime -backend vault -auth-type kubernetes -role confd -node http://vault-vault:8200 -log-level debug
```
- Check `/tmp/test.conf`, it should contain your secret
```
cat /tmp/test.conf
```
================================================
FILE: go.mod
================================================
module github.com/kelseyhightower/confd
go 1.19
require (
github.com/BurntSushi/toml v1.3.2
github.com/aws/aws-sdk-go v1.48.16
github.com/fsnotify/fsnotify v1.7.0
github.com/garyburd/redigo v1.6.4
github.com/hashicorp/consul/api v1.26.1
github.com/hashicorp/vault/api v1.10.0
github.com/kelseyhightower/memkv v0.1.1
github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414
github.com/sirupsen/logrus v1.9.3
go.etcd.io/etcd/client/v3 v3.5.11
gopkg.in/yaml.v2 v2.4.0
)
require (
github.com/armon/go-metrics v0.4.1 // indirect
github.com/cenkalti/backoff/v3 v3.2.2 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/go-jose/go-jose/v3 v3.0.1 // indirect
github.com/go-test/deep v1.1.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.6.1 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
github.com/hashicorp/go-sockaddr v1.0.6 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/ryanuber/go-glob v1.0.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/crypto v0.16.0 // indirect
golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect
golang.org/x/net v0.19.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect
google.golang.org/grpc v1.59.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
)
================================================
FILE: go.sum
================================================
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aws/aws-sdk-go v1.48.16 h1:mcj2/9J/MJ55Dov+ocMevhR8Jv6jW/fAxbrn4a1JFc8=
github.com/aws/aws-sdk-go v1.48.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M=
github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/garyburd/redigo v1.6.4 h1:LFu2R3+ZOPgSMWMOL+saa/zXRjw0ID2G8FepO53BGlg=
github.com/garyburd/redigo v1.6.4/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA=
github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/hashicorp/consul/api v1.26.1 h1:5oSXOO5fboPZeW5SN+TdGFP/BILDgBm19OrPZ/pICIM=
github.com/hashicorp/consul/api v1.26.1/go.mod h1:B4sQTeaSO16NtynqrAdwOlahJ7IUDZM9cj2420xYL8A=
github.com/hashicorp/consul/sdk v0.15.0 h1:2qK9nDrr4tiJKRoxPGhm6B7xJjLVIQqkjiab2M4aKjU=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v1.6.1 h1:pa92nu9bPoAqI7p+uPDCIWGAibUdlCi6TYWJEQQkLf8=
github.com/hashicorp/go-hclog v1.6.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSYmuZJGizr6/x/AEizP0CQc=
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I=
github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM=
github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
github.com/hashicorp/vault/api v1.10.0 h1:/US7sIjWN6Imp4o/Rj1Ce2Nr5bki/AXi9vAW3p2tOJQ=
github.com/hashicorp/vault/api v1.10.0/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kelseyhightower/memkv v0.1.1 h1:O7n2MB8cdrwb4UmyyXS2tVETc2DR7KlJRihRgNh4zqc=
github.com/kelseyhightower/memkv v0.1.1/go.mod h1:uIeINg0Dy2aioPWSdga9VnueJjfSvul2dW7o758NxO4=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 h1:AJNDS0kP60X8wwWFvbLPwDuojxubj9pbfK7pjHw0vKg=
github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E=
go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF2z1A=
go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU=
go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8=
golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 h1:W12Pwm4urIbRdGhMEg2NM9O3TWKjNcxQhs46V0ypf/k=
google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic=
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 h1:ZcOkrmX74HbKFYnpPY8Qsw93fC29TbJXspYKaBkSXDQ=
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg=
google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM=
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
================================================
FILE: integration/confdir/conf.d/basic.toml
================================================
[template]
mode = "0644"
src = "basic.conf.tmpl"
dest = "/tmp/confd-basic-test.conf"
keys = [
"/database/host",
"/database/password",
"/database/port",
"/database/username",
]
================================================
FILE: integration/confdir/conf.d/exists.toml
================================================
[template]
mode = "0644"
src = "exists-test.conf.tmpl"
dest = "/tmp/confd-exists-test.conf"
keys = [
"/key",
]
================================================
FILE: integration/confdir/conf.d/iteration.toml
================================================
[template]
mode = "0644"
src = "iteration.conf.tmpl"
dest = "/tmp/confd-iteration-test.conf"
keys = [
"/upstream",
]
================================================
FILE: integration/confdir/conf.d/manykeys.toml
================================================
[template]
mode = "0644"
src = "basic.conf.tmpl"
dest = "/tmp/confd-manykeys-test.conf"
keys = [
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username",
"/database/host",
"/database/password",
"/database/port",
"/database/username"
]
================================================
FILE: integration/confdir/conf.d/nested.toml
================================================
[template]
mode = "0644"
src = "nested.conf.tmpl"
dest = "/tmp/confd-nested-test.conf"
keys = [
"/nested",
]
================================================
FILE: integration/confdir/templates/basic.conf.tmpl
================================================
hostname: {{ getenv "HOSTNAME" }}
[database]
host={{ getv "/database/host" }}
password={{ getv "/database/password" }}
port={{ getv "/database/port" }}
username={{ getv "/database/username" }}
================================================
FILE: integration/confdir/templates/exists-test.conf.tmpl
================================================
{{ if exists "/key" }}value: {{ getv "/key" }}{{ end }}
{{- if exists "/doesnotexist" }}This line will not be printed value: {{ getv "/key" }}{{ end }}
================================================
FILE: integration/confdir/templates/iteration.conf.tmpl
================================================
upstream app {
{{- range gets "/upstream/*" }}
server {{ .Value }};
{{- end }}
}
server {
server_name www.example.com;
location / {
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
================================================
FILE: integration/confdir/templates/nested.conf.tmpl
================================================
upstream app {
{{ range gets "/nested/*" }}
{{ range gets .Key }}
server {{ .Value }};
{{ end }}
{{ end }}
}
server {
server_name www.example.com;
location / {
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
================================================
FILE: integration/consul/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
# Configure consul
curl -X PUT http://127.0.0.1:8500/v1/kv/key -d 'foobar'
curl -X PUT http://127.0.0.1:8500/v1/kv/database/host -d '127.0.0.1'
curl -X PUT http://127.0.0.1:8500/v1/kv/database/password -d 'p@sSw0rd'
curl -X PUT http://127.0.0.1:8500/v1/kv/database/port -d '3306'
curl -X PUT http://127.0.0.1:8500/v1/kv/database/username -d 'confd'
curl -X PUT http://127.0.0.1:8500/v1/kv/upstream/app1 -d '10.0.1.10:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/upstream/app2 -d '10.0.1.11:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/nested/east/app1 -d '10.0.1.10:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/nested/west/app2 -d '10.0.1.11:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/database/host -d '127.0.0.1'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/database/password -d 'p@sSw0rd'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/database/port -d '3306'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/database/username -d 'confd'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/upstream/app1 -d '10.0.1.10:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/upstream/app2 -d '10.0.1.11:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/nested/east/app1 -d '10.0.1.10:8080'
curl -X PUT http://127.0.0.1:8500/v1/kv/prefix/nested/west/app2 -d '10.0.1.11:8080'
# Run confd
confd --onetime --log-level debug --confdir ./integration/confdir --backend consul --node 127.0.0.1:8500
================================================
FILE: integration/dynamodb/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export DYNAMODB_LOCAL="1"
export AWS_ACCESS_KEY_ID="foo"
export AWS_SECRET_ACCESS_KEY="bar"
export AWS_REGION="eu-west-1"
export AWS_DEFAULT_REGION="eu-west-1"
aws dynamodb create-table \
--region eu-west-1 --table-name confd \
--attribute-definitions AttributeName=key,AttributeType=S \
--key-schema AttributeName=key,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/key" }, "value": {"S": "foobar"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/database/host" }, "value": {"S": "127.0.0.1"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/database/password" }, "value": {"S": "p@sSw0rd"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/database/port" }, "value": {"S": "3306"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/database/username" }, "value": {"S": "confd"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/upstream/app1" }, "value": {"S": "10.0.1.10:8080"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/upstream/app2" }, "value": {"S": "10.0.1.11:8080"}}' \
--endpoint-url http://localhost:8000
# Add a broken value, to see if it is handled
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/upstream/broken" }, "value": {"N": "4711"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/database/host" }, "value": {"S": "127.0.0.1"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/database/password" }, "value": {"S": "p@sSw0rd"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/database/port" }, "value": {"S": "3306"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/database/username" }, "value": {"S": "confd"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/upstream/app1" }, "value": {"S": "10.0.1.10:8080"}}' \
--endpoint-url http://localhost:8000
aws dynamodb put-item --table-name confd --region eu-west-1 \
--item '{ "key": { "S": "/prefix/upstream/app2" }, "value": {"S": "10.0.1.11:8080"}}' \
--endpoint-url http://localhost:8000
# Run confd, expect it to work
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend dynamodb --table confd
if [ $? -ne 0 ]
then
exit 1
fi
# Run confd with --watch, expecting it to fail
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend dynamodb --table confd --watch
if [ $? -eq 0 ]
then
exit 1
fi
# Run confd without AWS credentials, expecting it to fail
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend dynamodb --table confd
if [ $? -eq 0 ]
then
exit 1
fi
================================================
FILE: integration/env/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export KEY="foobar"
export DATABASE_HOST="127.0.0.1"
export DATABASE_PASSWORD="p@sSw0rd"
export DATABASE_PORT="3306"
export DATABASE_USERNAME="confd"
export UPSTREAM_APP1="10.0.1.10:8080"
export UPSTREAM_APP2="10.0.1.11:8080"
export PREFIX_DATABASE_HOST="127.0.0.1"
export PREFIX_DATABASE_PASSWORD="p@sSw0rd"
export PREFIX_DATABASE_PORT="3306"
export PREFIX_DATABASE_USERNAME="confd"
export PREFIX_UPSTREAM_APP1="10.0.1.10:8080"
export PREFIX_UPSTREAM_APP2="10.0.1.11:8080"
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend env
================================================
FILE: integration/etcd/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
curl -L -X PUT http://127.0.0.1:2379/v2/keys/key -d value=foobar
curl -L -X PUT http://127.0.0.1:2379/v2/keys/database/host -d value=127.0.0.1
curl -L -X PUT http://127.0.0.1:2379/v2/keys/database/password -d value=p@sSw0rd
curl -L -X PUT http://127.0.0.1:2379/v2/keys/database/port -d value=3306
curl -L -X PUT http://127.0.0.1:2379/v2/keys/database/username -d value=confd
curl -L -X PUT http://127.0.0.1:2379/v2/keys/upstream/app1 -d value=10.0.1.10:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/upstream/app2 -d value=10.0.1.11:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/nested/east/app1 -d value=10.0.1.10:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/nested/west/app2 -d value=10.0.1.11:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/database/host -d value=127.0.0.1
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/database/password -d value=p@sSw0rd
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/database/port -d value=3306
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/database/username -d value=confd
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/upstream/app1 -d value=10.0.1.10:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/upstream/app2 -d value=10.0.1.11:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/nested/east/app1 -d value=10.0.1.10:8080
curl -L -X PUT http://127.0.0.1:2379/v2/keys/prefix/nested/west/app2 -d value=10.0.1.11:8080
# Run confd
confd --onetime --log-level debug --confdir ./integration/confdir --backend etcd --node http://127.0.0.1:2379 --watch
================================================
FILE: integration/etcdv3/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export ETCDCTL_API="3"
etcdctl put /key foobar
etcdctl put /database/host 127.0.0.1
etcdctl put /database/password p@sSw0rd
etcdctl put /database/port 3306
etcdctl put /database/username confd
etcdctl put /upstream/app1 10.0.1.10:8080
etcdctl put /upstream/app2 10.0.1.11:8080
etcdctl put /prefix/database/host 127.0.0.1
etcdctl put /prefix/database/password p@sSw0rd
etcdctl put /prefix/database/port 3306
etcdctl put /prefix/database/username confd
etcdctl put /prefix/upstream/app1 10.0.1.10:8080
etcdctl put /prefix/upstream/app2 10.0.1.11:8080
# Run confd
confd --onetime --log-level debug --confdir ./integration/confdir --backend etcdv3 --node http://127.0.0.1:2379 --watch
================================================
FILE: integration/expect/basic.conf
================================================
hostname: localhost
[database]
host=127.0.0.1
password=p@sSw0rd
port=3306
username=confd
================================================
FILE: integration/expect/check.sh
================================================
#!/bin/bash
set -ex
diff /tmp/confd-basic-test.conf integration/expect/basic.conf
diff /tmp/confd-exists-test.conf integration/expect/exists-test.conf
diff /tmp/confd-iteration-test.conf integration/expect/iteration.conf
diff /tmp/confd-manykeys-test.conf integration/expect/basic.conf
================================================
FILE: integration/expect/exists-test.conf
================================================
value: foobar
================================================
FILE: integration/expect/iteration.conf
================================================
upstream app {
server 10.0.1.10:8080;
server 10.0.1.11:8080;
}
server {
server_name www.example.com;
location / {
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
================================================
FILE: integration/file/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
mkdir backends1 backends2
cat <<EOT >> backends1/1.yaml
key: foobar
database:
host: 127.0.0.1
password: p@sSw0rd
port: "3306"
username: confd
EOT
cat <<EOT >> backends1/2.yaml
upstream:
app1: 10.0.1.10:8080
app2: 10.0.1.11:8080
EOT
cat <<EOT >> backends2/1.yaml
nested:
app1: 10.0.1.10:8080
app2: 10.0.1.11:8080
EOT
cat <<EOT >> backends2/2.yaml
prefix:
database:
host: 127.0.0.1
password: p@sSw0rd
port: "3306"
username: confd
upstream:
app1: 10.0.1.10:8080
app2: 10.0.1.11:8080
EOT
# Run confd
confd --onetime --log-level debug --confdir ./integration/confdir --backend file --file backends1/ --file backends2/ --watch
================================================
FILE: integration/rancher/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
cat > ./rancher-answers.json<<EOF
{
"2015-07-25": {
"default": {
"key": "foobar",
"database": {
"host": "127.0.0.1",
"password": "p@sSw0rd",
"port": 3306,
"username": "confd"
},
"upstream": {
"app1": "10.0.1.10:8080",
"app2": "10.0.1.11:8080"
},
"nested": {
"east": {
"app1": "10.0.1.10:8080"
},
"west": {
"app2": "10.0.1.11:8080"
}
}
}
}
}
EOF
rancher-metadata -listen 127.0.0.1:8080 --answers ./rancher-answers.json &
confd --onetime --log-level debug --prefix /2015-07-25 --confdir ./integration/confdir --backend rancher --node 127.0.0.1:8080 --watch
================================================
FILE: integration/redis/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
redis-cli set /key foobar
redis-cli set /database/host 127.0.0.1
redis-cli set /database/password p@sSw0rd
redis-cli set /database/port 3306
redis-cli set /database/username confd
redis-cli set /upstream/app1 10.0.1.10:8080
redis-cli set /upstream/app2 10.0.1.11:8080
redis-cli hset /prefix/database host 127.0.0.1
redis-cli hset /prefix/database password p@sSw0rd
redis-cli hset /prefix/database port 3306
redis-cli hset /prefix/database username confd
redis-cli hset /prefix/upstream app1 10.0.1.10:8080
redis-cli hset /prefix/upstream app2 10.0.1.11:8080
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend redis --node 127.0.0.1:6379
if [ $? -ne 0 ]
then
exit 1
fi
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend redis --node 127.0.0.1:6379/0
if [ $? -ne 0 ]
then
exit 1
fi
================================================
FILE: integration/ssm/main.go
================================================
package main
import (
"fmt"
"log"
"net/http"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil"
"github.com/aws/aws-sdk-go/service/ssm"
)
var db map[string]string
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" || r.Header.Get("Authorization") == "" {
log.Println("Unauthorized request")
return
}
switch t := r.Header.Get("X-Amz-Target"); t {
case "AmazonSSM.PutParameter":
defer r.Body.Close()
var b ssm.PutParameterInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
log.Printf("DB: Setting key=%s value=%s", *b.Name, *b.Value)
db[*b.Name] = *b.Value
return
case "AmazonSSM.GetParametersByPath":
defer r.Body.Close()
var b ssm.GetParametersByPathInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
var GetParametersByPathOutput ssm.GetParametersByPathOutput
parameters := make([]*ssm.Parameter, 0, 0)
path := b.Path
for k, v := range db {
if strings.HasPrefix(k, *path+"/") == false {
continue
}
log.Printf("DB: Getting key=%s", k)
parameters = append(parameters, &ssm.Parameter{
Name: aws.String(k),
Type: aws.String("String"),
Value: aws.String(v),
})
}
GetParametersByPathOutput.SetParameters(parameters)
resp, err := jsonutil.BuildJSON(GetParametersByPathOutput)
if err != nil {
panic(err)
}
fmt.Fprint(w, string(resp))
return
case "AmazonSSM.GetParameter":
defer r.Body.Close()
var b ssm.GetParameterInput
err := jsonutil.UnmarshalJSON(&b, r.Body)
if err != nil {
panic(err)
}
log.Printf("Body=%#v\n", b)
var GetParameterOutput ssm.GetParameterOutput
log.Printf("DB: Getting key=%s", *b.Name)
parameter := &ssm.Parameter{
Name: aws.String(*b.Name),
Type: aws.String("String"),
Value: aws.String(db[*b.Name]),
}
GetParameterOutput.SetParameter(parameter)
resp, err := jsonutil.BuildJSON(GetParameterOutput)
if err != nil {
panic(err)
}
fmt.Fprint(w, string(resp))
return
default:
log.Println("Unknown target")
return
}
}
func main() {
db = make(map[string]string)
http.HandleFunc("/", handler)
log.Println("Starting AWS SSM HTTP mocking server")
http.ListenAndServe(":8001", nil)
}
================================================
FILE: integration/ssm/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export SSM_LOCAL="1"
export AWS_ACCESS_KEY_ID="foo"
export AWS_SECRET_ACCESS_KEY="bar"
export AWS_DEFAULT_REGION="us-east-1"
export AWS_REGION="us-east-1"
export SSM_ENDPOINT_URL="http://localhost:8001"
aws ssm put-parameter --name "/key" --type "String" --value "foobar" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/database/host" --type "String" --value "127.0.0.1" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/database/password" --type "String" --value "p@sSw0rd" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/database/port" --type "String" --value "3306" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/database/username" --type "String" --value "confd" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/upstream/app1" --type "String" --value "10.0.1.10:8080" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/upstream/app2" --type "String" --value "10.0.1.11:8080" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/database/host" --type "String" --value "127.0.0.1" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/database/password" --type "String" --value "p@sSw0rd" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/database/port" --type "String" --value "3306" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/database/username" --type "String" --value "confd" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/upstream/app1" --type "String" --value "10.0.1.10:8080" --endpoint-url $SSM_ENDPOINT_URL
aws ssm put-parameter --name "/prefix/upstream/app2" --type "String" --value "10.0.1.11:8080" --endpoint-url $SSM_ENDPOINT_URL
# Run confd, expect it to work
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend ssm --table confd
if [ $? -ne 0 ]
then
exit 1
fi
# Run confd with --watch, expecting it to fail
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend ssm --table confd --watch
if [ $? -eq 0 ]
then
exit 1
fi
# Run confd without AWS credentials, expecting it to fail
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend ssm --table confd
if [ $? -eq 0 ]
then
exit 1
fi
================================================
FILE: integration/vault/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export ROOT_TOKEN="$(vault read -field id auth/token/lookup-self)"
vault secrets enable -path database kv
vault secrets enable -path key kv
vault secrets enable -path upstream kv
vault secrets enable -path nested kv
vault write key value=foobar
vault write database/host value=127.0.0.1
vault write database/port value=3306
vault write database/username value=confd
vault write database/password value=p@sSw0rd
vault write upstream app1=10.0.1.10:8080 app2=10.0.1.11:8080
vault write nested/east/app1 value=10.0.1.10:8080
vault write nested/west/app2 value=10.0.1.11:8080
# Run confd
confd --onetime --log-level debug \
--confdir ./integration/confdir \
--backend vault \
--auth-type token \
--auth-token $ROOT_TOKEN \
--node http://127.0.0.1:8200
================================================
FILE: integration/vault-path/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
export ROOT_TOKEN="$(vault read -field id auth/token/lookup-self)"
vault secrets enable -path database kv
vault secrets enable -path key kv
vault secrets enable -path upstream kv
vault secrets enable -path nested kv
vault write key value=foobar
vault write database/host value=127.0.0.1
vault write database/port value=3306
vault write database/username value=confd
vault write database/password value=p@sSw0rd
vault write upstream app1=10.0.1.10:8080 app2=10.0.1.11:8080
vault write nested/east/app1 value=10.0.1.10:8080
vault write nested/west/app2 value=10.0.1.11:8080
vault auth enable -path=test approle
echo 'path "*" {
capabilities = ["read"]
}' > my-policy.hcl
vault write sys/policy/my-policy policy=@my-policy.hcl
vault write auth/test/role/my-role secret_id_ttl=120m token_num_uses=1000 token_ttl=60m token_max_ttl=120m secret_id_num_uses=10000 policies=my-policy
export ROLE_ID=$(vault read -field=role_id auth/test/role/my-role/role-id)
export SECRET_ID=$(vault write -f -field=secret_id auth/test/role/my-role/secret-id)
# Run confd
confd --onetime --log-level debug \
--confdir ./integration/confdir \
--backend vault \
--auth-type app-role \
--role-id $ROLE_ID \
--secret-id $SECRET_ID \
--path=test \
--node http://127.0.0.1:8200
================================================
FILE: integration/zookeeper/main.go
================================================
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"strconv"
"time"
zk "github.com/samuel/go-zookeeper/zk"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func zk_write(k string, v string, c *zk.Conn) {
e, stat, err := c.Exists(k)
check(err)
if e {
stat, err = c.Set(k, []byte(v), stat.Version)
check(err)
} else {
string, err := c.Create(k, []byte(v), int32(0), zk.WorldACL(zk.PermAll))
if string == "" {
check(err)
}
}
}
func parsejson(prefix string, x interface{}, c *zk.Conn) {
switch t := x.(type) {
case map[string]interface{}:
for k, v := range t {
if prefix != "" {
zk_write(prefix, "", c)
}
parsejson(prefix+"/"+k, v, c)
}
case []interface{}:
for i, v := range t {
parsejson(prefix+"["+strconv.Itoa(i)+"]", v, c)
}
case string:
zk_write(prefix, t, c)
fmt.Printf("%s = %q\n", prefix, t)
default:
fmt.Printf("Unhandled: %T\n", t)
}
}
func main() {
var pj interface{}
dat, err := ioutil.ReadFile("test.json")
check(err)
err = json.Unmarshal(dat, &pj)
check(err)
c, _, err := zk.Connect([]string{"127.0.0.1"}, time.Second) //*10)
check(err)
parsejson("", pj, c)
}
================================================
FILE: integration/zookeeper/test.json
================================================
{
"key": "foobar",
"database" : {
"host": "127.0.0.1",
"password": "p@sSw0rd",
"port": "3306",
"username": "confd"
},
"upstream" : {
"app1": "10.0.1.10:8080",
"app2": "10.0.1.11:8080"
},
"nested" : {
"east": {
"app1": "10.0.1.10:8080"
},
"west": {
"app2": "10.0.1.11:8080"
}
},
"prefix": {
"database": {
"host": "127.0.0.1",
"password": "p@sSw0rd",
"port": "3306",
"username": "confd"
},
"upstream" : {
"app1": "10.0.1.10:8080",
"app2": "10.0.1.11:8080"
},
"nested" : {
"east": {
"app1": "10.0.1.10:8080"
},
"west": {
"app2": "10.0.1.11:8080"
}
}
}
}
================================================
FILE: integration/zookeeper/test.sh
================================================
#!/bin/bash
export HOSTNAME="localhost"
# feed zookeeper
export ZK_PATH="`dirname \"$0\"`"
sh -c "cd $ZK_PATH; go run main.go"
# Run confd
confd --onetime --log-level debug --confdir ./integration/confdir --interval 5 --backend zookeeper --node 127.0.0.1:2181 -watch
================================================
FILE: integration/zookeeper/zoo.cfg
================================================
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181
================================================
FILE: log/log.go
================================================
/*
Package log provides support for logging to stdout and stderr.
Log entries will be logged in the following format:
timestamp hostname tag[pid]: SEVERITY Message
*/
package log
import (
"fmt"
"os"
"strings"
"time"
log "github.com/sirupsen/logrus"
)
type ConfdFormatter struct {
}
func (c *ConfdFormatter) Format(entry *log.Entry) ([]byte, error) {
timestamp := time.Now().Format(time.RFC3339)
hostname, _ := os.Hostname()
return []byte(fmt.Sprintf("%s %s %s[%d]: %s %s\n", timestamp, hostname, tag, os.Getpid(), strings.ToUpper(entry.Level.String()), entry.Message)), nil
}
// tag represents the application name generating the log message. The tag
// string will appear in all log entires.
var tag string
func init() {
tag = os.Args[0]
log.SetFormatter(&ConfdFormatter{})
}
// SetTag sets the tag.
func SetTag(t string) {
tag = t
}
// SetLevel sets the log level. Valid levels are panic, fatal, error, warn, info and debug.
func SetLevel(level string) {
lvl, err := log.ParseLevel(level)
if err != nil {
Fatal(fmt.Sprintf(`not a valid level: "%s"`, level))
}
log.SetLevel(lvl)
}
// Debug logs a message with severity DEBUG.
func Debug(format string, v ...interface{}) {
log.Debug(fmt.Sprintf(format, v...))
}
// Error logs a message with severity ERROR.
func Error(format string, v ...interface{}) {
log.Error(fmt.Sprintf(format, v...))
}
// Fatal logs a message with severity ERROR followed by a call to os.Exit().
func Fatal(format string, v ...interface{}) {
log.Fatal(fmt.Sprintf(format, v...))
}
// Info logs a message with severity INFO.
func Info(format string, v ...interface{}) {
log.Info(fmt.Sprintf(format, v...))
}
// Warning logs a message with severity WARNING.
func Warning(format string, v ...interface{}) {
log.Warning(fmt.Sprintf(format, v...))
}
================================================
FILE: resource/template/processor.go
================================================
package template
import (
"fmt"
"sync"
"time"
"github.com/kelseyhightower/confd/log"
util "github.com/kelseyhightower/confd/util"
)
type Processor interface {
Process()
}
func Process(config Config) error {
ts, err := getTemplateResources(config)
if err != nil {
return err
}
return process(ts)
}
func process(ts []*TemplateResource) error {
var lastErr error
for _, t := range ts {
if err := t.process(); err != nil {
log.Error(err.Error())
lastErr = err
}
}
return lastErr
}
type intervalProcessor struct {
config Config
stopChan chan bool
doneChan chan bool
errChan chan error
interval int
}
func IntervalProcessor(config Config, stopChan, doneChan chan bool, errChan chan error, interval int) Processor {
return &intervalProcessor{config, stopChan, doneChan, errChan, interval}
}
func (p *intervalProcessor) Process() {
defer close(p.doneChan)
for {
ts, err := getTemplateResources(p.config)
if err != nil {
log.Fatal(err.Error())
break
}
process(ts)
select {
case <-p.stopChan:
break
case <-time.After(time.Duration(p.interval) * time.Second):
continue
}
}
}
type watchProcessor struct {
config Config
stopChan chan bool
doneChan chan bool
errChan chan error
wg sync.WaitGroup
}
func WatchProcessor(config Config, stopChan, doneChan chan bool, errChan chan error) Processor {
var wg sync.WaitGroup
return &watchProcessor{config, stopChan, doneChan, errChan, wg}
}
func (p *watchProcessor) Process() {
defer close(p.doneChan)
ts, err := getTemplateResources(p.config)
if err != nil {
log.Fatal(err.Error())
return
}
for _, t := range ts {
t := t
p.wg.Add(1)
go p.monitorPrefix(t)
}
p.wg.Wait()
}
func (p *watchProcessor) monitorPrefix(t *TemplateResource) {
defer p.wg.Done()
keys := util.AppendPrefix(t.Prefix, t.Keys)
for {
index, err := t.storeClient.WatchPrefix(t.Prefix, keys, t.lastIndex, p.stopChan)
if err != nil {
p.errChan <- err
// Prevent backend errors from consuming all resources.
time.Sleep(time.Second * 2)
continue
}
t.lastIndex = index
if err := t.process(); err != nil {
p.errChan <- err
}
}
}
func getTemplateResources(config Config) ([]*TemplateResource, error) {
var lastError error
templates := make([]*TemplateResource, 0)
log.Debug("Loading template resources from confdir " + config.ConfDir)
if !util.IsFileExist(config.ConfDir) {
log.Warning(fmt.Sprintf("Cannot load template resources: confdir
gitextract_r312ub76/ ├── .dockerignore ├── .gitignore ├── .travis.yml ├── CHANGELOG ├── CONTRIBUTING.md ├── Dockerfile.build.alpine ├── LICENSE ├── MAINTAINERS ├── Makefile ├── README.md ├── backends/ │ ├── client.go │ ├── config.go │ ├── consul/ │ │ └── client.go │ ├── dynamodb/ │ │ └── client.go │ ├── env/ │ │ └── client.go │ ├── etcd/ │ │ └── client.go │ ├── etcdv3/ │ │ └── client.go │ ├── file/ │ │ └── client.go │ ├── rancher/ │ │ └── client.go │ ├── redis/ │ │ └── client.go │ ├── ssm/ │ │ └── client.go │ ├── vault/ │ │ └── client.go │ └── zookeeper/ │ └── client.go ├── confd.go ├── config.go ├── config_test.go ├── contrib/ │ ├── etcd/ │ │ └── Procfile │ └── generate-changelog.sh ├── docs/ │ ├── command-line-flags.md │ ├── configuration-guide.md │ ├── data_encryption.md │ ├── dns-srv-records.md │ ├── installation.md │ ├── logging.md │ ├── noop-mode.md │ ├── quick-start-guide.md │ ├── release-checklist.md │ ├── template-resources.md │ ├── templates.md │ ├── tomcat-sample.md │ └── vault-kubernetes-auth.md ├── go.mod ├── go.sum ├── integration/ │ ├── confdir/ │ │ ├── conf.d/ │ │ │ ├── basic.toml │ │ │ ├── exists.toml │ │ │ ├── iteration.toml │ │ │ ├── manykeys.toml │ │ │ └── nested.toml │ │ └── templates/ │ │ ├── basic.conf.tmpl │ │ ├── exists-test.conf.tmpl │ │ ├── iteration.conf.tmpl │ │ └── nested.conf.tmpl │ ├── consul/ │ │ └── test.sh │ ├── dynamodb/ │ │ └── test.sh │ ├── env/ │ │ └── test.sh │ ├── etcd/ │ │ └── test.sh │ ├── etcdv3/ │ │ └── test.sh │ ├── expect/ │ │ ├── basic.conf │ │ ├── check.sh │ │ ├── exists-test.conf │ │ └── iteration.conf │ ├── file/ │ │ └── test.sh │ ├── rancher/ │ │ └── test.sh │ ├── redis/ │ │ └── test.sh │ ├── ssm/ │ │ ├── main.go │ │ └── test.sh │ ├── vault/ │ │ └── test.sh │ ├── vault-path/ │ │ └── test.sh │ └── zookeeper/ │ ├── main.go │ ├── test.json │ ├── test.sh │ └── zoo.cfg ├── log/ │ └── log.go ├── resource/ │ └── template/ │ ├── processor.go │ ├── resource.go │ ├── resource_test.go │ ├── template_funcs.go │ └── template_test.go ├── util/ │ ├── filestat_posix.go │ ├── filestat_windows.go │ ├── util.go │ └── util_test.go ├── vendor/ │ ├── github.com/ │ │ ├── BurntSushi/ │ │ │ └── toml/ │ │ │ ├── .gitignore │ │ │ ├── COPYING │ │ │ ├── README.md │ │ │ ├── decode.go │ │ │ ├── decode_go116.go │ │ │ ├── deprecated.go │ │ │ ├── doc.go │ │ │ ├── encode.go │ │ │ ├── error.go │ │ │ ├── internal/ │ │ │ │ └── tz.go │ │ │ ├── lex.go │ │ │ ├── meta.go │ │ │ ├── parse.go │ │ │ ├── type_fields.go │ │ │ └── type_toml.go │ │ ├── armon/ │ │ │ └── go-metrics/ │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── const_unix.go │ │ │ ├── const_windows.go │ │ │ ├── inmem.go │ │ │ ├── inmem_endpoint.go │ │ │ ├── inmem_signal.go │ │ │ ├── metrics.go │ │ │ ├── sink.go │ │ │ ├── start.go │ │ │ ├── statsd.go │ │ │ └── statsite.go │ │ ├── aws/ │ │ │ └── aws-sdk-go/ │ │ │ ├── LICENSE.txt │ │ │ ├── NOTICE.txt │ │ │ ├── aws/ │ │ │ │ ├── auth/ │ │ │ │ │ └── bearer/ │ │ │ │ │ └── token.go │ │ │ │ ├── awserr/ │ │ │ │ │ ├── error.go │ │ │ │ │ └── types.go │ │ │ │ ├── awsutil/ │ │ │ │ │ ├── copy.go │ │ │ │ │ ├── equal.go │ │ │ │ │ ├── path_value.go │ │ │ │ │ ├── prettify.go │ │ │ │ │ └── string_value.go │ │ │ │ ├── client/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── default_retryer.go │ │ │ │ │ ├── logger.go │ │ │ │ │ ├── metadata/ │ │ │ │ │ │ └── client_info.go │ │ │ │ │ └── no_op_retryer.go │ │ │ │ ├── config.go │ │ │ │ ├── context_1_5.go │ │ │ │ ├── context_1_9.go │ │ │ │ ├── context_background_1_5.go │ │ │ │ ├── context_background_1_7.go │ │ │ │ ├── context_sleep.go │ │ │ │ ├── convert_types.go │ │ │ │ ├── corehandlers/ │ │ │ │ │ ├── awsinternal.go │ │ │ │ │ ├── handlers.go │ │ │ │ │ ├── param_validator.go │ │ │ │ │ └── user_agent.go │ │ │ │ ├── credentials/ │ │ │ │ │ ├── chain_provider.go │ │ │ │ │ ├── context_background_go1.5.go │ │ │ │ │ ├── context_background_go1.7.go │ │ │ │ │ ├── context_go1.5.go │ │ │ │ │ ├── context_go1.9.go │ │ │ │ │ ├── credentials.go │ │ │ │ │ ├── ec2rolecreds/ │ │ │ │ │ │ └── ec2_role_provider.go │ │ │ │ │ ├── endpointcreds/ │ │ │ │ │ │ └── provider.go │ │ │ │ │ ├── env_provider.go │ │ │ │ │ ├── example.ini │ │ │ │ │ ├── processcreds/ │ │ │ │ │ │ └── provider.go │ │ │ │ │ ├── shared_credentials_provider.go │ │ │ │ │ ├── ssocreds/ │ │ │ │ │ │ ├── doc.go │ │ │ │ │ │ ├── os.go │ │ │ │ │ │ ├── os_windows.go │ │ │ │ │ │ ├── provider.go │ │ │ │ │ │ ├── sso_cached_token.go │ │ │ │ │ │ └── token_provider.go │ │ │ │ │ ├── static_provider.go │ │ │ │ │ └── stscreds/ │ │ │ │ │ ├── assume_role_provider.go │ │ │ │ │ └── web_identity_provider.go │ │ │ │ ├── crr/ │ │ │ │ │ ├── cache.go │ │ │ │ │ ├── endpoint.go │ │ │ │ │ ├── sync_map.go │ │ │ │ │ └── sync_map_1_8.go │ │ │ │ ├── csm/ │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── enable.go │ │ │ │ │ ├── metric.go │ │ │ │ │ ├── metric_chan.go │ │ │ │ │ ├── metric_exception.go │ │ │ │ │ └── reporter.go │ │ │ │ ├── defaults/ │ │ │ │ │ ├── defaults.go │ │ │ │ │ └── shared_config.go │ │ │ │ ├── doc.go │ │ │ │ ├── ec2metadata/ │ │ │ │ │ ├── api.go │ │ │ │ │ ├── service.go │ │ │ │ │ └── token_provider.go │ │ │ │ ├── endpoints/ │ │ │ │ │ ├── decode.go │ │ │ │ │ ├── defaults.go │ │ │ │ │ ├── dep_service_ids.go │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── endpoints.go │ │ │ │ │ ├── legacy_regions.go │ │ │ │ │ ├── v3model.go │ │ │ │ │ └── v3model_codegen.go │ │ │ │ ├── errors.go │ │ │ │ ├── jsonvalue.go │ │ │ │ ├── logger.go │ │ │ │ ├── request/ │ │ │ │ │ ├── connection_reset_error.go │ │ │ │ │ ├── handlers.go │ │ │ │ │ ├── http_request.go │ │ │ │ │ ├── offset_reader.go │ │ │ │ │ ├── request.go │ │ │ │ │ ├── request_1_7.go │ │ │ │ │ ├── request_1_8.go │ │ │ │ │ ├── request_context.go │ │ │ │ │ ├── request_context_1_6.go │ │ │ │ │ ├── request_pagination.go │ │ │ │ │ ├── retryer.go │ │ │ │ │ ├── timeout_read_closer.go │ │ │ │ │ ├── validation.go │ │ │ │ │ └── waiter.go │ │ │ │ ├── session/ │ │ │ │ │ ├── credentials.go │ │ │ │ │ ├── custom_transport.go │ │ │ │ │ ├── custom_transport_go1.12.go │ │ │ │ │ ├── custom_transport_go1.5.go │ │ │ │ │ ├── custom_transport_go1.6.go │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── env_config.go │ │ │ │ │ ├── session.go │ │ │ │ │ └── shared_config.go │ │ │ │ ├── signer/ │ │ │ │ │ └── v4/ │ │ │ │ │ ├── header_rules.go │ │ │ │ │ ├── options.go │ │ │ │ │ ├── request_context_go1.5.go │ │ │ │ │ ├── request_context_go1.7.go │ │ │ │ │ ├── stream.go │ │ │ │ │ ├── uri_path.go │ │ │ │ │ └── v4.go │ │ │ │ ├── types.go │ │ │ │ ├── url.go │ │ │ │ ├── url_1_7.go │ │ │ │ └── version.go │ │ │ ├── internal/ │ │ │ │ ├── context/ │ │ │ │ │ └── background_go1.5.go │ │ │ │ ├── ini/ │ │ │ │ │ ├── ast.go │ │ │ │ │ ├── comma_token.go │ │ │ │ │ ├── comment_token.go │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── empty_token.go │ │ │ │ │ ├── expression.go │ │ │ │ │ ├── fuzz.go │ │ │ │ │ ├── ini.go │ │ │ │ │ ├── ini_lexer.go │ │ │ │ │ ├── ini_parser.go │ │ │ │ │ ├── literal_tokens.go │ │ │ │ │ ├── newline_token.go │ │ │ │ │ ├── number_helper.go │ │ │ │ │ ├── op_tokens.go │ │ │ │ │ ├── parse_error.go │ │ │ │ │ ├── parse_stack.go │ │ │ │ │ ├── sep_tokens.go │ │ │ │ │ ├── skipper.go │ │ │ │ │ ├── statement.go │ │ │ │ │ ├── value_util.go │ │ │ │ │ ├── visitor.go │ │ │ │ │ ├── walker.go │ │ │ │ │ └── ws_token.go │ │ │ │ ├── sdkio/ │ │ │ │ │ ├── byte.go │ │ │ │ │ ├── io_go1.6.go │ │ │ │ │ └── io_go1.7.go │ │ │ │ ├── sdkmath/ │ │ │ │ │ ├── floor.go │ │ │ │ │ └── floor_go1.9.go │ │ │ │ ├── sdkrand/ │ │ │ │ │ ├── locked_source.go │ │ │ │ │ ├── read.go │ │ │ │ │ └── read_1_5.go │ │ │ │ ├── sdkuri/ │ │ │ │ │ └── path.go │ │ │ │ ├── shareddefaults/ │ │ │ │ │ ├── ecs_container.go │ │ │ │ │ ├── shared_config.go │ │ │ │ │ ├── shared_config_resolve_home.go │ │ │ │ │ └── shared_config_resolve_home_go1.12.go │ │ │ │ ├── strings/ │ │ │ │ │ └── strings.go │ │ │ │ └── sync/ │ │ │ │ └── singleflight/ │ │ │ │ ├── LICENSE │ │ │ │ └── singleflight.go │ │ │ ├── private/ │ │ │ │ └── protocol/ │ │ │ │ ├── host.go │ │ │ │ ├── host_prefix.go │ │ │ │ ├── idempotency.go │ │ │ │ ├── json/ │ │ │ │ │ └── jsonutil/ │ │ │ │ │ ├── build.go │ │ │ │ │ └── unmarshal.go │ │ │ │ ├── jsonrpc/ │ │ │ │ │ ├── jsonrpc.go │ │ │ │ │ └── unmarshal_error.go │ │ │ │ ├── jsonvalue.go │ │ │ │ ├── payload.go │ │ │ │ ├── protocol.go │ │ │ │ ├── query/ │ │ │ │ │ ├── build.go │ │ │ │ │ ├── queryutil/ │ │ │ │ │ │ └── queryutil.go │ │ │ │ │ ├── unmarshal.go │ │ │ │ │ └── unmarshal_error.go │ │ │ │ ├── rest/ │ │ │ │ │ ├── build.go │ │ │ │ │ ├── payload.go │ │ │ │ │ └── unmarshal.go │ │ │ │ ├── restjson/ │ │ │ │ │ ├── restjson.go │ │ │ │ │ └── unmarshal_error.go │ │ │ │ ├── timestamp.go │ │ │ │ ├── unmarshal.go │ │ │ │ ├── unmarshal_error.go │ │ │ │ └── xml/ │ │ │ │ └── xmlutil/ │ │ │ │ ├── build.go │ │ │ │ ├── sort.go │ │ │ │ ├── unmarshal.go │ │ │ │ └── xml_to_struct.go │ │ │ └── service/ │ │ │ ├── dynamodb/ │ │ │ │ ├── api.go │ │ │ │ ├── customizations.go │ │ │ │ ├── doc.go │ │ │ │ ├── doc_custom.go │ │ │ │ ├── errors.go │ │ │ │ ├── service.go │ │ │ │ └── waiters.go │ │ │ ├── ssm/ │ │ │ │ ├── api.go │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ ├── service.go │ │ │ │ └── waiters.go │ │ │ ├── sso/ │ │ │ │ ├── api.go │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ ├── service.go │ │ │ │ └── ssoiface/ │ │ │ │ └── interface.go │ │ │ ├── ssooidc/ │ │ │ │ ├── api.go │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ └── service.go │ │ │ └── sts/ │ │ │ ├── api.go │ │ │ ├── customizations.go │ │ │ ├── doc.go │ │ │ ├── errors.go │ │ │ ├── service.go │ │ │ └── stsiface/ │ │ │ └── interface.go │ │ ├── cenkalti/ │ │ │ └── backoff/ │ │ │ └── v3/ │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── backoff.go │ │ │ ├── context.go │ │ │ ├── exponential.go │ │ │ ├── retry.go │ │ │ ├── ticker.go │ │ │ ├── timer.go │ │ │ └── tries.go │ │ ├── coreos/ │ │ │ ├── go-semver/ │ │ │ │ ├── LICENSE │ │ │ │ ├── NOTICE │ │ │ │ └── semver/ │ │ │ │ ├── semver.go │ │ │ │ └── sort.go │ │ │ └── go-systemd/ │ │ │ └── v22/ │ │ │ ├── LICENSE │ │ │ ├── NOTICE │ │ │ └── journal/ │ │ │ ├── journal.go │ │ │ ├── journal_unix.go │ │ │ └── journal_windows.go │ │ ├── fatih/ │ │ │ └── color/ │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── color.go │ │ │ ├── color_windows.go │ │ │ └── doc.go │ │ ├── fsnotify/ │ │ │ └── fsnotify/ │ │ │ ├── .cirrus.yml │ │ │ ├── .editorconfig │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── .mailmap │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── backend_fen.go │ │ │ ├── backend_inotify.go │ │ │ ├── backend_kqueue.go │ │ │ ├── backend_other.go │ │ │ ├── backend_windows.go │ │ │ ├── fsnotify.go │ │ │ ├── mkdoc.zsh │ │ │ ├── system_bsd.go │ │ │ └── system_darwin.go │ │ ├── garyburd/ │ │ │ └── redigo/ │ │ │ ├── LICENSE │ │ │ ├── internal/ │ │ │ │ └── commandinfo.go │ │ │ └── redis/ │ │ │ ├── conn.go │ │ │ ├── doc.go │ │ │ ├── go16.go │ │ │ ├── go17.go │ │ │ ├── go18.go │ │ │ ├── log.go │ │ │ ├── pool.go │ │ │ ├── pool17.go │ │ │ ├── pubsub.go │ │ │ ├── redis.go │ │ │ ├── reply.go │ │ │ ├── scan.go │ │ │ └── script.go │ │ ├── go-jose/ │ │ │ └── go-jose/ │ │ │ └── v3/ │ │ │ ├── .gitignore │ │ │ ├── .golangci.yml │ │ │ ├── .travis.yml │ │ │ ├── BUG-BOUNTY.md │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── asymmetric.go │ │ │ ├── cipher/ │ │ │ │ ├── cbc_hmac.go │ │ │ │ ├── concat_kdf.go │ │ │ │ ├── ecdh_es.go │ │ │ │ └── key_wrap.go │ │ │ ├── crypter.go │ │ │ ├── doc.go │ │ │ ├── encoding.go │ │ │ ├── json/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── decode.go │ │ │ │ ├── encode.go │ │ │ │ ├── indent.go │ │ │ │ ├── scanner.go │ │ │ │ ├── stream.go │ │ │ │ └── tags.go │ │ │ ├── jwe.go │ │ │ ├── jwk.go │ │ │ ├── jws.go │ │ │ ├── jwt/ │ │ │ │ ├── builder.go │ │ │ │ ├── claims.go │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ ├── jwt.go │ │ │ │ └── validation.go │ │ │ ├── opaque.go │ │ │ ├── shared.go │ │ │ ├── signing.go │ │ │ └── symmetric.go │ │ ├── gogo/ │ │ │ └── protobuf/ │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── gogoproto/ │ │ │ │ ├── Makefile │ │ │ │ ├── doc.go │ │ │ │ ├── gogo.pb.go │ │ │ │ ├── gogo.pb.golden │ │ │ │ ├── gogo.proto │ │ │ │ └── helper.go │ │ │ ├── proto/ │ │ │ │ ├── Makefile │ │ │ │ ├── clone.go │ │ │ │ ├── custom_gogo.go │ │ │ │ ├── decode.go │ │ │ │ ├── deprecated.go │ │ │ │ ├── discard.go │ │ │ │ ├── duration.go │ │ │ │ ├── duration_gogo.go │ │ │ │ ├── encode.go │ │ │ │ ├── encode_gogo.go │ │ │ │ ├── equal.go │ │ │ │ ├── extensions.go │ │ │ │ ├── extensions_gogo.go │ │ │ │ ├── lib.go │ │ │ │ ├── lib_gogo.go │ │ │ │ ├── message_set.go │ │ │ │ ├── pointer_reflect.go │ │ │ │ ├── pointer_reflect_gogo.go │ │ │ │ ├── pointer_unsafe.go │ │ │ │ ├── pointer_unsafe_gogo.go │ │ │ │ ├── properties.go │ │ │ │ ├── properties_gogo.go │ │ │ │ ├── skip_gogo.go │ │ │ │ ├── table_marshal.go │ │ │ │ ├── table_marshal_gogo.go │ │ │ │ ├── table_merge.go │ │ │ │ ├── table_unmarshal.go │ │ │ │ ├── table_unmarshal_gogo.go │ │ │ │ ├── text.go │ │ │ │ ├── text_gogo.go │ │ │ │ ├── text_parser.go │ │ │ │ ├── timestamp.go │ │ │ │ ├── timestamp_gogo.go │ │ │ │ ├── wrappers.go │ │ │ │ └── wrappers_gogo.go │ │ │ └── protoc-gen-gogo/ │ │ │ └── descriptor/ │ │ │ ├── Makefile │ │ │ ├── descriptor.go │ │ │ ├── descriptor.pb.go │ │ │ ├── descriptor_gostring.gen.go │ │ │ └── helper.go │ │ ├── golang/ │ │ │ └── protobuf/ │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── jsonpb/ │ │ │ │ ├── decode.go │ │ │ │ ├── encode.go │ │ │ │ └── json.go │ │ │ ├── proto/ │ │ │ │ ├── buffer.go │ │ │ │ ├── defaults.go │ │ │ │ ├── deprecated.go │ │ │ │ ├── discard.go │ │ │ │ ├── extensions.go │ │ │ │ ├── properties.go │ │ │ │ ├── proto.go │ │ │ │ ├── registry.go │ │ │ │ ├── text_decode.go │ │ │ │ ├── text_encode.go │ │ │ │ ├── wire.go │ │ │ │ └── wrappers.go │ │ │ └── ptypes/ │ │ │ ├── any/ │ │ │ │ └── any.pb.go │ │ │ ├── any.go │ │ │ ├── doc.go │ │ │ ├── duration/ │ │ │ │ └── duration.pb.go │ │ │ ├── duration.go │ │ │ ├── timestamp/ │ │ │ │ └── timestamp.pb.go │ │ │ └── timestamp.go │ │ ├── hashicorp/ │ │ │ ├── consul/ │ │ │ │ └── api/ │ │ │ │ ├── .copywrite.hcl │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── acl.go │ │ │ │ ├── agent.go │ │ │ │ ├── api.go │ │ │ │ ├── catalog.go │ │ │ │ ├── config_entry.go │ │ │ │ ├── config_entry_discoverychain.go │ │ │ │ ├── config_entry_exports.go │ │ │ │ ├── config_entry_gateways.go │ │ │ │ ├── config_entry_inline_certificate.go │ │ │ │ ├── config_entry_intentions.go │ │ │ │ ├── config_entry_jwt_provider.go │ │ │ │ ├── config_entry_mesh.go │ │ │ │ ├── config_entry_rate_limit_ip.go │ │ │ │ ├── config_entry_routes.go │ │ │ │ ├── config_entry_sameness_group.go │ │ │ │ ├── config_entry_status.go │ │ │ │ ├── connect.go │ │ │ │ ├── connect_ca.go │ │ │ │ ├── connect_intention.go │ │ │ │ ├── coordinate.go │ │ │ │ ├── debug.go │ │ │ │ ├── discovery_chain.go │ │ │ │ ├── event.go │ │ │ │ ├── health.go │ │ │ │ ├── internal.go │ │ │ │ ├── kv.go │ │ │ │ ├── lock.go │ │ │ │ ├── namespace.go │ │ │ │ ├── operator.go │ │ │ │ ├── operator_area.go │ │ │ │ ├── operator_audit.go │ │ │ │ ├── operator_autopilot.go │ │ │ │ ├── operator_keyring.go │ │ │ │ ├── operator_license.go │ │ │ │ ├── operator_raft.go │ │ │ │ ├── operator_segment.go │ │ │ │ ├── operator_usage.go │ │ │ │ ├── partition.go │ │ │ │ ├── peering.go │ │ │ │ ├── prepared_query.go │ │ │ │ ├── raw.go │ │ │ │ ├── semaphore.go │ │ │ │ ├── session.go │ │ │ │ ├── snapshot.go │ │ │ │ ├── status.go │ │ │ │ └── txn.go │ │ │ ├── errwrap/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ └── errwrap.go │ │ │ ├── go-cleanhttp/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── cleanhttp.go │ │ │ │ ├── doc.go │ │ │ │ └── handlers.go │ │ │ ├── go-hclog/ │ │ │ │ ├── .gitignore │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── colorize_unix.go │ │ │ │ ├── colorize_windows.go │ │ │ │ ├── context.go │ │ │ │ ├── exclude.go │ │ │ │ ├── global.go │ │ │ │ ├── interceptlogger.go │ │ │ │ ├── intlogger.go │ │ │ │ ├── logger.go │ │ │ │ ├── nulllogger.go │ │ │ │ ├── stacktrace.go │ │ │ │ ├── stdlog.go │ │ │ │ └── writer.go │ │ │ ├── go-immutable-radix/ │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── edges.go │ │ │ │ ├── iradix.go │ │ │ │ ├── iter.go │ │ │ │ ├── node.go │ │ │ │ ├── raw_iter.go │ │ │ │ └── reverse_iter.go │ │ │ ├── go-multierror/ │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── append.go │ │ │ │ ├── flatten.go │ │ │ │ ├── format.go │ │ │ │ ├── group.go │ │ │ │ ├── multierror.go │ │ │ │ ├── prefix.go │ │ │ │ └── sort.go │ │ │ ├── go-retryablehttp/ │ │ │ │ ├── .gitignore │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── CODEOWNERS │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── client.go │ │ │ │ └── roundtripper.go │ │ │ ├── go-rootcerts/ │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── doc.go │ │ │ │ ├── rootcerts.go │ │ │ │ ├── rootcerts_base.go │ │ │ │ └── rootcerts_darwin.go │ │ │ ├── go-secure-stdlib/ │ │ │ │ ├── parseutil/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── parsepath.go │ │ │ │ │ └── parseutil.go │ │ │ │ └── strutil/ │ │ │ │ ├── LICENSE │ │ │ │ └── strutil.go │ │ │ ├── go-sockaddr/ │ │ │ │ ├── .gitignore │ │ │ │ ├── GNUmakefile │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── doc.go │ │ │ │ ├── ifaddr.go │ │ │ │ ├── ifaddrs.go │ │ │ │ ├── ifattr.go │ │ │ │ ├── ipaddr.go │ │ │ │ ├── ipaddrs.go │ │ │ │ ├── ipv4addr.go │ │ │ │ ├── ipv6addr.go │ │ │ │ ├── rfc.go │ │ │ │ ├── route_info.go │ │ │ │ ├── route_info_android.go │ │ │ │ ├── route_info_bsd.go │ │ │ │ ├── route_info_default.go │ │ │ │ ├── route_info_linux.go │ │ │ │ ├── route_info_solaris.go │ │ │ │ ├── route_info_test_windows.go │ │ │ │ ├── route_info_windows.go │ │ │ │ ├── sockaddr.go │ │ │ │ ├── sockaddrs.go │ │ │ │ └── unixsock.go │ │ │ ├── golang-lru/ │ │ │ │ ├── LICENSE │ │ │ │ └── simplelru/ │ │ │ │ ├── lru.go │ │ │ │ └── lru_interface.go │ │ │ ├── hcl/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── appveyor.yml │ │ │ │ ├── decoder.go │ │ │ │ ├── hcl/ │ │ │ │ │ ├── ast/ │ │ │ │ │ │ ├── ast.go │ │ │ │ │ │ └── walk.go │ │ │ │ │ ├── parser/ │ │ │ │ │ │ ├── error.go │ │ │ │ │ │ └── parser.go │ │ │ │ │ ├── scanner/ │ │ │ │ │ │ └── scanner.go │ │ │ │ │ ├── strconv/ │ │ │ │ │ │ └── quote.go │ │ │ │ │ └── token/ │ │ │ │ │ ├── position.go │ │ │ │ │ └── token.go │ │ │ │ ├── hcl.go │ │ │ │ ├── json/ │ │ │ │ │ ├── parser/ │ │ │ │ │ │ ├── flatten.go │ │ │ │ │ │ └── parser.go │ │ │ │ │ ├── scanner/ │ │ │ │ │ │ └── scanner.go │ │ │ │ │ └── token/ │ │ │ │ │ ├── position.go │ │ │ │ │ └── token.go │ │ │ │ ├── lex.go │ │ │ │ └── parse.go │ │ │ ├── serf/ │ │ │ │ ├── LICENSE │ │ │ │ └── coordinate/ │ │ │ │ ├── client.go │ │ │ │ ├── config.go │ │ │ │ ├── coordinate.go │ │ │ │ └── phantom.go │ │ │ └── vault/ │ │ │ └── api/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── auth.go │ │ │ ├── auth_token.go │ │ │ ├── client.go │ │ │ ├── help.go │ │ │ ├── kv.go │ │ │ ├── kv_v1.go │ │ │ ├── kv_v2.go │ │ │ ├── lifetime_watcher.go │ │ │ ├── logical.go │ │ │ ├── output_policy.go │ │ │ ├── output_string.go │ │ │ ├── plugin_helpers.go │ │ │ ├── plugin_runtime_types.go │ │ │ ├── plugin_types.go │ │ │ ├── replication_status.go │ │ │ ├── request.go │ │ │ ├── response.go │ │ │ ├── secret.go │ │ │ ├── ssh.go │ │ │ ├── ssh_agent.go │ │ │ ├── sudo_paths.go │ │ │ ├── sys.go │ │ │ ├── sys_audit.go │ │ │ ├── sys_auth.go │ │ │ ├── sys_capabilities.go │ │ │ ├── sys_config_cors.go │ │ │ ├── sys_generate_root.go │ │ │ ├── sys_hastatus.go │ │ │ ├── sys_health.go │ │ │ ├── sys_init.go │ │ │ ├── sys_leader.go │ │ │ ├── sys_leases.go │ │ │ ├── sys_mfa.go │ │ │ ├── sys_monitor.go │ │ │ ├── sys_mounts.go │ │ │ ├── sys_plugins.go │ │ │ ├── sys_plugins_runtimes.go │ │ │ ├── sys_policy.go │ │ │ ├── sys_raft.go │ │ │ ├── sys_rekey.go │ │ │ ├── sys_rotate.go │ │ │ ├── sys_seal.go │ │ │ └── sys_stepdown.go │ │ ├── jmespath/ │ │ │ └── go-jmespath/ │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── api.go │ │ │ ├── astnodetype_string.go │ │ │ ├── functions.go │ │ │ ├── interpreter.go │ │ │ ├── lexer.go │ │ │ ├── parser.go │ │ │ ├── toktype_string.go │ │ │ └── util.go │ │ ├── kelseyhightower/ │ │ │ └── memkv/ │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── kvpair.go │ │ │ └── store.go │ │ ├── mattn/ │ │ │ ├── go-colorable/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── colorable_appengine.go │ │ │ │ ├── colorable_others.go │ │ │ │ ├── colorable_windows.go │ │ │ │ ├── go.test.sh │ │ │ │ └── noncolorable.go │ │ │ └── go-isatty/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── doc.go │ │ │ ├── go.test.sh │ │ │ ├── isatty_bsd.go │ │ │ ├── isatty_others.go │ │ │ ├── isatty_plan9.go │ │ │ ├── isatty_solaris.go │ │ │ ├── isatty_tcgets.go │ │ │ └── isatty_windows.go │ │ ├── mitchellh/ │ │ │ ├── go-homedir/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ └── homedir.go │ │ │ └── mapstructure/ │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── decode_hooks.go │ │ │ ├── error.go │ │ │ └── mapstructure.go │ │ ├── ryanuber/ │ │ │ └── go-glob/ │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── glob.go │ │ └── samuel/ │ │ └── go-zookeeper/ │ │ ├── LICENSE │ │ └── zk/ │ │ ├── conn.go │ │ ├── constants.go │ │ ├── dnshostprovider.go │ │ ├── flw.go │ │ ├── lock.go │ │ ├── structs.go │ │ └── util.go │ ├── go.etcd.io/ │ │ └── etcd/ │ │ ├── api/ │ │ │ └── v3/ │ │ │ ├── LICENSE │ │ │ ├── authpb/ │ │ │ │ ├── auth.pb.go │ │ │ │ └── auth.proto │ │ │ ├── etcdserverpb/ │ │ │ │ ├── etcdserver.pb.go │ │ │ │ ├── etcdserver.proto │ │ │ │ ├── raft_internal.pb.go │ │ │ │ ├── raft_internal.proto │ │ │ │ ├── raft_internal_stringer.go │ │ │ │ ├── rpc.pb.go │ │ │ │ └── rpc.proto │ │ │ ├── membershippb/ │ │ │ │ ├── membership.pb.go │ │ │ │ └── membership.proto │ │ │ ├── mvccpb/ │ │ │ │ ├── kv.pb.go │ │ │ │ └── kv.proto │ │ │ ├── v3rpc/ │ │ │ │ └── rpctypes/ │ │ │ │ ├── doc.go │ │ │ │ ├── error.go │ │ │ │ ├── md.go │ │ │ │ └── metadatafields.go │ │ │ └── version/ │ │ │ └── version.go │ │ └── client/ │ │ ├── pkg/ │ │ │ └── v3/ │ │ │ ├── LICENSE │ │ │ ├── logutil/ │ │ │ │ ├── doc.go │ │ │ │ ├── log_level.go │ │ │ │ ├── zap.go │ │ │ │ └── zap_journal.go │ │ │ ├── systemd/ │ │ │ │ ├── doc.go │ │ │ │ └── journal.go │ │ │ └── types/ │ │ │ ├── doc.go │ │ │ ├── id.go │ │ │ ├── set.go │ │ │ ├── slice.go │ │ │ ├── urls.go │ │ │ └── urlsmap.go │ │ └── v3/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── auth.go │ │ ├── client.go │ │ ├── cluster.go │ │ ├── compact_op.go │ │ ├── compare.go │ │ ├── config.go │ │ ├── credentials/ │ │ │ └── credentials.go │ │ ├── ctx.go │ │ ├── doc.go │ │ ├── internal/ │ │ │ ├── endpoint/ │ │ │ │ └── endpoint.go │ │ │ └── resolver/ │ │ │ └── resolver.go │ │ ├── kv.go │ │ ├── lease.go │ │ ├── logger.go │ │ ├── maintenance.go │ │ ├── op.go │ │ ├── options.go │ │ ├── retry.go │ │ ├── retry_interceptor.go │ │ ├── sort.go │ │ ├── txn.go │ │ ├── utils.go │ │ └── watch.go │ ├── golang.org/ │ │ └── x/ │ │ ├── crypto/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── pbkdf2/ │ │ │ └── pbkdf2.go │ │ ├── exp/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── constraints/ │ │ │ │ └── constraints.go │ │ │ └── slices/ │ │ │ ├── cmp.go │ │ │ ├── slices.go │ │ │ ├── sort.go │ │ │ ├── zsortanyfunc.go │ │ │ └── zsortordered.go │ │ ├── net/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── http/ │ │ │ │ └── httpguts/ │ │ │ │ ├── guts.go │ │ │ │ └── httplex.go │ │ │ ├── http2/ │ │ │ │ ├── .gitignore │ │ │ │ ├── ascii.go │ │ │ │ ├── ciphers.go │ │ │ │ ├── client_conn_pool.go │ │ │ │ ├── databuffer.go │ │ │ │ ├── errors.go │ │ │ │ ├── flow.go │ │ │ │ ├── frame.go │ │ │ │ ├── gotrack.go │ │ │ │ ├── headermap.go │ │ │ │ ├── hpack/ │ │ │ │ │ ├── encode.go │ │ │ │ │ ├── hpack.go │ │ │ │ │ ├── huffman.go │ │ │ │ │ ├── static_table.go │ │ │ │ │ └── tables.go │ │ │ │ ├── http2.go │ │ │ │ ├── pipe.go │ │ │ │ ├── server.go │ │ │ │ ├── transport.go │ │ │ │ ├── write.go │ │ │ │ ├── writesched.go │ │ │ │ ├── writesched_priority.go │ │ │ │ ├── writesched_random.go │ │ │ │ └── writesched_roundrobin.go │ │ │ ├── idna/ │ │ │ │ ├── go118.go │ │ │ │ ├── idna10.0.0.go │ │ │ │ ├── idna9.0.0.go │ │ │ │ ├── pre_go118.go │ │ │ │ ├── punycode.go │ │ │ │ ├── tables10.0.0.go │ │ │ │ ├── tables11.0.0.go │ │ │ │ ├── tables12.0.0.go │ │ │ │ ├── tables13.0.0.go │ │ │ │ ├── tables15.0.0.go │ │ │ │ ├── tables9.0.0.go │ │ │ │ ├── trie.go │ │ │ │ ├── trie12.0.0.go │ │ │ │ ├── trie13.0.0.go │ │ │ │ └── trieval.go │ │ │ ├── internal/ │ │ │ │ └── timeseries/ │ │ │ │ └── timeseries.go │ │ │ └── trace/ │ │ │ ├── events.go │ │ │ ├── histogram.go │ │ │ └── trace.go │ │ ├── sys/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── unix/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── affinity_linux.go │ │ │ │ ├── aliases.go │ │ │ │ ├── asm_aix_ppc64.s │ │ │ │ ├── asm_bsd_386.s │ │ │ │ ├── asm_bsd_amd64.s │ │ │ │ ├── asm_bsd_arm.s │ │ │ │ ├── asm_bsd_arm64.s │ │ │ │ ├── asm_bsd_ppc64.s │ │ │ │ ├── asm_bsd_riscv64.s │ │ │ │ ├── asm_linux_386.s │ │ │ │ ├── asm_linux_amd64.s │ │ │ │ ├── asm_linux_arm.s │ │ │ │ ├── asm_linux_arm64.s │ │ │ │ ├── asm_linux_loong64.s │ │ │ │ ├── asm_linux_mips64x.s │ │ │ │ ├── asm_linux_mipsx.s │ │ │ │ ├── asm_linux_ppc64x.s │ │ │ │ ├── asm_linux_riscv64.s │ │ │ │ ├── asm_linux_s390x.s │ │ │ │ ├── asm_openbsd_mips64.s │ │ │ │ ├── asm_solaris_amd64.s │ │ │ │ ├── asm_zos_s390x.s │ │ │ │ ├── bluetooth_linux.go │ │ │ │ ├── cap_freebsd.go │ │ │ │ ├── constants.go │ │ │ │ ├── dev_aix_ppc.go │ │ │ │ ├── dev_aix_ppc64.go │ │ │ │ ├── dev_darwin.go │ │ │ │ ├── dev_dragonfly.go │ │ │ │ ├── dev_freebsd.go │ │ │ │ ├── dev_linux.go │ │ │ │ ├── dev_netbsd.go │ │ │ │ ├── dev_openbsd.go │ │ │ │ ├── dev_zos.go │ │ │ │ ├── dirent.go │ │ │ │ ├── endian_big.go │ │ │ │ ├── endian_little.go │ │ │ │ ├── env_unix.go │ │ │ │ ├── epoll_zos.go │ │ │ │ ├── fcntl.go │ │ │ │ ├── fcntl_darwin.go │ │ │ │ ├── fcntl_linux_32bit.go │ │ │ │ ├── fdset.go │ │ │ │ ├── fstatfs_zos.go │ │ │ │ ├── gccgo.go │ │ │ │ ├── gccgo_c.c │ │ │ │ ├── gccgo_linux_amd64.go │ │ │ │ ├── ifreq_linux.go │ │ │ │ ├── ioctl_linux.go │ │ │ │ ├── ioctl_signed.go │ │ │ │ ├── ioctl_unsigned.go │ │ │ │ ├── ioctl_zos.go │ │ │ │ ├── mkall.sh │ │ │ │ ├── mkerrors.sh │ │ │ │ ├── mmap_nomremap.go │ │ │ │ ├── mremap.go │ │ │ │ ├── pagesize_unix.go │ │ │ │ ├── pledge_openbsd.go │ │ │ │ ├── ptrace_darwin.go │ │ │ │ ├── ptrace_ios.go │ │ │ │ ├── race.go │ │ │ │ ├── race0.go │ │ │ │ ├── readdirent_getdents.go │ │ │ │ ├── readdirent_getdirentries.go │ │ │ │ ├── sockcmsg_dragonfly.go │ │ │ │ ├── sockcmsg_linux.go │ │ │ │ ├── sockcmsg_unix.go │ │ │ │ ├── sockcmsg_unix_other.go │ │ │ │ ├── syscall.go │ │ │ │ ├── syscall_aix.go │ │ │ │ ├── syscall_aix_ppc.go │ │ │ │ ├── syscall_aix_ppc64.go │ │ │ │ ├── syscall_bsd.go │ │ │ │ ├── syscall_darwin.go │ │ │ │ ├── syscall_darwin_amd64.go │ │ │ │ ├── syscall_darwin_arm64.go │ │ │ │ ├── syscall_darwin_libSystem.go │ │ │ │ ├── syscall_dragonfly.go │ │ │ │ ├── syscall_dragonfly_amd64.go │ │ │ │ ├── syscall_freebsd.go │ │ │ │ ├── syscall_freebsd_386.go │ │ │ │ ├── syscall_freebsd_amd64.go │ │ │ │ ├── syscall_freebsd_arm.go │ │ │ │ ├── syscall_freebsd_arm64.go │ │ │ │ ├── syscall_freebsd_riscv64.go │ │ │ │ ├── syscall_hurd.go │ │ │ │ ├── syscall_hurd_386.go │ │ │ │ ├── syscall_illumos.go │ │ │ │ ├── syscall_linux.go │ │ │ │ ├── syscall_linux_386.go │ │ │ │ ├── syscall_linux_alarm.go │ │ │ │ ├── syscall_linux_amd64.go │ │ │ │ ├── syscall_linux_amd64_gc.go │ │ │ │ ├── syscall_linux_arm.go │ │ │ │ ├── syscall_linux_arm64.go │ │ │ │ ├── syscall_linux_gc.go │ │ │ │ ├── syscall_linux_gc_386.go │ │ │ │ ├── syscall_linux_gc_arm.go │ │ │ │ ├── syscall_linux_gccgo_386.go │ │ │ │ ├── syscall_linux_gccgo_arm.go │ │ │ │ ├── syscall_linux_loong64.go │ │ │ │ ├── syscall_linux_mips64x.go │ │ │ │ ├── syscall_linux_mipsx.go │ │ │ │ ├── syscall_linux_ppc.go │ │ │ │ ├── syscall_linux_ppc64x.go │ │ │ │ ├── syscall_linux_riscv64.go │ │ │ │ ├── syscall_linux_s390x.go │ │ │ │ ├── syscall_linux_sparc64.go │ │ │ │ ├── syscall_netbsd.go │ │ │ │ ├── syscall_netbsd_386.go │ │ │ │ ├── syscall_netbsd_amd64.go │ │ │ │ ├── syscall_netbsd_arm.go │ │ │ │ ├── syscall_netbsd_arm64.go │ │ │ │ ├── syscall_openbsd.go │ │ │ │ ├── syscall_openbsd_386.go │ │ │ │ ├── syscall_openbsd_amd64.go │ │ │ │ ├── syscall_openbsd_arm.go │ │ │ │ ├── syscall_openbsd_arm64.go │ │ │ │ ├── syscall_openbsd_libc.go │ │ │ │ ├── syscall_openbsd_mips64.go │ │ │ │ ├── syscall_openbsd_ppc64.go │ │ │ │ ├── syscall_openbsd_riscv64.go │ │ │ │ ├── syscall_solaris.go │ │ │ │ ├── syscall_solaris_amd64.go │ │ │ │ ├── syscall_unix.go │ │ │ │ ├── syscall_unix_gc.go │ │ │ │ ├── syscall_unix_gc_ppc64x.go │ │ │ │ ├── syscall_zos_s390x.go │ │ │ │ ├── sysvshm_linux.go │ │ │ │ ├── sysvshm_unix.go │ │ │ │ ├── sysvshm_unix_other.go │ │ │ │ ├── timestruct.go │ │ │ │ ├── unveil_openbsd.go │ │ │ │ ├── xattr_bsd.go │ │ │ │ ├── zerrors_aix_ppc.go │ │ │ │ ├── zerrors_aix_ppc64.go │ │ │ │ ├── zerrors_darwin_amd64.go │ │ │ │ ├── zerrors_darwin_arm64.go │ │ │ │ ├── zerrors_dragonfly_amd64.go │ │ │ │ ├── zerrors_freebsd_386.go │ │ │ │ ├── zerrors_freebsd_amd64.go │ │ │ │ ├── zerrors_freebsd_arm.go │ │ │ │ ├── zerrors_freebsd_arm64.go │ │ │ │ ├── zerrors_freebsd_riscv64.go │ │ │ │ ├── zerrors_linux.go │ │ │ │ ├── zerrors_linux_386.go │ │ │ │ ├── zerrors_linux_amd64.go │ │ │ │ ├── zerrors_linux_arm.go │ │ │ │ ├── zerrors_linux_arm64.go │ │ │ │ ├── zerrors_linux_loong64.go │ │ │ │ ├── zerrors_linux_mips.go │ │ │ │ ├── zerrors_linux_mips64.go │ │ │ │ ├── zerrors_linux_mips64le.go │ │ │ │ ├── zerrors_linux_mipsle.go │ │ │ │ ├── zerrors_linux_ppc.go │ │ │ │ ├── zerrors_linux_ppc64.go │ │ │ │ ├── zerrors_linux_ppc64le.go │ │ │ │ ├── zerrors_linux_riscv64.go │ │ │ │ ├── zerrors_linux_s390x.go │ │ │ │ ├── zerrors_linux_sparc64.go │ │ │ │ ├── zerrors_netbsd_386.go │ │ │ │ ├── zerrors_netbsd_amd64.go │ │ │ │ ├── zerrors_netbsd_arm.go │ │ │ │ ├── zerrors_netbsd_arm64.go │ │ │ │ ├── zerrors_openbsd_386.go │ │ │ │ ├── zerrors_openbsd_amd64.go │ │ │ │ ├── zerrors_openbsd_arm.go │ │ │ │ ├── zerrors_openbsd_arm64.go │ │ │ │ ├── zerrors_openbsd_mips64.go │ │ │ │ ├── zerrors_openbsd_ppc64.go │ │ │ │ ├── zerrors_openbsd_riscv64.go │ │ │ │ ├── zerrors_solaris_amd64.go │ │ │ │ ├── zerrors_zos_s390x.go │ │ │ │ ├── zptrace_armnn_linux.go │ │ │ │ ├── zptrace_linux_arm64.go │ │ │ │ ├── zptrace_mipsnn_linux.go │ │ │ │ ├── zptrace_mipsnnle_linux.go │ │ │ │ ├── zptrace_x86_linux.go │ │ │ │ ├── zsyscall_aix_ppc.go │ │ │ │ ├── zsyscall_aix_ppc64.go │ │ │ │ ├── zsyscall_aix_ppc64_gc.go │ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go │ │ │ │ ├── zsyscall_darwin_amd64.go │ │ │ │ ├── zsyscall_darwin_amd64.s │ │ │ │ ├── zsyscall_darwin_arm64.go │ │ │ │ ├── zsyscall_darwin_arm64.s │ │ │ │ ├── zsyscall_dragonfly_amd64.go │ │ │ │ ├── zsyscall_freebsd_386.go │ │ │ │ ├── zsyscall_freebsd_amd64.go │ │ │ │ ├── zsyscall_freebsd_arm.go │ │ │ │ ├── zsyscall_freebsd_arm64.go │ │ │ │ ├── zsyscall_freebsd_riscv64.go │ │ │ │ ├── zsyscall_illumos_amd64.go │ │ │ │ ├── zsyscall_linux.go │ │ │ │ ├── zsyscall_linux_386.go │ │ │ │ ├── zsyscall_linux_amd64.go │ │ │ │ ├── zsyscall_linux_arm.go │ │ │ │ ├── zsyscall_linux_arm64.go │ │ │ │ ├── zsyscall_linux_loong64.go │ │ │ │ ├── zsyscall_linux_mips.go │ │ │ │ ├── zsyscall_linux_mips64.go │ │ │ │ ├── zsyscall_linux_mips64le.go │ │ │ │ ├── zsyscall_linux_mipsle.go │ │ │ │ ├── zsyscall_linux_ppc.go │ │ │ │ ├── zsyscall_linux_ppc64.go │ │ │ │ ├── zsyscall_linux_ppc64le.go │ │ │ │ ├── zsyscall_linux_riscv64.go │ │ │ │ ├── zsyscall_linux_s390x.go │ │ │ │ ├── zsyscall_linux_sparc64.go │ │ │ │ ├── zsyscall_netbsd_386.go │ │ │ │ ├── zsyscall_netbsd_amd64.go │ │ │ │ ├── zsyscall_netbsd_arm.go │ │ │ │ ├── zsyscall_netbsd_arm64.go │ │ │ │ ├── zsyscall_openbsd_386.go │ │ │ │ ├── zsyscall_openbsd_386.s │ │ │ │ ├── zsyscall_openbsd_amd64.go │ │ │ │ ├── zsyscall_openbsd_amd64.s │ │ │ │ ├── zsyscall_openbsd_arm.go │ │ │ │ ├── zsyscall_openbsd_arm.s │ │ │ │ ├── zsyscall_openbsd_arm64.go │ │ │ │ ├── zsyscall_openbsd_arm64.s │ │ │ │ ├── zsyscall_openbsd_mips64.go │ │ │ │ ├── zsyscall_openbsd_mips64.s │ │ │ │ ├── zsyscall_openbsd_ppc64.go │ │ │ │ ├── zsyscall_openbsd_ppc64.s │ │ │ │ ├── zsyscall_openbsd_riscv64.go │ │ │ │ ├── zsyscall_openbsd_riscv64.s │ │ │ │ ├── zsyscall_solaris_amd64.go │ │ │ │ ├── zsyscall_zos_s390x.go │ │ │ │ ├── zsysctl_openbsd_386.go │ │ │ │ ├── zsysctl_openbsd_amd64.go │ │ │ │ ├── zsysctl_openbsd_arm.go │ │ │ │ ├── zsysctl_openbsd_arm64.go │ │ │ │ ├── zsysctl_openbsd_mips64.go │ │ │ │ ├── zsysctl_openbsd_ppc64.go │ │ │ │ ├── zsysctl_openbsd_riscv64.go │ │ │ │ ├── zsysnum_darwin_amd64.go │ │ │ │ ├── zsysnum_darwin_arm64.go │ │ │ │ ├── zsysnum_dragonfly_amd64.go │ │ │ │ ├── zsysnum_freebsd_386.go │ │ │ │ ├── zsysnum_freebsd_amd64.go │ │ │ │ ├── zsysnum_freebsd_arm.go │ │ │ │ ├── zsysnum_freebsd_arm64.go │ │ │ │ ├── zsysnum_freebsd_riscv64.go │ │ │ │ ├── zsysnum_linux_386.go │ │ │ │ ├── zsysnum_linux_amd64.go │ │ │ │ ├── zsysnum_linux_arm.go │ │ │ │ ├── zsysnum_linux_arm64.go │ │ │ │ ├── zsysnum_linux_loong64.go │ │ │ │ ├── zsysnum_linux_mips.go │ │ │ │ ├── zsysnum_linux_mips64.go │ │ │ │ ├── zsysnum_linux_mips64le.go │ │ │ │ ├── zsysnum_linux_mipsle.go │ │ │ │ ├── zsysnum_linux_ppc.go │ │ │ │ ├── zsysnum_linux_ppc64.go │ │ │ │ ├── zsysnum_linux_ppc64le.go │ │ │ │ ├── zsysnum_linux_riscv64.go │ │ │ │ ├── zsysnum_linux_s390x.go │ │ │ │ ├── zsysnum_linux_sparc64.go │ │ │ │ ├── zsysnum_netbsd_386.go │ │ │ │ ├── zsysnum_netbsd_amd64.go │ │ │ │ ├── zsysnum_netbsd_arm.go │ │ │ │ ├── zsysnum_netbsd_arm64.go │ │ │ │ ├── zsysnum_openbsd_386.go │ │ │ │ ├── zsysnum_openbsd_amd64.go │ │ │ │ ├── zsysnum_openbsd_arm.go │ │ │ │ ├── zsysnum_openbsd_arm64.go │ │ │ │ ├── zsysnum_openbsd_mips64.go │ │ │ │ ├── zsysnum_openbsd_ppc64.go │ │ │ │ ├── zsysnum_openbsd_riscv64.go │ │ │ │ ├── zsysnum_zos_s390x.go │ │ │ │ ├── ztypes_aix_ppc.go │ │ │ │ ├── ztypes_aix_ppc64.go │ │ │ │ ├── ztypes_darwin_amd64.go │ │ │ │ ├── ztypes_darwin_arm64.go │ │ │ │ ├── ztypes_dragonfly_amd64.go │ │ │ │ ├── ztypes_freebsd_386.go │ │ │ │ ├── ztypes_freebsd_amd64.go │ │ │ │ ├── ztypes_freebsd_arm.go │ │ │ │ ├── ztypes_freebsd_arm64.go │ │ │ │ ├── ztypes_freebsd_riscv64.go │ │ │ │ ├── ztypes_linux.go │ │ │ │ ├── ztypes_linux_386.go │ │ │ │ ├── ztypes_linux_amd64.go │ │ │ │ ├── ztypes_linux_arm.go │ │ │ │ ├── ztypes_linux_arm64.go │ │ │ │ ├── ztypes_linux_loong64.go │ │ │ │ ├── ztypes_linux_mips.go │ │ │ │ ├── ztypes_linux_mips64.go │ │ │ │ ├── ztypes_linux_mips64le.go │ │ │ │ ├── ztypes_linux_mipsle.go │ │ │ │ ├── ztypes_linux_ppc.go │ │ │ │ ├── ztypes_linux_ppc64.go │ │ │ │ ├── ztypes_linux_ppc64le.go │ │ │ │ ├── ztypes_linux_riscv64.go │ │ │ │ ├── ztypes_linux_s390x.go │ │ │ │ ├── ztypes_linux_sparc64.go │ │ │ │ ├── ztypes_netbsd_386.go │ │ │ │ ├── ztypes_netbsd_amd64.go │ │ │ │ ├── ztypes_netbsd_arm.go │ │ │ │ ├── ztypes_netbsd_arm64.go │ │ │ │ ├── ztypes_openbsd_386.go │ │ │ │ ├── ztypes_openbsd_amd64.go │ │ │ │ ├── ztypes_openbsd_arm.go │ │ │ │ ├── ztypes_openbsd_arm64.go │ │ │ │ ├── ztypes_openbsd_mips64.go │ │ │ │ ├── ztypes_openbsd_ppc64.go │ │ │ │ ├── ztypes_openbsd_riscv64.go │ │ │ │ ├── ztypes_solaris_amd64.go │ │ │ │ └── ztypes_zos_s390x.go │ │ │ └── windows/ │ │ │ ├── aliases.go │ │ │ ├── dll_windows.go │ │ │ ├── empty.s │ │ │ ├── env_windows.go │ │ │ ├── eventlog.go │ │ │ ├── exec_windows.go │ │ │ ├── memory_windows.go │ │ │ ├── mkerrors.bash │ │ │ ├── mkknownfolderids.bash │ │ │ ├── mksyscall.go │ │ │ ├── race.go │ │ │ ├── race0.go │ │ │ ├── security_windows.go │ │ │ ├── service.go │ │ │ ├── setupapi_windows.go │ │ │ ├── str.go │ │ │ ├── syscall.go │ │ │ ├── syscall_windows.go │ │ │ ├── types_windows.go │ │ │ ├── types_windows_386.go │ │ │ ├── types_windows_amd64.go │ │ │ ├── types_windows_arm.go │ │ │ ├── types_windows_arm64.go │ │ │ ├── zerrors_windows.go │ │ │ ├── zknownfolderids_windows.go │ │ │ └── zsyscall_windows.go │ │ ├── text/ │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── secure/ │ │ │ │ └── bidirule/ │ │ │ │ ├── bidirule.go │ │ │ │ ├── bidirule10.0.0.go │ │ │ │ └── bidirule9.0.0.go │ │ │ ├── transform/ │ │ │ │ └── transform.go │ │ │ └── unicode/ │ │ │ ├── bidi/ │ │ │ │ ├── bidi.go │ │ │ │ ├── bracket.go │ │ │ │ ├── core.go │ │ │ │ ├── prop.go │ │ │ │ ├── tables10.0.0.go │ │ │ │ ├── tables11.0.0.go │ │ │ │ ├── tables12.0.0.go │ │ │ │ ├── tables13.0.0.go │ │ │ │ ├── tables15.0.0.go │ │ │ │ ├── tables9.0.0.go │ │ │ │ └── trieval.go │ │ │ └── norm/ │ │ │ ├── composition.go │ │ │ ├── forminfo.go │ │ │ ├── input.go │ │ │ ├── iter.go │ │ │ ├── normalize.go │ │ │ ├── readwriter.go │ │ │ ├── tables10.0.0.go │ │ │ ├── tables11.0.0.go │ │ │ ├── tables12.0.0.go │ │ │ ├── tables13.0.0.go │ │ │ ├── tables15.0.0.go │ │ │ ├── tables9.0.0.go │ │ │ ├── transform.go │ │ │ └── trie.go │ │ └── time/ │ │ ├── LICENSE │ │ ├── PATENTS │ │ └── rate/ │ │ ├── rate.go │ │ └── sometimes.go │ ├── google.golang.org/ │ │ ├── genproto/ │ │ │ ├── LICENSE │ │ │ ├── googleapis/ │ │ │ │ ├── api/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── annotations.pb.go │ │ │ │ │ │ ├── client.pb.go │ │ │ │ │ │ ├── field_behavior.pb.go │ │ │ │ │ │ ├── field_info.pb.go │ │ │ │ │ │ ├── http.pb.go │ │ │ │ │ │ ├── resource.pb.go │ │ │ │ │ │ └── routing.pb.go │ │ │ │ │ ├── launch_stage.pb.go │ │ │ │ │ └── tidyfix.go │ │ │ │ └── rpc/ │ │ │ │ ├── LICENSE │ │ │ │ └── status/ │ │ │ │ └── status.pb.go │ │ │ └── internal/ │ │ │ └── doc.go │ │ ├── grpc/ │ │ │ ├── AUTHORS │ │ │ ├── CODE-OF-CONDUCT.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── GOVERNANCE.md │ │ │ ├── LICENSE │ │ │ ├── MAINTAINERS.md │ │ │ ├── Makefile │ │ │ ├── NOTICE.txt │ │ │ ├── README.md │ │ │ ├── SECURITY.md │ │ │ ├── attributes/ │ │ │ │ └── attributes.go │ │ │ ├── backoff/ │ │ │ │ └── backoff.go │ │ │ ├── backoff.go │ │ │ ├── balancer/ │ │ │ │ ├── balancer.go │ │ │ │ ├── base/ │ │ │ │ │ ├── balancer.go │ │ │ │ │ └── base.go │ │ │ │ ├── conn_state_evaluator.go │ │ │ │ ├── grpclb/ │ │ │ │ │ └── state/ │ │ │ │ │ └── state.go │ │ │ │ └── roundrobin/ │ │ │ │ └── roundrobin.go │ │ │ ├── balancer_conn_wrappers.go │ │ │ ├── binarylog/ │ │ │ │ └── grpc_binarylog_v1/ │ │ │ │ └── binarylog.pb.go │ │ │ ├── call.go │ │ │ ├── channelz/ │ │ │ │ └── channelz.go │ │ │ ├── clientconn.go │ │ │ ├── codec.go │ │ │ ├── codegen.sh │ │ │ ├── codes/ │ │ │ │ ├── code_string.go │ │ │ │ └── codes.go │ │ │ ├── connectivity/ │ │ │ │ └── connectivity.go │ │ │ ├── credentials/ │ │ │ │ ├── credentials.go │ │ │ │ ├── insecure/ │ │ │ │ │ └── insecure.go │ │ │ │ └── tls.go │ │ │ ├── dialoptions.go │ │ │ ├── doc.go │ │ │ ├── encoding/ │ │ │ │ ├── encoding.go │ │ │ │ └── proto/ │ │ │ │ └── proto.go │ │ │ ├── grpclog/ │ │ │ │ ├── component.go │ │ │ │ ├── grpclog.go │ │ │ │ ├── logger.go │ │ │ │ └── loggerv2.go │ │ │ ├── interceptor.go │ │ │ ├── internal/ │ │ │ │ ├── backoff/ │ │ │ │ │ └── backoff.go │ │ │ │ ├── balancer/ │ │ │ │ │ └── gracefulswitch/ │ │ │ │ │ └── gracefulswitch.go │ │ │ │ ├── balancerload/ │ │ │ │ │ └── load.go │ │ │ │ ├── binarylog/ │ │ │ │ │ ├── binarylog.go │ │ │ │ │ ├── binarylog_testutil.go │ │ │ │ │ ├── env_config.go │ │ │ │ │ ├── method_logger.go │ │ │ │ │ └── sink.go │ │ │ │ ├── buffer/ │ │ │ │ │ └── unbounded.go │ │ │ │ ├── channelz/ │ │ │ │ │ ├── funcs.go │ │ │ │ │ ├── id.go │ │ │ │ │ ├── logging.go │ │ │ │ │ ├── types.go │ │ │ │ │ ├── types_linux.go │ │ │ │ │ ├── types_nonlinux.go │ │ │ │ │ ├── util_linux.go │ │ │ │ │ └── util_nonlinux.go │ │ │ │ ├── credentials/ │ │ │ │ │ ├── credentials.go │ │ │ │ │ ├── spiffe.go │ │ │ │ │ ├── syscallconn.go │ │ │ │ │ └── util.go │ │ │ │ ├── envconfig/ │ │ │ │ │ ├── envconfig.go │ │ │ │ │ ├── observability.go │ │ │ │ │ └── xds.go │ │ │ │ ├── grpclog/ │ │ │ │ │ ├── grpclog.go │ │ │ │ │ └── prefixLogger.go │ │ │ │ ├── grpcrand/ │ │ │ │ │ └── grpcrand.go │ │ │ │ ├── grpcsync/ │ │ │ │ │ ├── callback_serializer.go │ │ │ │ │ ├── event.go │ │ │ │ │ ├── oncefunc.go │ │ │ │ │ └── pubsub.go │ │ │ │ ├── grpcutil/ │ │ │ │ │ ├── compressor.go │ │ │ │ │ ├── encode_duration.go │ │ │ │ │ ├── grpcutil.go │ │ │ │ │ ├── metadata.go │ │ │ │ │ ├── method.go │ │ │ │ │ └── regex.go │ │ │ │ ├── idle/ │ │ │ │ │ └── idle.go │ │ │ │ ├── internal.go │ │ │ │ ├── metadata/ │ │ │ │ │ └── metadata.go │ │ │ │ ├── pretty/ │ │ │ │ │ └── pretty.go │ │ │ │ ├── resolver/ │ │ │ │ │ ├── config_selector.go │ │ │ │ │ ├── dns/ │ │ │ │ │ │ └── dns_resolver.go │ │ │ │ │ ├── passthrough/ │ │ │ │ │ │ └── passthrough.go │ │ │ │ │ └── unix/ │ │ │ │ │ └── unix.go │ │ │ │ ├── serviceconfig/ │ │ │ │ │ ├── duration.go │ │ │ │ │ └── serviceconfig.go │ │ │ │ ├── status/ │ │ │ │ │ └── status.go │ │ │ │ ├── syscall/ │ │ │ │ │ ├── syscall_linux.go │ │ │ │ │ └── syscall_nonlinux.go │ │ │ │ ├── transport/ │ │ │ │ │ ├── bdp_estimator.go │ │ │ │ │ ├── controlbuf.go │ │ │ │ │ ├── defaults.go │ │ │ │ │ ├── flowcontrol.go │ │ │ │ │ ├── handler_server.go │ │ │ │ │ ├── http2_client.go │ │ │ │ │ ├── http2_server.go │ │ │ │ │ ├── http_util.go │ │ │ │ │ ├── logging.go │ │ │ │ │ ├── networktype/ │ │ │ │ │ │ └── networktype.go │ │ │ │ │ ├── proxy.go │ │ │ │ │ └── transport.go │ │ │ │ └── xds_handshake_cluster.go │ │ │ ├── keepalive/ │ │ │ │ └── keepalive.go │ │ │ ├── metadata/ │ │ │ │ └── metadata.go │ │ │ ├── peer/ │ │ │ │ └── peer.go │ │ │ ├── picker_wrapper.go │ │ │ ├── pickfirst.go │ │ │ ├── preloader.go │ │ │ ├── regenerate.sh │ │ │ ├── resolver/ │ │ │ │ ├── manual/ │ │ │ │ │ └── manual.go │ │ │ │ ├── map.go │ │ │ │ └── resolver.go │ │ │ ├── resolver_conn_wrapper.go │ │ │ ├── rpc_util.go │ │ │ ├── server.go │ │ │ ├── service_config.go │ │ │ ├── serviceconfig/ │ │ │ │ └── serviceconfig.go │ │ │ ├── shared_buffer_pool.go │ │ │ ├── stats/ │ │ │ │ ├── handlers.go │ │ │ │ └── stats.go │ │ │ ├── status/ │ │ │ │ └── status.go │ │ │ ├── stream.go │ │ │ ├── tap/ │ │ │ │ └── tap.go │ │ │ ├── trace.go │ │ │ ├── version.go │ │ │ └── vet.sh │ │ └── protobuf/ │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── encoding/ │ │ │ ├── protojson/ │ │ │ │ ├── decode.go │ │ │ │ ├── doc.go │ │ │ │ ├── encode.go │ │ │ │ └── well_known_types.go │ │ │ ├── prototext/ │ │ │ │ ├── decode.go │ │ │ │ ├── doc.go │ │ │ │ └── encode.go │ │ │ └── protowire/ │ │ │ └── wire.go │ │ ├── internal/ │ │ │ ├── descfmt/ │ │ │ │ └── stringer.go │ │ │ ├── descopts/ │ │ │ │ └── options.go │ │ │ ├── detrand/ │ │ │ │ └── rand.go │ │ │ ├── encoding/ │ │ │ │ ├── defval/ │ │ │ │ │ └── default.go │ │ │ │ ├── json/ │ │ │ │ │ ├── decode.go │ │ │ │ │ ├── decode_number.go │ │ │ │ │ ├── decode_string.go │ │ │ │ │ ├── decode_token.go │ │ │ │ │ └── encode.go │ │ │ │ ├── messageset/ │ │ │ │ │ └── messageset.go │ │ │ │ ├── tag/ │ │ │ │ │ └── tag.go │ │ │ │ └── text/ │ │ │ │ ├── decode.go │ │ │ │ ├── decode_number.go │ │ │ │ ├── decode_string.go │ │ │ │ ├── decode_token.go │ │ │ │ ├── doc.go │ │ │ │ └── encode.go │ │ │ ├── errors/ │ │ │ │ ├── errors.go │ │ │ │ ├── is_go112.go │ │ │ │ └── is_go113.go │ │ │ ├── filedesc/ │ │ │ │ ├── build.go │ │ │ │ ├── desc.go │ │ │ │ ├── desc_init.go │ │ │ │ ├── desc_lazy.go │ │ │ │ ├── desc_list.go │ │ │ │ ├── desc_list_gen.go │ │ │ │ └── placeholder.go │ │ │ ├── filetype/ │ │ │ │ └── build.go │ │ │ ├── flags/ │ │ │ │ ├── flags.go │ │ │ │ ├── proto_legacy_disable.go │ │ │ │ └── proto_legacy_enable.go │ │ │ ├── genid/ │ │ │ │ ├── any_gen.go │ │ │ │ ├── api_gen.go │ │ │ │ ├── descriptor_gen.go │ │ │ │ ├── doc.go │ │ │ │ ├── duration_gen.go │ │ │ │ ├── empty_gen.go │ │ │ │ ├── field_mask_gen.go │ │ │ │ ├── goname.go │ │ │ │ ├── map_entry.go │ │ │ │ ├── source_context_gen.go │ │ │ │ ├── struct_gen.go │ │ │ │ ├── timestamp_gen.go │ │ │ │ ├── type_gen.go │ │ │ │ ├── wrappers.go │ │ │ │ └── wrappers_gen.go │ │ │ ├── impl/ │ │ │ │ ├── api_export.go │ │ │ │ ├── checkinit.go │ │ │ │ ├── codec_extension.go │ │ │ │ ├── codec_field.go │ │ │ │ ├── codec_gen.go │ │ │ │ ├── codec_map.go │ │ │ │ ├── codec_map_go111.go │ │ │ │ ├── codec_map_go112.go │ │ │ │ ├── codec_message.go │ │ │ │ ├── codec_messageset.go │ │ │ │ ├── codec_reflect.go │ │ │ │ ├── codec_tables.go │ │ │ │ ├── codec_unsafe.go │ │ │ │ ├── convert.go │ │ │ │ ├── convert_list.go │ │ │ │ ├── convert_map.go │ │ │ │ ├── decode.go │ │ │ │ ├── encode.go │ │ │ │ ├── enum.go │ │ │ │ ├── extension.go │ │ │ │ ├── legacy_enum.go │ │ │ │ ├── legacy_export.go │ │ │ │ ├── legacy_extension.go │ │ │ │ ├── legacy_file.go │ │ │ │ ├── legacy_message.go │ │ │ │ ├── merge.go │ │ │ │ ├── merge_gen.go │ │ │ │ ├── message.go │ │ │ │ ├── message_reflect.go │ │ │ │ ├── message_reflect_field.go │ │ │ │ ├── message_reflect_gen.go │ │ │ │ ├── pointer_reflect.go │ │ │ │ ├── pointer_unsafe.go │ │ │ │ ├── validate.go │ │ │ │ └── weak.go │ │ │ ├── order/ │ │ │ │ ├── order.go │ │ │ │ └── range.go │ │ │ ├── pragma/ │ │ │ │ └── pragma.go │ │ │ ├── set/ │ │ │ │ └── ints.go │ │ │ ├── strs/ │ │ │ │ ├── strings.go │ │ │ │ ├── strings_pure.go │ │ │ │ └── strings_unsafe.go │ │ │ └── version/ │ │ │ └── version.go │ │ ├── proto/ │ │ │ ├── checkinit.go │ │ │ ├── decode.go │ │ │ ├── decode_gen.go │ │ │ ├── doc.go │ │ │ ├── encode.go │ │ │ ├── encode_gen.go │ │ │ ├── equal.go │ │ │ ├── extension.go │ │ │ ├── merge.go │ │ │ ├── messageset.go │ │ │ ├── proto.go │ │ │ ├── proto_methods.go │ │ │ ├── proto_reflect.go │ │ │ ├── reset.go │ │ │ ├── size.go │ │ │ ├── size_gen.go │ │ │ └── wrappers.go │ │ ├── reflect/ │ │ │ ├── protodesc/ │ │ │ │ ├── desc.go │ │ │ │ ├── desc_init.go │ │ │ │ ├── desc_resolve.go │ │ │ │ ├── desc_validate.go │ │ │ │ └── proto.go │ │ │ ├── protoreflect/ │ │ │ │ ├── methods.go │ │ │ │ ├── proto.go │ │ │ │ ├── source.go │ │ │ │ ├── source_gen.go │ │ │ │ ├── type.go │ │ │ │ ├── value.go │ │ │ │ ├── value_equal.go │ │ │ │ ├── value_pure.go │ │ │ │ ├── value_union.go │ │ │ │ └── value_unsafe.go │ │ │ └── protoregistry/ │ │ │ └── registry.go │ │ ├── runtime/ │ │ │ ├── protoiface/ │ │ │ │ ├── legacy.go │ │ │ │ └── methods.go │ │ │ └── protoimpl/ │ │ │ ├── impl.go │ │ │ └── version.go │ │ └── types/ │ │ ├── descriptorpb/ │ │ │ └── descriptor.pb.go │ │ └── known/ │ │ ├── anypb/ │ │ │ └── any.pb.go │ │ ├── durationpb/ │ │ │ └── duration.pb.go │ │ └── timestamppb/ │ │ └── timestamp.pb.go │ ├── gopkg.in/ │ │ └── yaml.v2/ │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── LICENSE.libyaml │ │ ├── NOTICE │ │ ├── README.md │ │ ├── apic.go │ │ ├── decode.go │ │ ├── emitterc.go │ │ ├── encode.go │ │ ├── parserc.go │ │ ├── readerc.go │ │ ├── resolve.go │ │ ├── scannerc.go │ │ ├── sorter.go │ │ ├── writerc.go │ │ ├── yaml.go │ │ ├── yamlh.go │ │ └── yamlprivateh.go │ └── modules.txt └── version.go
Copy disabled (too large)
Download .txt
Showing preview only (10,575K chars total). Download the full file to get everything.
SYMBOL INDEX (121722 symbols across 1227 files)
FILE: backends/client.go
type StoreClient (line 22) | type StoreClient interface
function New (line 28) | func New(config Config) (StoreClient, error) {
FILE: backends/config.go
type Config (line 7) | type Config struct
FILE: backends/consul/client.go
type ConsulClient (line 11) | type ConsulClient struct
method GetValues (line 48) | func (c *ConsulClient) GetValues(keys []string) (map[string]string, er...
method WatchPrefix (line 68) | func (c *ConsulClient) WatchPrefix(prefix string, keys []string, waitI...
function New (line 16) | func New(nodes []string, scheme, cert, key, caCert string, basicAuth boo...
type watchResponse (line 63) | type watchResponse struct
FILE: backends/dynamodb/client.go
type Client (line 14) | type Client struct
method GetValues (line 53) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 108) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewDynamoDBClient (line 22) | func NewDynamoDBClient(table string) (*Client, error) {
FILE: backends/env/client.go
type Client (line 14) | type Client struct
method GetValues (line 22) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 56) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewEnvClient (line 17) | func NewEnvClient() (*Client, error) {
function transform (line 44) | func transform(key string) string {
function clean (line 51) | func clean(key string) string {
FILE: backends/etcd/client.go
type Watch (line 17) | type Watch struct
method WaitNext (line 27) | func (w *Watch) WaitNext(ctx context.Context, lastRevision int64, noti...
method update (line 50) | func (w *Watch) update(newRevision int64) {
function createWatch (line 58) | func createWatch(client *clientv3.Client, prefix string) (*Watch, error) {
type Client (line 99) | type Client struct
method GetValues (line 162) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 224) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewEtcdClient (line 107) | func NewEtcdClient(machines []string, cert, key, caCert string, basicAut...
FILE: backends/etcdv3/client.go
type Watch (line 17) | type Watch struct
method WaitNext (line 27) | func (w *Watch) WaitNext(ctx context.Context, lastRevision int64, noti...
method update (line 50) | func (w *Watch) update(newRevision int64) {
function createWatch (line 58) | func createWatch(client *clientv3.Client, prefix string) (*Watch, error) {
type Client (line 99) | type Client struct
method GetValues (line 162) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 224) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewEtcdClient (line 107) | func NewEtcdClient(machines []string, cert, key, caCert string, basicAut...
FILE: backends/file/client.go
type Client (line 19) | type Client struct
method GetValues (line 52) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method watchChanges (line 108) | func (c *Client) watchChanges(watcher *fsnotify.Watcher, stopChan chan...
method WatchPrefix (line 131) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
type ResultError (line 24) | type ResultError struct
function NewFileClient (line 29) | func NewFileClient(filepath []string, filter string) (*Client, error) {
function readFile (line 33) | func readFile(path string, vars map[string]string) error {
function nodeWalk (line 84) | func nodeWalk(node interface{}, key string, vars map[string]string) error {
FILE: backends/rancher/client.go
constant MetaDataURL (line 17) | MetaDataURL = "http://rancher-metadata"
type Client (line 20) | type Client struct
method GetValues (line 43) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method makeMetaDataRequest (line 95) | func (c *Client) makeMetaDataRequest(path string) ([]byte, error) {
method testConnection (line 108) | func (c *Client) testConnection() error {
method waitVersion (line 131) | func (c *Client) waitVersion(prefix string, version string) (string, e...
method WatchPrefix (line 149) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewRancherClient (line 25) | func NewRancherClient(backendNodes []string) (*Client, error) {
function treeWalk (line 64) | func treeWalk(root string, val interface{}, vars map[string]string) error {
type watchResponse (line 122) | type watchResponse struct
type timeout (line 127) | type timeout interface
FILE: backends/redis/client.go
type watchResponse (line 15) | type watchResponse struct
type Client (line 21) | type Client struct
method connectedClient (line 87) | func (c *Client) connectedClient() (redis.Conn, error) {
method transform (line 124) | func (c *Client) transform(key string) string {
method clean (line 132) | func (c *Client) clean(key string) string {
method GetValues (line 141) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 228) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function tryConnect (line 33) | func tryConnect(machines []string, password string, timeout bool) (redis...
function NewRedisClient (line 113) | func NewRedisClient(machines []string, password string, separator string...
FILE: backends/ssm/client.go
type Client (line 13) | type Client struct
method GetValues (line 44) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method getParametersWithPrefix (line 67) | func (c *Client) getParametersWithPrefix(prefix string) (map[string]st...
method getParameter (line 85) | func (c *Client) getParameter(name string) (map[string]string, error) {
method WatchPrefix (line 100) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function New (line 17) | func New() (*Client, error) {
FILE: backends/vault/client.go
type Client (line 18) | type Client struct
method GetValues (line 175) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method WatchPrefix (line 286) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function getParameter (line 23) | func getParameter(key string, parameters map[string]string) string {
function panicToError (line 33) | func panicToError(err *error) {
function authenticate (line 47) | func authenticate(c *vaultapi.Client, authType string, params map[string...
function getConfig (line 119) | func getConfig(address, cert, key, caCert string) (*vaultapi.Config, err...
function New (line 152) | func New(address, authType string, params map[string]string) (*Client, e...
function isKV (line 210) | func isKV(data map[string]interface{}) (string, bool) {
function flatten (line 222) | func flatten(key string, value interface{}, vars map[string]string) {
function walkTree (line 239) | func walkTree(c *Client, key string, branches map[string]bool) error {
FILE: backends/zookeeper/client.go
type Client (line 13) | type Client struct
method GetValues (line 64) | func (c *Client) GetValues(keys []string) (map[string]string, error) {
method watch (line 85) | func (c *Client) watch(key string, respChan chan watchResponse, cancel...
method WatchPrefix (line 113) | func (c *Client) WatchPrefix(prefix string, keys []string, waitIndex u...
function NewZookeeperClient (line 17) | func NewZookeeperClient(machines []string) (*Client, error) {
function nodeWalk (line 25) | func nodeWalk(prefix string, c *Client, vars map[string]string) error {
type watchResponse (line 80) | type watchResponse struct
FILE: confd.go
function main (line 16) | func main() {
FILE: config.go
type Config (line 23) | type Config struct
function init (line 38) | func init() {
function initConfig (line 80) | func initConfig() error {
function getBackendNodesFromSRV (line 171) | func getBackendNodesFromSRV(record string) ([]string, error) {
function processEnv (line 187) | func processEnv() {
FILE: config_test.go
function TestInitConfigDefaultConfig (line 10) | func TestInitConfigDefaultConfig(t *testing.T) {
FILE: integration/ssm/main.go
function handler (line 16) | func handler(w http.ResponseWriter, r *http.Request) {
function main (line 90) | func main() {
FILE: integration/zookeeper/main.go
function check (line 13) | func check(e error) {
function zk_write (line 19) | func zk_write(k string, v string, c *zk.Conn) {
function parsejson (line 33) | func parsejson(prefix string, x interface{}, c *zk.Conn) {
function main (line 55) | func main() {
FILE: log/log.go
type ConfdFormatter (line 19) | type ConfdFormatter struct
method Format (line 22) | func (c *ConfdFormatter) Format(entry *log.Entry) ([]byte, error) {
function init (line 32) | func init() {
function SetTag (line 38) | func SetTag(t string) {
function SetLevel (line 43) | func SetLevel(level string) {
function Debug (line 52) | func Debug(format string, v ...interface{}) {
function Error (line 57) | func Error(format string, v ...interface{}) {
function Fatal (line 62) | func Fatal(format string, v ...interface{}) {
function Info (line 67) | func Info(format string, v ...interface{}) {
function Warning (line 72) | func Warning(format string, v ...interface{}) {
FILE: resource/template/processor.go
type Processor (line 12) | type Processor interface
function Process (line 16) | func Process(config Config) error {
function process (line 24) | func process(ts []*TemplateResource) error {
type intervalProcessor (line 35) | type intervalProcessor struct
method Process (line 47) | func (p *intervalProcessor) Process() {
function IntervalProcessor (line 43) | func IntervalProcessor(config Config, stopChan, doneChan chan bool, errC...
type watchProcessor (line 65) | type watchProcessor struct
method Process (line 78) | func (p *watchProcessor) Process() {
method monitorPrefix (line 93) | func (p *watchProcessor) monitorPrefix(t *TemplateResource) {
function WatchProcessor (line 73) | func WatchProcessor(config Config, stopChan, doneChan chan bool, errChan...
function getTemplateResources (line 111) | func getTemplateResources(config Config) ([]*TemplateResource, error) {
FILE: resource/template/resource.go
type Config (line 24) | type Config struct
type TemplateResourceConfig (line 36) | type TemplateResourceConfig struct
type TemplateResource (line 41) | type TemplateResource struct
method setVars (line 115) | func (t *TemplateResource) setVars() error {
method createStageFile (line 138) | func (t *TemplateResource) createStageFile() error {
method sync (line 178) | func (t *TemplateResource) sync() error {
method check (line 242) | func (t *TemplateResource) check() error {
method reload (line 258) | func (t *TemplateResource) reload() error {
method process (line 289) | func (t *TemplateResource) process() error {
method setFileMode (line 306) | func (t *TemplateResource) setFileMode() error {
function NewTemplateResource (line 66) | func NewTemplateResource(path string, config Config) (*TemplateResource,...
function runCommand (line 266) | func runCommand(cmd string) error {
FILE: resource/template/resource_test.go
function createTempDirs (line 18) | func createTempDirs() (string, error) {
function TestProcessTemplateResources (line 43) | func TestProcessTemplateResources(t *testing.T) {
FILE: resource/template/template_funcs.go
function newFuncMap (line 20) | func newFuncMap() map[string]interface{} {
function addFuncs (line 57) | func addFuncs(out, in map[string]interface{}) {
function Seq (line 65) | func Seq(first, last int) []int {
type byLengthKV (line 73) | type byLengthKV
method Len (line 75) | func (s byLengthKV) Len() int {
method Swap (line 79) | func (s byLengthKV) Swap(i, j int) {
method Less (line 83) | func (s byLengthKV) Less(i, j int) bool {
function SortKVByLength (line 87) | func SortKVByLength(values []memkv.KVPair) []memkv.KVPair {
type byLength (line 92) | type byLength
method Len (line 94) | func (s byLength) Len() int {
method Swap (line 97) | func (s byLength) Swap(i, j int) {
method Less (line 100) | func (s byLength) Less(i, j int) bool {
function SortByLength (line 104) | func SortByLength(values []string) []string {
function Reverse (line 111) | func Reverse(values interface{}) interface{} {
function Getenv (line 130) | func Getenv(key string, v ...string) string {
function CreateMap (line 145) | func CreateMap(values ...interface{}) (map[string]interface{}, error) {
function UnmarshalJsonObject (line 160) | func UnmarshalJsonObject(data string) (map[string]interface{}, error) {
function UnmarshalJsonArray (line 166) | func UnmarshalJsonArray(data string) ([]interface{}, error) {
function LookupIP (line 172) | func LookupIP(data string) []string {
function LookupIPV6 (line 187) | func LookupIPV6(data string) []string {
function LookupIPV4 (line 197) | func LookupIPV4(data string) []string {
type sortSRV (line 207) | type sortSRV
method Len (line 209) | func (s sortSRV) Len() int {
method Swap (line 213) | func (s sortSRV) Swap(i, j int) {
method Less (line 217) | func (s sortSRV) Less(i, j int) bool {
function LookupSRV (line 223) | func LookupSRV(service, proto, name string) []*net.SRV {
function Base64Encode (line 232) | func Base64Encode(data string) string {
function Base64Decode (line 236) | func Base64Decode(data string) (string, error) {
FILE: resource/template/template_test.go
constant tomlFilePath (line 13) | tomlFilePath = "test/confd/config.toml"
constant tmplFilePath (line 14) | tmplFilePath = "test/templates/test.conf.tmpl"
type templateTest (line 17) | type templateTest struct
function TestTemplates (line 548) | func TestTemplates(t *testing.T) {
function ExecuteTestTemplate (line 557) | func ExecuteTestTemplate(tt templateTest, t *testing.T) {
function setupDirectoriesAndFiles (line 593) | func setupDirectoriesAndFiles(tt templateTest, t *testing.T) {
function templateResource (line 615) | func templateResource() (*TemplateResource, error) {
FILE: util/filestat_posix.go
function FileStat (line 15) | func FileStat(name string) (fi FileInfo, err error) {
FILE: util/filestat_windows.go
function FileStat (line 12) | func FileStat(name string) (fi FileInfo, err error) {
FILE: util/util.go
type Nodes (line 12) | type Nodes
method String (line 15) | func (n *Nodes) String() string {
method Set (line 20) | func (n *Nodes) Set(node string) error {
type FileInfo (line 26) | type FileInfo struct
function AppendPrefix (line 33) | func AppendPrefix(prefix string, keys []string) []string {
function IsFileExist (line 42) | func IsFileExist(fpath string) bool {
function IsConfigChanged (line 53) | func IsConfigChanged(src, dest string) (bool, error) {
function IsDirectory (line 83) | func IsDirectory(path string) (bool, error) {
function RecursiveFilesLookup (line 97) | func RecursiveFilesLookup(root string, pattern string) ([]string, error) {
function RecursiveDirsLookup (line 101) | func RecursiveDirsLookup(root string, pattern string) ([]string, error) {
function recursiveLookup (line 105) | func recursiveLookup(root string, pattern string, dirsLookup bool) ([]st...
FILE: util/util_test.go
function createDirStructure (line 30) | func createDirStructure() (rootDir string, err error) {
function TestRecursiveFilesLookup (line 99) | func TestRecursiveFilesLookup(t *testing.T) {
function TestIsConfigChangedTrue (line 128) | func TestIsConfigChangedTrue(t *testing.T) {
function TestIsConfigChangedFalse (line 157) | func TestIsConfigChangedFalse(t *testing.T) {
FILE: vendor/github.com/BurntSushi/toml/decode.go
type Unmarshaler (line 20) | type Unmarshaler interface
function Unmarshal (line 27) | func Unmarshal(data []byte, v interface{}) error {
function Decode (line 35) | func Decode(data string, v interface{}) (MetaData, error) {
function DecodeFile (line 40) | func DecodeFile(path string, v interface{}) (MetaData, error) {
type Primitive (line 60) | type Primitive struct
constant maxSafeFloat32Int (line 68) | maxSafeFloat32Int = 16777215
constant maxSafeFloat64Int (line 69) | maxSafeFloat64Int = int64(9007199254740991)
type Decoder (line 109) | type Decoder struct
method Decode (line 125) | func (dec *Decoder) Decode(v interface{}) (MetaData, error) {
function NewDecoder (line 114) | func NewDecoder(r io.Reader) *Decoder {
method PrimitiveDecode (line 182) | func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) ...
method unify (line 193) | func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
method unifyStruct (line 261) | func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) e...
method unifyMap (line 307) | func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error {
method unifyArray (line 350) | func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error {
method unifySlice (line 364) | func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error {
method unifySliceArray (line 380) | func (md *MetaData) unifySliceArray(data, rv reflect.Value) error {
method unifyString (line 391) | func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error {
method unifyFloat64 (line 411) | func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) err...
method unifyInt (line 441) | func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error {
method unifyBool (line 484) | func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error {
method unifyAnything (line 492) | func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) er...
method unifyText (line 497) | func (md *MetaData) unifyText(data interface{}, v encoding.TextUnmarshal...
method badtype (line 531) | func (md *MetaData) badtype(dst string, data interface{}) error {
method parseErr (line 535) | func (md *MetaData) parseErr(err error) error {
method e (line 546) | func (md *MetaData) e(format string, args ...interface{}) error {
function rvalue (line 559) | func rvalue(v interface{}) reflect.Value {
function indirect (line 570) | func indirect(v reflect.Value) reflect.Value {
function isUnifiable (line 590) | func isUnifiable(rv reflect.Value) bool {
FILE: vendor/github.com/BurntSushi/toml/decode_go116.go
function DecodeFS (line 12) | func DecodeFS(fsys fs.FS, path string, v interface{}) (MetaData, error) {
FILE: vendor/github.com/BurntSushi/toml/deprecated.go
type TextMarshaler (line 11) | type TextMarshaler
type TextUnmarshaler (line 16) | type TextUnmarshaler
function PrimitiveDecode (line 21) | func PrimitiveDecode(primValue Primitive, v interface{}) error {
function DecodeReader (line 29) | func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { return...
FILE: vendor/github.com/BurntSushi/toml/encode.go
type tomlEncodeError (line 20) | type tomlEncodeError struct
type Marshaler (line 75) | type Marshaler interface
type Encoder (line 117) | type Encoder struct
method Encode (line 137) | func (enc *Encoder) Encode(v interface{}) error {
method safeEncode (line 146) | func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) {
method encode (line 160) | func (enc *Encoder) encode(key Key, rv reflect.Value) {
method eElement (line 210) | func (enc *Encoder) eElement(rv reflect.Value) {
method writeQuoted (line 320) | func (enc *Encoder) writeQuoted(s string) {
method eArrayOrSliceElement (line 324) | func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) {
method eArrayOfTables (line 337) | func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) {
method eTable (line 353) | func (enc *Encoder) eTable(key Key, rv reflect.Value) {
method eMapOrStruct (line 366) | func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value, inline boo...
method eMap (line 378) | func (enc *Encoder) eMap(key Key, rv reflect.Value, inline bool) {
method eStruct (line 434) | func (enc *Encoder) eStruct(key Key, rv reflect.Value, inline bool) {
method newline (line 684) | func (enc *Encoder) newline() {
method writeKeyValue (line 701) | func (enc *Encoder) writeKeyValue(key Key, val reflect.Value, inline b...
method wf (line 715) | func (enc *Encoder) wf(format string, v ...interface{}) {
method indentStr (line 723) | func (enc *Encoder) indentStr(key Key) string {
function NewEncoder (line 126) | func NewEncoder(w io.Writer) *Encoder {
function floatAddDecimal (line 313) | func floatAddDecimal(fstr string) string {
constant is32Bit (line 425) | is32Bit = (32 << (^uint(0) >> 63)) == 32
function pointerTo (line 427) | func pointerTo(t reflect.Type) reflect.Type {
function tomlTypeOfGo (line 547) | func tomlTypeOfGo(rv reflect.Value) tomlType {
function isMarshaler (line 593) | func isMarshaler(rv reflect.Value) bool {
function isTableArray (line 598) | func isTableArray(arr reflect.Value) bool {
type tagOptions (line 618) | type tagOptions struct
function getOptions (line 625) | func getOptions(tag reflect.StructTag) tagOptions {
function isZero (line 644) | func isZero(rv reflect.Value) bool {
function isEmpty (line 656) | func isEmpty(rv reflect.Value) bool {
function encPanic (line 727) | func encPanic(err error) {
function eindirect (line 732) | func eindirect(v reflect.Value) reflect.Value {
function isNil (line 752) | func isNil(rv reflect.Value) bool {
FILE: vendor/github.com/BurntSushi/toml/error.go
type ParseError (line 52) | type ParseError struct
method Error (line 74) | func (pe ParseError) Error() string {
method ErrorWithPosition (line 90) | func (pe ParseError) ErrorWithPosition() string {
method ErrorWithUsage (line 131) | func (pe ParseError) ErrorWithUsage() string {
method column (line 145) | func (pe ParseError) column(lines []string) int {
type Position (line 68) | type Position struct
type errLexControl (line 163) | type errLexControl struct
method Error (line 177) | func (e errLexControl) Error() string {
method Usage (line 180) | func (e errLexControl) Usage() string { return "" }
type errLexEscape (line 164) | type errLexEscape struct
method Error (line 182) | func (e errLexEscape) Error() string { return fmt.Sprintf(`inva...
method Usage (line 183) | func (e errLexEscape) Usage() string { return usageEscape }
type errLexUTF8 (line 165) | type errLexUTF8 struct
method Error (line 184) | func (e errLexUTF8) Error() string { return fmt.Sprintf("inva...
method Usage (line 185) | func (e errLexUTF8) Usage() string { return "" }
type errLexInvalidNum (line 166) | type errLexInvalidNum struct
method Error (line 186) | func (e errLexInvalidNum) Error() string { return fmt.Sprintf("inva...
method Usage (line 187) | func (e errLexInvalidNum) Usage() string { return "" }
type errLexInvalidDate (line 167) | type errLexInvalidDate struct
method Error (line 188) | func (e errLexInvalidDate) Error() string { return fmt.Sprintf("inva...
method Usage (line 189) | func (e errLexInvalidDate) Usage() string { return "" }
type errLexInlineTableNL (line 168) | type errLexInlineTableNL struct
method Error (line 190) | func (e errLexInlineTableNL) Error() string { return "newlines not all...
method Usage (line 191) | func (e errLexInlineTableNL) Usage() string { return usageInlineNewline }
type errLexStringNL (line 169) | type errLexStringNL struct
method Error (line 192) | func (e errLexStringNL) Error() string { return "strings cannot c...
method Usage (line 193) | func (e errLexStringNL) Usage() string { return usageStringNewline }
type errParseRange (line 170) | type errParseRange struct
method Error (line 194) | func (e errParseRange) Error() string { return fmt.Sprintf("%v i...
method Usage (line 195) | func (e errParseRange) Usage() string { return usageIntOverflow }
type errParseDuration (line 174) | type errParseDuration struct
method Error (line 196) | func (e errParseDuration) Error() string { return fmt.Sprintf("inva...
method Usage (line 197) | func (e errParseDuration) Usage() string { return usageDuration }
constant usageEscape (line 199) | usageEscape = `
constant usageInlineNewline (line 214) | usageInlineNewline = `
constant usageStringNewline (line 234) | usageStringNewline = `
constant usageIntOverflow (line 247) | usageIntOverflow = `
constant usageDuration (line 267) | usageDuration = `
FILE: vendor/github.com/BurntSushi/toml/lex.go
type itemType (line 12) | type itemType
method String (line 1200) | func (itype itemType) String() string {
constant itemError (line 15) | itemError itemType = iota
constant itemNIL (line 16) | itemNIL
constant itemEOF (line 17) | itemEOF
constant itemText (line 18) | itemText
constant itemString (line 19) | itemString
constant itemRawString (line 20) | itemRawString
constant itemMultilineString (line 21) | itemMultilineString
constant itemRawMultilineString (line 22) | itemRawMultilineString
constant itemBool (line 23) | itemBool
constant itemInteger (line 24) | itemInteger
constant itemFloat (line 25) | itemFloat
constant itemDatetime (line 26) | itemDatetime
constant itemArray (line 27) | itemArray
constant itemArrayEnd (line 28) | itemArrayEnd
constant itemTableStart (line 29) | itemTableStart
constant itemTableEnd (line 30) | itemTableEnd
constant itemArrayTableStart (line 31) | itemArrayTableStart
constant itemArrayTableEnd (line 32) | itemArrayTableEnd
constant itemKeyStart (line 33) | itemKeyStart
constant itemKeyEnd (line 34) | itemKeyEnd
constant itemCommentStart (line 35) | itemCommentStart
constant itemInlineTableStart (line 36) | itemInlineTableStart
constant itemInlineTableEnd (line 37) | itemInlineTableEnd
constant eof (line 40) | eof = 0
type stateFn (line 42) | type stateFn
method String (line 1189) | func (s stateFn) String() string {
method String (line 44) | func (p Position) String() string {
type lexer (line 48) | type lexer struct
method nextItem (line 79) | func (lx *lexer) nextItem() item {
method push (line 103) | func (lx *lexer) push(state stateFn) {
method pop (line 107) | func (lx *lexer) pop() stateFn {
method current (line 116) | func (lx *lexer) current() string {
method getPos (line 120) | func (lx lexer) getPos() Position {
method emit (line 132) | func (lx *lexer) emit(typ itemType) {
method emitTrim (line 142) | func (lx *lexer) emitTrim(typ itemType) {
method next (line 147) | func (lx *lexer) next() (r rune) {
method ignore (line 184) | func (lx *lexer) ignore() {
method backup (line 189) | func (lx *lexer) backup() {
method accept (line 210) | func (lx *lexer) accept(valid rune) bool {
method peek (line 219) | func (lx *lexer) peek() rune {
method skip (line 226) | func (lx *lexer) skip(pred func(rune) bool) {
method error (line 242) | func (lx *lexer) error(err error) stateFn {
method errorPrevLine (line 254) | func (lx *lexer) errorPrevLine(err error) stateFn {
method errorPos (line 264) | func (lx *lexer) errorPos(start, length int, err error) stateFn {
method errorf (line 273) | func (lx *lexer) errorf(format string, values ...interface{}) stateFn {
method errorControlChar (line 286) | func (lx *lexer) errorControlChar(cc rune) stateFn {
type item (line 72) | type item struct
method String (line 1242) | func (item item) String() string {
function lex (line 91) | func lex(input string, tomlNext bool) *lexer {
function lexTop (line 291) | func lexTop(lx *lexer) stateFn {
function lexTopEnd (line 320) | func lexTopEnd(lx *lexer) stateFn {
function lexTableStart (line 346) | func lexTableStart(lx *lexer) stateFn {
function lexTableEnd (line 358) | func lexTableEnd(lx *lexer) stateFn {
function lexArrayTableEnd (line 363) | func lexArrayTableEnd(lx *lexer) stateFn {
function lexTableNameStart (line 371) | func lexTableNameStart(lx *lexer) stateFn {
function lexTableNameEnd (line 390) | func lexTableNameEnd(lx *lexer) stateFn {
function lexBareName (line 411) | func lexBareName(lx *lexer) stateFn {
function lexQuotedName (line 427) | func lexQuotedName(lx *lexer) stateFn {
function lexKeyStart (line 446) | func lexKeyStart(lx *lexer) stateFn {
function lexKeyNameStart (line 462) | func lexKeyNameStart(lx *lexer) stateFn {
function lexKeyEnd (line 481) | func lexKeyEnd(lx *lexer) stateFn {
function lexValue (line 502) | func lexValue(lx *lexer) stateFn {
function lexArrayValue (line 568) | func lexArrayValue(lx *lexer) stateFn {
function lexArrayValueEnd (line 590) | func lexArrayValueEnd(lx *lexer) stateFn {
function lexArrayEnd (line 609) | func lexArrayEnd(lx *lexer) stateFn {
function lexInlineTableValue (line 617) | func lexInlineTableValue(lx *lexer) stateFn {
function lexInlineTableValueEnd (line 643) | func lexInlineTableValueEnd(lx *lexer) stateFn {
function runeOrEOF (line 672) | func runeOrEOF(r rune) string {
function lexInlineTableEnd (line 681) | func lexInlineTableEnd(lx *lexer) stateFn {
function lexString (line 689) | func lexString(lx *lexer) stateFn {
function lexMultilineString (line 711) | func lexMultilineString(lx *lexer) stateFn {
function lexRawString (line 766) | func lexRawString(lx *lexer) stateFn {
function lexMultilineRawString (line 787) | func lexMultilineRawString(lx *lexer) stateFn {
function lexMultilineStringEscape (line 830) | func lexMultilineStringEscape(lx *lexer) stateFn {
function lexStringEscape (line 839) | func lexStringEscape(lx *lexer) stateFn {
function lexHexEscape (line 878) | func lexHexEscape(lx *lexer) stateFn {
function lexShortUnicodeEscape (line 891) | func lexShortUnicodeEscape(lx *lexer) stateFn {
function lexLongUnicodeEscape (line 904) | func lexLongUnicodeEscape(lx *lexer) stateFn {
function lexNumberOrDateStart (line 921) | func lexNumberOrDateStart(lx *lexer) stateFn {
function lexNumberOrDate (line 939) | func lexNumberOrDate(lx *lexer) stateFn {
function lexDatetime (line 960) | func lexDatetime(lx *lexer) stateFn {
function lexHexInteger (line 976) | func lexHexInteger(lx *lexer) stateFn {
function lexOctalInteger (line 992) | func lexOctalInteger(lx *lexer) stateFn {
function lexBinaryInteger (line 1008) | func lexBinaryInteger(lx *lexer) stateFn {
function lexDecimalNumber (line 1024) | func lexDecimalNumber(lx *lexer) stateFn {
function lexDecimalNumberStart (line 1046) | func lexDecimalNumberStart(lx *lexer) stateFn {
function lexBaseNumberOrDate (line 1083) | func lexBaseNumberOrDate(lx *lexer) stateFn {
function lexFloat (line 1126) | func lexFloat(lx *lexer) stateFn {
function lexBool (line 1142) | func lexBool(lx *lexer) stateFn {
function lexCommentStart (line 1163) | func lexCommentStart(lx *lexer) stateFn {
function lexComment (line 1172) | func lexComment(lx *lexer) stateFn {
function lexSkip (line 1184) | func lexSkip(lx *lexer, nextState stateFn) stateFn {
function isWhitespace (line 1246) | func isWhitespace(r rune) bool { return r == '\t' || r == ' ' }
function isNL (line 1247) | func isNL(r rune) bool { return r == '\n' || r == '\r' }
function isControl (line 1248) | func isControl(r rune) bool { // Control characters except \t, \r, \n
function isDigit (line 1256) | func isDigit(r rune) bool { return r >= '0' && r <= '9' }
function isBinary (line 1257) | func isBinary(r rune) bool { return r == '0' || r == '1' }
function isOctal (line 1258) | func isOctal(r rune) bool { return r >= '0' && r <= '7' }
function isHexadecimal (line 1259) | func isHexadecimal(r rune) bool {
function isBareKeyChar (line 1263) | func isBareKeyChar(r rune, tomlNext bool) bool {
FILE: vendor/github.com/BurntSushi/toml/meta.go
type MetaData (line 12) | type MetaData struct
method IsDefined (line 28) | func (md *MetaData) IsDefined(key ...string) bool {
method Type (line 53) | func (md *MetaData) Type(key ...string) string {
method Keys (line 67) | func (md *MetaData) Keys() []Key {
method Undecoded (line 82) | func (md *MetaData) Undecoded() []Key {
type Key (line 94) | type Key
method String (line 96) | func (k Key) String() string {
method maybeQuoted (line 104) | func (k Key) maybeQuoted(i int) string {
method add (line 116) | func (k Key) add(piece string) Key {
FILE: vendor/github.com/BurntSushi/toml/parse.go
type parser (line 14) | type parser struct
method panicErr (line 91) | func (p *parser) panicErr(it item, err error) {
method panicItemf (line 100) | func (p *parser) panicItemf(it item, format string, v ...interface{}) {
method panicf (line 109) | func (p *parser) panicf(format string, v ...interface{}) {
method next (line 118) | func (p *parser) next() item {
method nextPos (line 136) | func (p *parser) nextPos() item {
method bug (line 142) | func (p *parser) bug(format string, v ...interface{}) {
method expect (line 146) | func (p *parser) expect(typ itemType) item {
method assertEqual (line 152) | func (p *parser) assertEqual(expected, got itemType) {
method topLevel (line 158) | func (p *parser) topLevel(item item) {
method keyString (line 221) | func (p *parser) keyString(it item) string {
method value (line 242) | func (p *parser) value(it item, parentIsArray bool) (interface{}, toml...
method valueInteger (line 277) | func (p *parser) valueInteger(it item) (interface{}, tomlType) {
method valueFloat (line 301) | func (p *parser) valueFloat(it item) (interface{}, tomlType) {
method valueDatetime (line 355) | func (p *parser) valueDatetime(it item) (interface{}, tomlType) {
method valueArray (line 378) | func (p *parser) valueArray(it item) (interface{}, tomlType) {
method valueInlineTable (line 409) | func (p *parser) valueInlineTable(it item, parentIsArray bool) (interf...
method addContext (line 513) | func (p *parser) addContext(key Key, array bool) {
method set (line 569) | func (p *parser) set(key string, val interface{}, typ tomlType, pos Po...
method setValue (line 577) | func (p *parser) setValue(key string, value interface{}) {
method setType (line 635) | func (p *parser) setType(key string, typ tomlType, pos Position) {
method addImplicit (line 652) | func (p *parser) addImplicit(key Key) { p.implicits[key.String(...
method removeImplicit (line 653) | func (p *parser) removeImplicit(key Key) { delete(p.implicits, key...
method isImplicit (line 654) | func (p *parser) isImplicit(key Key) bool { _, ok := p.implicits[ke...
method isArray (line 655) | func (p *parser) isArray(key Key) bool { return p.keyInfo[key.St...
method addImplicitContext (line 656) | func (p *parser) addImplicitContext(key Key) { p.addImplicit(key); p.a...
method current (line 659) | func (p *parser) current() string {
method stripEscapedNewlines (line 685) | func (p *parser) stripEscapedNewlines(s string) string {
method replaceEscapes (line 729) | func (p *parser) replaceEscapes(it item, str string) string {
method asciiEscapeToUnicode (line 801) | func (p *parser) asciiEscapeToUnicode(it item, bs []byte) rune {
type keyInfo (line 28) | type keyInfo struct
function parse (line 33) | func parse(data string) (p *parser, err error) {
function numHasLeadingZero (line 464) | func numHasLeadingZero(s string) bool {
function numUnderscoresOK (line 476) | func numUnderscoresOK(s string) bool {
function numPeriodsOK (line 497) | func numPeriodsOK(s string) bool {
function stripFirstNewline (line 669) | func stripFirstNewline(s string) string {
FILE: vendor/github.com/BurntSushi/toml/type_fields.go
type field (line 16) | type field struct
type byName (line 26) | type byName
method Len (line 28) | func (x byName) Len() int { return len(x) }
method Swap (line 30) | func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
method Less (line 32) | func (x byName) Less(i, j int) bool {
type byIndex (line 46) | type byIndex
method Len (line 48) | func (x byIndex) Len() int { return len(x) }
method Swap (line 50) | func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
method Less (line 52) | func (x byIndex) Less(i, j int) bool {
function typeFields (line 67) | func typeFields(t reflect.Type) []field {
function dominantField (line 182) | func dominantField(fields []field) (field, bool) {
function cachedTypeFields (line 220) | func cachedTypeFields(t reflect.Type) []field {
FILE: vendor/github.com/BurntSushi/toml/type_toml.go
type tomlType (line 7) | type tomlType interface
function typeEqual (line 12) | func typeEqual(t1, t2 tomlType) bool {
function typeIsTable (line 19) | func typeIsTable(t tomlType) bool {
type tomlBaseType (line 23) | type tomlBaseType
method typeString (line 25) | func (btype tomlBaseType) typeString() string {
method String (line 29) | func (btype tomlBaseType) String() string {
method typeOfPrimitive (line 49) | func (p *parser) typeOfPrimitive(lexItem item) tomlType {
FILE: vendor/github.com/armon/go-metrics/const_unix.go
constant DefaultSignal (line 11) | DefaultSignal = syscall.SIGUSR1
FILE: vendor/github.com/armon/go-metrics/const_windows.go
constant DefaultSignal (line 12) | DefaultSignal = syscall.Signal(21)
FILE: vendor/github.com/armon/go-metrics/inmem.go
type InmemSink (line 18) | type InmemSink struct
method SetGauge (line 164) | func (i *InmemSink) SetGauge(key []string, val float32) {
method SetGaugeWithLabels (line 168) | func (i *InmemSink) SetGaugeWithLabels(key []string, val float32, labe...
method EmitKey (line 177) | func (i *InmemSink) EmitKey(key []string, val float32) {
method IncrCounter (line 187) | func (i *InmemSink) IncrCounter(key []string, val float32) {
method IncrCounterWithLabels (line 191) | func (i *InmemSink) IncrCounterWithLabels(key []string, val float32, l...
method AddSample (line 210) | func (i *InmemSink) AddSample(key []string, val float32) {
method AddSampleWithLabels (line 214) | func (i *InmemSink) AddSampleWithLabels(key []string, val float32, lab...
method Data (line 235) | func (i *InmemSink) Data() []*IntervalMetrics {
method getInterval (line 281) | func (i *InmemSink) getInterval() *IntervalMetrics {
method flattenKey (line 319) | func (i *InmemSink) flattenKey(parts []string) string {
method flattenKeyLabels (line 330) | func (i *InmemSink) flattenKeyLabels(parts []string, labels []Label) (...
type IntervalMetrics (line 38) | type IntervalMetrics struct
function NewIntervalMetrics (line 65) | func NewIntervalMetrics(intv time.Time) *IntervalMetrics {
type AggregateSample (line 78) | type AggregateSample struct
method Stddev (line 89) | func (a *AggregateSample) Stddev() float64 {
method Mean (line 99) | func (a *AggregateSample) Mean() float64 {
method Ingest (line 107) | func (a *AggregateSample) Ingest(v float64, rateDenom float64) {
method String (line 121) | func (a *AggregateSample) String() string {
function NewInmemSinkFromURL (line 134) | func NewInmemSinkFromURL(u *url.URL) (MetricSink, error) {
function NewInmemSink (line 152) | func NewInmemSink(interval, retain time.Duration) *InmemSink {
FILE: vendor/github.com/armon/go-metrics/inmem_endpoint.go
type MetricsSummary (line 12) | type MetricsSummary struct
type GaugeValue (line 20) | type GaugeValue struct
type PointValue (line 29) | type PointValue struct
type SampledValue (line 34) | type SampledValue struct
method deepCopy (line 46) | func (source *SampledValue) deepCopy() SampledValue {
method DisplayMetrics (line 56) | func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.R...
function newMetricSummaryFromInterval (line 75) | func newMetricSummaryFromInterval(interval *IntervalMetrics) MetricsSumm...
function formatSamples (line 114) | func formatSamples(source map[string]SampledValue) []SampledValue {
type Encoder (line 138) | type Encoder interface
method Stream (line 145) | func (i *InmemSink) Stream(ctx context.Context, encoder Encoder) {
FILE: vendor/github.com/armon/go-metrics/inmem_signal.go
type InmemSignal (line 16) | type InmemSignal struct
method Stop (line 49) | func (i *InmemSignal) Stop() {
method run (line 62) | func (i *InmemSignal) run() {
method dumpStats (line 74) | func (i *InmemSignal) dumpStats() {
method flattenLabels (line 107) | func (i *InmemSignal) flattenLabels(name string, labels []Label) string {
function NewInmemSignal (line 29) | func NewInmemSignal(inmem *InmemSink, sig syscall.Signal, w io.Writer) *...
function DefaultInmemSignal (line 44) | func DefaultInmemSignal(inmem *InmemSink) *InmemSignal {
FILE: vendor/github.com/armon/go-metrics/metrics.go
type Label (line 11) | type Label struct
method SetGauge (line 16) | func (m *Metrics) SetGauge(key []string, val float32) {
method SetGaugeWithLabels (line 20) | func (m *Metrics) SetGaugeWithLabels(key []string, val float32, labels [...
method EmitKey (line 45) | func (m *Metrics) EmitKey(key []string, val float32) {
method IncrCounter (line 59) | func (m *Metrics) IncrCounter(key []string, val float32) {
method IncrCounterWithLabels (line 63) | func (m *Metrics) IncrCounterWithLabels(key []string, val float32, label...
method AddSample (line 84) | func (m *Metrics) AddSample(key []string, val float32) {
method AddSampleWithLabels (line 88) | func (m *Metrics) AddSampleWithLabels(key []string, val float32, labels ...
method MeasureSince (line 109) | func (m *Metrics) MeasureSince(key []string, start time.Time) {
method MeasureSinceWithLabels (line 113) | func (m *Metrics) MeasureSinceWithLabels(key []string, start time.Time, ...
method UpdateFilter (line 138) | func (m *Metrics) UpdateFilter(allow, block []string) {
method UpdateFilterAndLabels (line 143) | func (m *Metrics) UpdateFilterAndLabels(allow, block, allowedLabels, blo...
method Shutdown (line 175) | func (m *Metrics) Shutdown() {
method labelIsAllowed (line 183) | func (m *Metrics) labelIsAllowed(label *Label) bool {
method filterLabels (line 202) | func (m *Metrics) filterLabels(labels []Label) []Label {
method allowMetric (line 217) | func (m *Metrics) allowMetric(key []string, labels []Label) (bool, []Lab...
method collectStats (line 234) | func (m *Metrics) collectStats() {
method EmitRuntimeStats (line 242) | func (m *Metrics) EmitRuntimeStats() {
function insert (line 281) | func insert(i int, v string, s []string) []string {
FILE: vendor/github.com/armon/go-metrics/sink.go
type MetricSink (line 10) | type MetricSink interface
type ShutdownSink (line 27) | type ShutdownSink interface
type BlackholeSink (line 37) | type BlackholeSink struct
method SetGauge (line 39) | func (*BlackholeSink) SetGauge(key []string, val float32) ...
method SetGaugeWithLabels (line 40) | func (*BlackholeSink) SetGaugeWithLabels(key []string, val float32, la...
method EmitKey (line 41) | func (*BlackholeSink) EmitKey(key []string, val float32) ...
method IncrCounter (line 42) | func (*BlackholeSink) IncrCounter(key []string, val float32) ...
method IncrCounterWithLabels (line 43) | func (*BlackholeSink) IncrCounterWithLabels(key []string, val float32,...
method AddSample (line 44) | func (*BlackholeSink) AddSample(key []string, val float32) ...
method AddSampleWithLabels (line 45) | func (*BlackholeSink) AddSampleWithLabels(key []string, val float32, l...
type FanoutSink (line 48) | type FanoutSink
method SetGauge (line 50) | func (fh FanoutSink) SetGauge(key []string, val float32) {
method SetGaugeWithLabels (line 54) | func (fh FanoutSink) SetGaugeWithLabels(key []string, val float32, lab...
method EmitKey (line 60) | func (fh FanoutSink) EmitKey(key []string, val float32) {
method IncrCounter (line 66) | func (fh FanoutSink) IncrCounter(key []string, val float32) {
method IncrCounterWithLabels (line 70) | func (fh FanoutSink) IncrCounterWithLabels(key []string, val float32, ...
method AddSample (line 76) | func (fh FanoutSink) AddSample(key []string, val float32) {
method AddSampleWithLabels (line 80) | func (fh FanoutSink) AddSampleWithLabels(key []string, val float32, la...
method Shutdown (line 86) | func (fh FanoutSink) Shutdown() {
type sinkURLFactoryFunc (line 96) | type sinkURLFactoryFunc
function NewMetricSinkFromURL (line 119) | func NewMetricSinkFromURL(urlStr string) (MetricSink, error) {
FILE: vendor/github.com/armon/go-metrics/start.go
type Config (line 13) | type Config struct
type Metrics (line 33) | type Metrics struct
function init (line 46) | func init() {
function Default (line 52) | func Default() *Metrics {
function DefaultConfig (line 57) | func DefaultConfig(serviceName string) *Config {
function New (line 76) | func New(conf *Config, sink MetricSink) (*Metrics, error) {
function NewGlobal (line 91) | func NewGlobal(conf *Config, sink MetricSink) (*Metrics, error) {
function SetGauge (line 100) | func SetGauge(key []string, val float32) {
function SetGaugeWithLabels (line 104) | func SetGaugeWithLabels(key []string, val float32, labels []Label) {
function EmitKey (line 108) | func EmitKey(key []string, val float32) {
function IncrCounter (line 112) | func IncrCounter(key []string, val float32) {
function IncrCounterWithLabels (line 116) | func IncrCounterWithLabels(key []string, val float32, labels []Label) {
function AddSample (line 120) | func AddSample(key []string, val float32) {
function AddSampleWithLabels (line 124) | func AddSampleWithLabels(key []string, val float32, labels []Label) {
function MeasureSince (line 128) | func MeasureSince(key []string, start time.Time) {
function MeasureSinceWithLabels (line 132) | func MeasureSinceWithLabels(key []string, start time.Time, labels []Labe...
function UpdateFilter (line 136) | func UpdateFilter(allow, block []string) {
function UpdateFilterAndLabels (line 144) | func UpdateFilterAndLabels(allow, block, allowedLabels, blockedLabels []...
function Shutdown (line 151) | func Shutdown() {
FILE: vendor/github.com/armon/go-metrics/statsd.go
constant statsdMaxLen (line 16) | statsdMaxLen = 1400
type StatsdSink (line 22) | type StatsdSink struct
method Shutdown (line 44) | func (s *StatsdSink) Shutdown() {
method SetGauge (line 48) | func (s *StatsdSink) SetGauge(key []string, val float32) {
method SetGaugeWithLabels (line 53) | func (s *StatsdSink) SetGaugeWithLabels(key []string, val float32, lab...
method EmitKey (line 58) | func (s *StatsdSink) EmitKey(key []string, val float32) {
method IncrCounter (line 63) | func (s *StatsdSink) IncrCounter(key []string, val float32) {
method IncrCounterWithLabels (line 68) | func (s *StatsdSink) IncrCounterWithLabels(key []string, val float32, ...
method AddSample (line 73) | func (s *StatsdSink) AddSample(key []string, val float32) {
method AddSampleWithLabels (line 78) | func (s *StatsdSink) AddSampleWithLabels(key []string, val float32, la...
method flattenKey (line 84) | func (s *StatsdSink) flattenKey(parts []string) string {
method flattenKeyLabels (line 99) | func (s *StatsdSink) flattenKeyLabels(parts []string, labels []Label) ...
method pushMetric (line 107) | func (s *StatsdSink) pushMetric(m string) {
method flushMetrics (line 115) | func (s *StatsdSink) flushMetrics() {
function NewStatsdSinkFromURL (line 29) | func NewStatsdSinkFromURL(u *url.URL) (MetricSink, error) {
function NewStatsdSink (line 34) | func NewStatsdSink(addr string) (*StatsdSink, error) {
FILE: vendor/github.com/armon/go-metrics/statsite.go
constant flushInterval (line 17) | flushInterval = 100 * time.Millisecond
function NewStatsiteSinkFromURL (line 22) | func NewStatsiteSinkFromURL(u *url.URL) (MetricSink, error) {
type StatsiteSink (line 28) | type StatsiteSink struct
method Shutdown (line 44) | func (s *StatsiteSink) Shutdown() {
method SetGauge (line 48) | func (s *StatsiteSink) SetGauge(key []string, val float32) {
method SetGaugeWithLabels (line 53) | func (s *StatsiteSink) SetGaugeWithLabels(key []string, val float32, l...
method EmitKey (line 58) | func (s *StatsiteSink) EmitKey(key []string, val float32) {
method IncrCounter (line 63) | func (s *StatsiteSink) IncrCounter(key []string, val float32) {
method IncrCounterWithLabels (line 68) | func (s *StatsiteSink) IncrCounterWithLabels(key []string, val float32...
method AddSample (line 73) | func (s *StatsiteSink) AddSample(key []string, val float32) {
method AddSampleWithLabels (line 78) | func (s *StatsiteSink) AddSampleWithLabels(key []string, val float32, ...
method flattenKey (line 84) | func (s *StatsiteSink) flattenKey(parts []string) string {
method flattenKeyLabels (line 99) | func (s *StatsiteSink) flattenKeyLabels(parts []string, labels []Label...
method pushMetric (line 107) | func (s *StatsiteSink) pushMetric(m string) {
method flushMetrics (line 115) | func (s *StatsiteSink) flushMetrics() {
function NewStatsiteSink (line 34) | func NewStatsiteSink(addr string) (*StatsiteSink, error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/auth/bearer/token.go
type Token (line 9) | type Token struct
method Expired (line 18) | func (t Token) Expired(now time.Time) bool {
type TokenProvider (line 27) | type TokenProvider interface
type TokenProviderFunc (line 33) | type TokenProviderFunc
method RetrieveBearerToken (line 37) | func (fn TokenProviderFunc) RetrieveBearerToken(ctx aws.Context) (Toke...
type StaticTokenProvider (line 43) | type StaticTokenProvider struct
method RetrieveBearerToken (line 48) | func (s StaticTokenProvider) RetrieveBearerToken(aws.Context) (Token, ...
FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
type Error (line 31) | type Error interface
type BatchError (line 51) | type BatchError interface
type BatchedErrors (line 70) | type BatchedErrors interface
function New (line 82) | func New(code, message string, origErr error) Error {
function NewBatchError (line 92) | func NewBatchError(code, message string, errs []error) BatchedErrors {
type RequestFailure (line 129) | type RequestFailure interface
function NewRequestFailure (line 147) | func NewRequestFailure(err Error, statusCode int, reqID string) RequestF...
type UnmarshalError (line 152) | type UnmarshalError interface
function NewUnmarshalError (line 159) | func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalErr...
FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
function SprintError (line 12) | func SprintError(code, message, extra string, origErr error) string {
type baseError (line 28) | type baseError struct
method Error (line 65) | func (b baseError) Error() string {
method String (line 76) | func (b baseError) String() string {
method Code (line 81) | func (b baseError) Code() string {
method Message (line 86) | func (b baseError) Message() string {
method OrigErr (line 93) | func (b baseError) OrigErr() error {
method OrigErrs (line 110) | func (b baseError) OrigErrs() []error {
function newBaseError (line 50) | func newBaseError(code, message string, origErrs []error) *baseError {
type awsError (line 116) | type awsError
type requestError (line 121) | type requestError struct
method Error (line 146) | func (r requestError) Error() string {
method String (line 154) | func (r requestError) String() string {
method StatusCode (line 159) | func (r requestError) StatusCode() int {
method RequestID (line 164) | func (r requestError) RequestID() string {
method OrigErrs (line 170) | func (r requestError) OrigErrs() []error {
function newRequestError (line 136) | func newRequestError(err Error, statusCode int, requestID string) *reque...
type unmarshalError (line 177) | type unmarshalError struct
method Error (line 184) | func (e unmarshalError) Error() string {
method String (line 191) | func (e unmarshalError) String() string {
method Bytes (line 196) | func (e unmarshalError) Bytes() []byte {
type errorList (line 201) | type errorList
method Error (line 206) | func (e errorList) Error() string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go
function Copy (line 15) | func Copy(dst, src interface{}) {
function CopyOf (line 26) | func CopyOf(src interface{}) (dst interface{}) {
function rcopy (line 37) | func rcopy(dst, src reflect.Value, root bool) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go
function DeepEqual (line 13) | func DeepEqual(a, b interface{}) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go
function rValuesAtPath (line 16) | func rValuesAtPath(v interface{}, path string, createPath, caseSensitive...
function ValuesAtPath (line 158) | func ValuesAtPath(i interface{}, path string) ([]interface{}, error) {
function SetValueAtPath (line 187) | func SetValueAtPath(i interface{}, path string, v interface{}) {
function setValue (line 197) | func setValue(dstVal reflect.Value, src interface{}) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go
function Prettify (line 12) | func Prettify(i interface{}) string {
function prettify (line 20) | func prettify(v reflect.Value, indent int, buf *bytes.Buffer) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
function StringValue (line 13) | func StringValue(i interface{}) string {
function stringValue (line 19) | func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/client.go
type Config (line 12) | type Config struct
type ConfigProvider (line 30) | type ConfigProvider interface
type ConfigNoResolveEndpointProvider (line 37) | type ConfigNoResolveEndpointProvider interface
type Client (line 43) | type Client struct
method NewRequest (line 85) | func (c *Client) NewRequest(operation *request.Operation, params inter...
method AddDebugHandlers (line 91) | func (c *Client) AddDebugHandlers() {
function New (line 52) | func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Hand...
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go
type DefaultRetryer (line 16) | type DefaultRetryer struct
method MaxRetries (line 57) | func (d DefaultRetryer) MaxRetries() int {
method setRetryerDefaults (line 62) | func (d *DefaultRetryer) setRetryerDefaults() {
method RetryRules (line 78) | func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration {
method ShouldRetry (line 131) | func (d DefaultRetryer) ShouldRetry(r *request.Request) bool {
constant DefaultRetryerMaxNumRetries (line 40) | DefaultRetryerMaxNumRetries = 3
constant DefaultRetryerMinRetryDelay (line 43) | DefaultRetryerMinRetryDelay = 30 * time.Millisecond
constant DefaultRetryerMinThrottleDelay (line 46) | DefaultRetryerMinThrottleDelay = 500 * time.Millisecond
constant DefaultRetryerMaxRetryDelay (line 49) | DefaultRetryerMaxRetryDelay = 300 * time.Second
constant DefaultRetryerMaxThrottleDelay (line 52) | DefaultRetryerMaxThrottleDelay = 300 * time.Second
function getJitterDelay (line 126) | func getJitterDelay(duration time.Duration) time.Duration {
function getRetryAfterDelay (line 148) | func getRetryAfterDelay(r *request.Request) (time.Duration, bool) {
function canUseRetryAfterHeader (line 168) | func canUseRetryAfterHeader(r *request.Request) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/logger.go
constant logReqMsg (line 14) | logReqMsg = `DEBUG: Request %s/%s Details:
constant logReqErrMsg (line 19) | logReqErrMsg = `DEBUG ERROR: Request %s/%s:
type logWriter (line 24) | type logWriter struct
method Write (line 31) | func (logger *logWriter) Write(b []byte) (int, error) {
type teeReaderCloser (line 35) | type teeReaderCloser struct
method Close (line 43) | func (reader *teeReaderCloser) Close() error {
function logRequest (line 55) | func logRequest(r *request.Request) {
function logRequestHeader (line 96) | func logRequestHeader(r *request.Request) {
constant logRespMsg (line 112) | logRespMsg = `DEBUG: Response %s/%s Details:
constant logRespErrMsg (line 117) | logRespErrMsg = `DEBUG ERROR: Response %s/%s:
function logResponse (line 130) | func logResponse(r *request.Request) {
function logResponseHeader (line 192) | func logResponseHeader(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go
type ClientInfo (line 4) | type ClientInfo struct
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go
type NoOpRetryer (line 11) | type NoOpRetryer struct
method MaxRetries (line 15) | func (d NoOpRetryer) MaxRetries() int {
method ShouldRetry (line 20) | func (d NoOpRetryer) ShouldRetry(_ *request.Request) bool {
method RetryRules (line 26) | func (d NoOpRetryer) RetryRules(_ *request.Request) time.Duration {
FILE: vendor/github.com/aws/aws-sdk-go/aws/config.go
constant UseServiceDefaultRetries (line 14) | UseServiceDefaultRetries = -1
type RequestRetryer (line 18) | type RequestRetryer interface
type Config (line 33) | type Config struct
method WithCredentialsChainVerboseErrors (line 319) | func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *...
method WithCredentials (line 326) | func (c *Config) WithCredentials(creds *credentials.Credentials) *Conf...
method WithEndpoint (line 333) | func (c *Config) WithEndpoint(endpoint string) *Config {
method WithEndpointResolver (line 340) | func (c *Config) WithEndpointResolver(resolver endpoints.Resolver) *Co...
method WithRegion (line 347) | func (c *Config) WithRegion(region string) *Config {
method WithDisableSSL (line 354) | func (c *Config) WithDisableSSL(disable bool) *Config {
method WithHTTPClient (line 361) | func (c *Config) WithHTTPClient(client *http.Client) *Config {
method WithMaxRetries (line 368) | func (c *Config) WithMaxRetries(max int) *Config {
method WithDisableParamValidation (line 375) | func (c *Config) WithDisableParamValidation(disable bool) *Config {
method WithDisableComputeChecksums (line 382) | func (c *Config) WithDisableComputeChecksums(disable bool) *Config {
method WithLogLevel (line 389) | func (c *Config) WithLogLevel(level LogLevelType) *Config {
method WithLogger (line 396) | func (c *Config) WithLogger(logger Logger) *Config {
method WithS3ForcePathStyle (line 403) | func (c *Config) WithS3ForcePathStyle(force bool) *Config {
method WithS3Disable100Continue (line 410) | func (c *Config) WithS3Disable100Continue(disable bool) *Config {
method WithS3UseAccelerate (line 417) | func (c *Config) WithS3UseAccelerate(enable bool) *Config {
method WithS3DisableContentMD5Validation (line 425) | func (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config {
method WithS3UseARNRegion (line 433) | func (c *Config) WithS3UseARNRegion(enable bool) *Config {
method WithUseDualStack (line 440) | func (c *Config) WithUseDualStack(enable bool) *Config {
method WithEC2MetadataDisableTimeoutOverride (line 447) | func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *C...
method WithEC2MetadataEnableFallback (line 454) | func (c *Config) WithEC2MetadataEnableFallback(v bool) *Config {
method WithSleepDelay (line 461) | func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
method WithEndpointDiscovery (line 467) | func (c *Config) WithEndpointDiscovery(t bool) *Config {
method WithDisableEndpointHostPrefix (line 474) | func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {
method WithSTSRegionalEndpoint (line 481) | func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndp...
method WithS3UsEast1RegionalEndpoint (line 488) | func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1...
method WithLowerCaseHeaderMaps (line 495) | func (c *Config) WithLowerCaseHeaderMaps(t bool) *Config {
method WithDisableRestProtocolURICleaning (line 502) | func (c *Config) WithDisableRestProtocolURICleaning(t bool) *Config {
method MergeIn (line 508) | func (c *Config) MergeIn(cfgs ...*Config) {
method Copy (line 650) | func (c *Config) Copy(cfgs ...*Config) *Config {
function NewConfig (line 313) | func NewConfig() *Config {
function mergeInConfig (line 514) | func mergeInConfig(dst *Config, other *Config) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go
type Context (line 13) | type Context interface
FILE: vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go
function BackgroundContext (line 21) | func BackgroundContext() Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go
function BackgroundContext (line 19) | func BackgroundContext() Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go
function SleepWithContext (line 12) | func SleepWithContext(ctx Context, dur time.Duration) error {
FILE: vendor/github.com/aws/aws-sdk-go/aws/convert_types.go
function String (line 6) | func String(v string) *string {
function StringValue (line 12) | func StringValue(v *string) string {
function StringSlice (line 21) | func StringSlice(src []string) []*string {
function StringValueSlice (line 31) | func StringValueSlice(src []*string) []string {
function StringMap (line 43) | func StringMap(src map[string]string) map[string]*string {
function StringValueMap (line 54) | func StringValueMap(src map[string]*string) map[string]string {
function Bool (line 65) | func Bool(v bool) *bool {
function BoolValue (line 71) | func BoolValue(v *bool) bool {
function BoolSlice (line 80) | func BoolSlice(src []bool) []*bool {
function BoolValueSlice (line 90) | func BoolValueSlice(src []*bool) []bool {
function BoolMap (line 102) | func BoolMap(src map[string]bool) map[string]*bool {
function BoolValueMap (line 113) | func BoolValueMap(src map[string]*bool) map[string]bool {
function Int (line 124) | func Int(v int) *int {
function IntValue (line 130) | func IntValue(v *int) int {
function IntSlice (line 139) | func IntSlice(src []int) []*int {
function IntValueSlice (line 149) | func IntValueSlice(src []*int) []int {
function IntMap (line 161) | func IntMap(src map[string]int) map[string]*int {
function IntValueMap (line 172) | func IntValueMap(src map[string]*int) map[string]int {
function Uint (line 183) | func Uint(v uint) *uint {
function UintValue (line 189) | func UintValue(v *uint) uint {
function UintSlice (line 198) | func UintSlice(src []uint) []*uint {
function UintValueSlice (line 208) | func UintValueSlice(src []*uint) []uint {
function UintMap (line 220) | func UintMap(src map[string]uint) map[string]*uint {
function UintValueMap (line 231) | func UintValueMap(src map[string]*uint) map[string]uint {
function Int8 (line 242) | func Int8(v int8) *int8 {
function Int8Value (line 248) | func Int8Value(v *int8) int8 {
function Int8Slice (line 257) | func Int8Slice(src []int8) []*int8 {
function Int8ValueSlice (line 267) | func Int8ValueSlice(src []*int8) []int8 {
function Int8Map (line 279) | func Int8Map(src map[string]int8) map[string]*int8 {
function Int8ValueMap (line 290) | func Int8ValueMap(src map[string]*int8) map[string]int8 {
function Int16 (line 301) | func Int16(v int16) *int16 {
function Int16Value (line 307) | func Int16Value(v *int16) int16 {
function Int16Slice (line 316) | func Int16Slice(src []int16) []*int16 {
function Int16ValueSlice (line 326) | func Int16ValueSlice(src []*int16) []int16 {
function Int16Map (line 338) | func Int16Map(src map[string]int16) map[string]*int16 {
function Int16ValueMap (line 349) | func Int16ValueMap(src map[string]*int16) map[string]int16 {
function Int32 (line 360) | func Int32(v int32) *int32 {
function Int32Value (line 366) | func Int32Value(v *int32) int32 {
function Int32Slice (line 375) | func Int32Slice(src []int32) []*int32 {
function Int32ValueSlice (line 385) | func Int32ValueSlice(src []*int32) []int32 {
function Int32Map (line 397) | func Int32Map(src map[string]int32) map[string]*int32 {
function Int32ValueMap (line 408) | func Int32ValueMap(src map[string]*int32) map[string]int32 {
function Int64 (line 419) | func Int64(v int64) *int64 {
function Int64Value (line 425) | func Int64Value(v *int64) int64 {
function Int64Slice (line 434) | func Int64Slice(src []int64) []*int64 {
function Int64ValueSlice (line 444) | func Int64ValueSlice(src []*int64) []int64 {
function Int64Map (line 456) | func Int64Map(src map[string]int64) map[string]*int64 {
function Int64ValueMap (line 467) | func Int64ValueMap(src map[string]*int64) map[string]int64 {
function Uint8 (line 478) | func Uint8(v uint8) *uint8 {
function Uint8Value (line 484) | func Uint8Value(v *uint8) uint8 {
function Uint8Slice (line 493) | func Uint8Slice(src []uint8) []*uint8 {
function Uint8ValueSlice (line 503) | func Uint8ValueSlice(src []*uint8) []uint8 {
function Uint8Map (line 515) | func Uint8Map(src map[string]uint8) map[string]*uint8 {
function Uint8ValueMap (line 526) | func Uint8ValueMap(src map[string]*uint8) map[string]uint8 {
function Uint16 (line 537) | func Uint16(v uint16) *uint16 {
function Uint16Value (line 543) | func Uint16Value(v *uint16) uint16 {
function Uint16Slice (line 552) | func Uint16Slice(src []uint16) []*uint16 {
function Uint16ValueSlice (line 562) | func Uint16ValueSlice(src []*uint16) []uint16 {
function Uint16Map (line 574) | func Uint16Map(src map[string]uint16) map[string]*uint16 {
function Uint16ValueMap (line 585) | func Uint16ValueMap(src map[string]*uint16) map[string]uint16 {
function Uint32 (line 596) | func Uint32(v uint32) *uint32 {
function Uint32Value (line 602) | func Uint32Value(v *uint32) uint32 {
function Uint32Slice (line 611) | func Uint32Slice(src []uint32) []*uint32 {
function Uint32ValueSlice (line 621) | func Uint32ValueSlice(src []*uint32) []uint32 {
function Uint32Map (line 633) | func Uint32Map(src map[string]uint32) map[string]*uint32 {
function Uint32ValueMap (line 644) | func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
function Uint64 (line 655) | func Uint64(v uint64) *uint64 {
function Uint64Value (line 661) | func Uint64Value(v *uint64) uint64 {
function Uint64Slice (line 670) | func Uint64Slice(src []uint64) []*uint64 {
function Uint64ValueSlice (line 680) | func Uint64ValueSlice(src []*uint64) []uint64 {
function Uint64Map (line 692) | func Uint64Map(src map[string]uint64) map[string]*uint64 {
function Uint64ValueMap (line 703) | func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
function Float32 (line 714) | func Float32(v float32) *float32 {
function Float32Value (line 720) | func Float32Value(v *float32) float32 {
function Float32Slice (line 729) | func Float32Slice(src []float32) []*float32 {
function Float32ValueSlice (line 739) | func Float32ValueSlice(src []*float32) []float32 {
function Float32Map (line 751) | func Float32Map(src map[string]float32) map[string]*float32 {
function Float32ValueMap (line 762) | func Float32ValueMap(src map[string]*float32) map[string]float32 {
function Float64 (line 773) | func Float64(v float64) *float64 {
function Float64Value (line 779) | func Float64Value(v *float64) float64 {
function Float64Slice (line 788) | func Float64Slice(src []float64) []*float64 {
function Float64ValueSlice (line 798) | func Float64ValueSlice(src []*float64) []float64 {
function Float64Map (line 810) | func Float64Map(src map[string]float64) map[string]*float64 {
function Float64ValueMap (line 821) | func Float64ValueMap(src map[string]*float64) map[string]float64 {
function Time (line 832) | func Time(v time.Time) *time.Time {
function TimeValue (line 838) | func TimeValue(v *time.Time) time.Time {
function SecondsTimeValue (line 847) | func SecondsTimeValue(v *int64) time.Time {
function MillisecondsTimeValue (line 856) | func MillisecondsTimeValue(v *int64) time.Time {
function TimeUnixMilli (line 871) | func TimeUnixMilli(t time.Time) int64 {
function TimeSlice (line 877) | func TimeSlice(src []time.Time) []*time.Time {
function TimeValueSlice (line 887) | func TimeValueSlice(src []*time.Time) []time.Time {
function TimeMap (line 899) | func TimeMap(src map[string]time.Time) map[string]*time.Time {
function TimeValueMap (line 910) | func TimeValueMap(src map[string]*time.Time) map[string]time.Time {
FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/awsinternal.go
constant isAwsInternal (line 4) | isAwsInternal = ""
FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
type lener (line 20) | type lener interface
function sendFollowRedirects (line 119) | func sendFollowRedirects(r *request.Request) (*http.Response, error) {
function sendWithoutFollowRedirects (line 123) | func sendWithoutFollowRedirects(r *request.Request) (*http.Response, err...
function handleSendError (line 132) | func handleSendError(r *request.Request, err error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go
constant execEnvVar (line 19) | execEnvVar = `AWS_EXECUTION_ENV`
constant execEnvUAKey (line 20) | execEnvUAKey = `exec-env`
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
type ChainProvider (line 53) | type ChainProvider struct
method Retrieve (line 72) | func (c *ChainProvider) Retrieve() (Value, error) {
method IsExpired (line 94) | func (c *ChainProvider) IsExpired() bool {
function NewChainCredentials (line 61) | func NewChainCredentials(providers []Provider) *Credentials {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.5.go
function backgroundContext (line 21) | func backgroundContext() Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.7.go
function backgroundContext (line 19) | func backgroundContext() Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.5.go
type Context (line 15) | type Context interface
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
type Value (line 74) | type Value struct
method HasKeys (line 90) | func (v Value) HasKeys() bool {
type Provider (line 100) | type Provider interface
type ProviderWithContext (line 111) | type ProviderWithContext interface
type Expirer (line 120) | type Expirer interface
type ErrorProvider (line 128) | type ErrorProvider struct
method Retrieve (line 137) | func (p ErrorProvider) Retrieve() (Value, error) {
method IsExpired (line 142) | func (p ErrorProvider) IsExpired() bool {
type Expiry (line 157) | type Expiry struct
method SetExpiration (line 175) | func (e *Expiry) SetExpiration(expiration time.Time, window time.Durat...
method IsExpired (line 185) | func (e *Expiry) IsExpired() bool {
method ExpiresAt (line 194) | func (e *Expiry) ExpiresAt() time.Time {
type Credentials (line 209) | type Credentials struct
method GetWithContext (line 237) | func (c *Credentials) GetWithContext(ctx Context) (Value, error) {
method singleRetrieve (line 266) | func (c *Credentials) singleRetrieve(ctx Context) (interface{}, error) {
method Get (line 297) | func (c *Credentials) Get() (Value, error) {
method Expire (line 306) | func (c *Credentials) Expire() {
method IsExpired (line 318) | func (c *Credentials) IsExpired() bool {
method asyncIsExpired (line 327) | func (c *Credentials) asyncIsExpired() <-chan Value {
method isExpiredLocked (line 344) | func (c *Credentials) isExpiredLocked(creds interface{}) bool {
method ExpiresAt (line 351) | func (c *Credentials) ExpiresAt() (time.Time, error) {
function NewCredentials (line 218) | func NewCredentials(provider Provider) *Credentials {
type suppressedContext (line 369) | type suppressedContext struct
method Deadline (line 373) | func (s *suppressedContext) Deadline() (deadline time.Time, ok bool) {
method Done (line 377) | func (s *suppressedContext) Done() <-chan struct{} {
method Err (line 381) | func (s *suppressedContext) Err() error {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
constant ProviderName (line 20) | ProviderName = "EC2RoleProvider"
type EC2RoleProvider (line 39) | type EC2RoleProvider struct
method Retrieve (line 90) | func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) {
method RetrieveWithContext (line 97) | func (m *EC2RoleProvider) RetrieveWithContext(ctx credentials.Context)...
function NewCredentials (line 60) | func NewCredentials(c client.ConfigProvider, options ...func(*EC2RolePro...
function NewCredentialsWithClient (line 75) | func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ....
type ec2RoleCredRespBody (line 125) | type ec2RoleCredRespBody struct
constant iamSecurityCredsPath (line 137) | iamSecurityCredsPath = "iam/security-credentials/"
function requestCredList (line 141) | func requestCredList(ctx aws.Context, client *ec2metadata.EC2Metadata) (...
function requestCred (line 165) | func requestCred(ctx aws.Context, client *ec2metadata.EC2Metadata, creds...
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
constant ProviderName (line 48) | ProviderName = `CredentialsEndpointProvider`
type Provider (line 52) | type Provider struct
method IsExpired (line 141) | func (p *Provider) IsExpired() bool {
method Retrieve (line 150) | func (p *Provider) Retrieve() (credentials.Value, error) {
method RetrieveWithContext (line 156) | func (p *Provider) RetrieveWithContext(ctx credentials.Context) (crede...
method getCredentials (line 189) | func (p *Provider) getCredentials(ctx aws.Context) (*getCredentialsOut...
type AuthTokenProvider (line 94) | type AuthTokenProvider interface
type TokenProviderFunc (line 100) | type TokenProviderFunc
method GetToken (line 103) | func (p TokenProviderFunc) GetToken() (string, error) {
function NewProviderClient (line 109) | func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoi...
function NewCredentialsClient (line 135) | func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, end...
type getCredentialsOutput (line 177) | type getCredentialsOutput struct
type errorOutput (line 184) | type errorOutput struct
function validateEndpointHandler (line 219) | func validateEndpointHandler(r *request.Request) {
function unmarshalHandler (line 225) | func unmarshalHandler(r *request.Request) {
function unmarshalError (line 237) | func unmarshalError(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
constant EnvProviderName (line 10) | EnvProviderName = "EnvProvider"
type EnvProvider (line 30) | type EnvProvider struct
method Retrieve (line 41) | func (e *EnvProvider) Retrieve() (Value, error) {
method IsExpired (line 72) | func (e *EnvProvider) IsExpired() bool {
function NewEnvCredentials (line 36) | func NewEnvCredentials() *Credentials {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
constant ProviderName (line 99) | ProviderName = `ProcessProvider`
constant ErrCodeProcessProviderParse (line 102) | ErrCodeProcessProviderParse = "ProcessProviderParseError"
constant ErrCodeProcessProviderVersion (line 105) | ErrCodeProcessProviderVersion = "ProcessProviderVersionError"
constant ErrCodeProcessProviderRequired (line 108) | ErrCodeProcessProviderRequired = "ProcessProviderRequiredError"
constant ErrCodeProcessProviderExecution (line 111) | ErrCodeProcessProviderExecution = "ProcessProviderExecutionError"
constant errMsgProcessProviderTimeout (line 114) | errMsgProcessProviderTimeout = "credential process timed out"
constant errMsgProcessProviderProcess (line 117) | errMsgProcessProviderProcess = "error in credential_process"
constant errMsgProcessProviderParse (line 120) | errMsgProcessProviderParse = "parse failed of credential_process output"
constant errMsgProcessProviderVersion (line 123) | errMsgProcessProviderVersion = "wrong version in process output (not 1)"
constant errMsgProcessProviderMissKey (line 126) | errMsgProcessProviderMissKey = "missing AccessKeyId in process output"
constant errMsgProcessProviderMissSecret (line 129) | errMsgProcessProviderMissSecret = "missing SecretAccessKey in process ou...
constant errMsgProcessProviderPrepareCmd (line 132) | errMsgProcessProviderPrepareCmd = "failed to prepare command"
constant errMsgProcessProviderEmptyCmd (line 135) | errMsgProcessProviderEmptyCmd = "command must not be empty"
constant errMsgProcessProviderPipe (line 138) | errMsgProcessProviderPipe = "failed to initialize pipe"
constant DefaultDuration (line 142) | DefaultDuration = time.Duration(15) * time.Minute
constant DefaultBufSize (line 146) | DefaultBufSize = int(8 * sdkio.KibiByte)
constant DefaultTimeout (line 149) | DefaultTimeout = time.Duration(1) * time.Minute
type ProcessProvider (line 154) | type ProcessProvider struct
method Retrieve (line 250) | func (p *ProcessProvider) Retrieve() (credentials.Value, error) {
method IsExpired (line 302) | func (p *ProcessProvider) IsExpired() bool {
method prepareCommand (line 310) | func (p *ProcessProvider) prepareCommand() error {
method executeCredentialProcess (line 344) | func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) {
function NewCredentials (line 187) | func NewCredentials(command string, options ...func(*ProcessProvider)) *...
function NewCredentialsTimeout (line 204) | func NewCredentialsTimeout(command string, timeout time.Duration) *crede...
function NewCredentialsCommand (line 214) | func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessPr...
type CredentialProcessResponse (line 231) | type CredentialProcessResponse struct
function appendError (line 411) | func appendError(errors []error, err error) []error {
function executeCommand (line 418) | func executeCommand(cmd exec.Cmd, exec chan error) {
function readInput (line 428) | func readInput(r io.Reader, w io.Writer, read chan error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
constant SharedCredsProviderName (line 13) | SharedCredsProviderName = "SharedCredentialsProvider"
type SharedCredentialsProvider (line 25) | type SharedCredentialsProvider struct
method Retrieve (line 54) | func (p *SharedCredentialsProvider) Retrieve() (Value, error) {
method IsExpired (line 72) | func (p *SharedCredentialsProvider) IsExpired() bool {
method filename (line 118) | func (p *SharedCredentialsProvider) filename() (string, error) {
method profile (line 142) | func (p *SharedCredentialsProvider) profile() string {
function NewSharedCredentials (line 45) | func NewSharedCredentials(filename, profile string) *Credentials {
function loadProfile (line 79) | func loadProfile(filename, profile string) (Value, error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/os.go
function getHomeDirectory (line 8) | func getHomeDirectory() string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/os_windows.go
function getHomeDirectory (line 5) | func getHomeDirectory() string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/provider.go
constant ErrCodeSSOProviderInvalidToken (line 23) | ErrCodeSSOProviderInvalidToken = "SSOProviderInvalidToken"
constant invalidTokenMessage (line 25) | invalidTokenMessage = "the SSO session has expired or is invalid"
function init (line 27) | func init() {
constant ProviderName (line 35) | ProviderName = "SSOProvider"
function defaultCacheLocationImpl (line 39) | func defaultCacheLocationImpl() string {
type Provider (line 44) | type Provider struct
method Retrieve (line 98) | func (p *Provider) Retrieve() (credentials.Value, error) {
method RetrieveWithContext (line 104) | func (p *Provider) RetrieveWithContext(ctx credentials.Context) (crede...
function NewCredentials (line 75) | func NewCredentials(configProvider client.ConfigProvider, accountID, rol...
function NewCredentialsWithClient (line 81) | func NewCredentialsWithClient(client ssoiface.SSOAPI, accountID, roleNam...
function getCachedFilePath (line 148) | func getCachedFilePath(startUrl string) (string, error) {
type token (line 157) | type token struct
method Expired (line 164) | func (t token) Expired() bool {
function loadTokenFile (line 168) | func loadTokenFile(cachedTokenPath string) (t token, err error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/sso_cached_token.go
function StandardCachedTokenFilepath (line 26) | func StandardCachedTokenFilepath(key string) (string, error) {
type tokenKnownFields (line 41) | type tokenKnownFields struct
type cachedToken (line 50) | type cachedToken struct
method MarshalJSON (line 58) | func (t cachedToken) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 94) | func (t *cachedToken) UnmarshalJSON(b []byte) error {
function setTokenFieldString (line 78) | func setTokenFieldString(fields map[string]interface{}, key, value strin...
function setTokenFieldRFC3339 (line 84) | func setTokenFieldRFC3339(fields map[string]interface{}, key string, val...
function getTokenFieldString (line 127) | func getTokenFieldString(v interface{}, value *string) error {
function getTokenFieldRFC3339 (line 136) | func getTokenFieldRFC3339(v interface{}, value **rfc3339) error {
function loadCachedToken (line 151) | func loadCachedToken(filename string) (cachedToken, error) {
function storeCachedToken (line 170) | func storeCachedToken(filename string, t cachedToken, fileMode os.FileMo...
function writeCacheFile (line 183) | func writeCacheFile(filename string, fileMode os.FileMode, t cachedToken...
type rfc3339 (line 206) | type rfc3339
method UnmarshalJSON (line 209) | func (r *rfc3339) UnmarshalJSON(bytes []byte) error {
method MarshalJSON (line 231) | func (r *rfc3339) MarshalJSON() ([]byte, error) {
function parseRFC3339 (line 221) | func parseRFC3339(v string) (rfc3339, error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/token_provider.go
type CreateTokenAPIClient (line 15) | type CreateTokenAPIClient interface
type SSOTokenProviderOptions (line 21) | type SSOTokenProviderOptions struct
type SSOTokenProvider (line 46) | type SSOTokenProvider struct
method RetrieveBearerToken (line 79) | func (p *SSOTokenProvider) RetrieveBearerToken(ctx aws.Context) (beare...
method refreshToken (line 100) | func (p *SSOTokenProvider) refreshToken(token cachedToken) (cachedToke...
function NewSSOTokenProvider (line 56) | func NewSSOTokenProvider(client CreateTokenAPIClient, cachedTokenFilepat...
function toTime (line 142) | func toTime(p *time.Time) (v time.Time) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
constant StaticProviderName (line 8) | StaticProviderName = "StaticProvider"
type StaticProvider (line 17) | type StaticProvider struct
method Retrieve (line 41) | func (s *StaticProvider) Retrieve() (Value, error) {
method IsExpired (line 55) | func (s *StaticProvider) IsExpired() bool {
function NewStaticCredentials (line 25) | func NewStaticCredentials(id, secret, token string) *Credentials {
function NewStaticCredentialsFromCreds (line 36) | func NewStaticCredentialsFromCreds(creds Value) *Credentials {
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
function StdinTokenProvider (line 105) | func StdinTokenProvider() (string, error) {
constant ProviderName (line 114) | ProviderName = "AssumeRoleProvider"
type AssumeRoler (line 117) | type AssumeRoler interface
type assumeRolerWithContext (line 121) | type assumeRolerWithContext interface
type AssumeRoleProvider (line 139) | type AssumeRoleProvider struct
method Retrieve (line 302) | func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
method RetrieveWithContext (line 307) | func (p *AssumeRoleProvider) RetrieveWithContext(ctx credentials.Conte...
function NewCredentials (line 262) | func NewCredentials(c client.ConfigProvider, roleARN string, options ......
function NewCredentialsWithClient (line 287) | func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ....
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go
constant ErrCodeWebIdentity (line 20) | ErrCodeWebIdentity = "WebIdentityErr"
constant WebIdentityProviderName (line 23) | WebIdentityProviderName = "WebIdentityCredentials"
type TokenFetcher (line 32) | type TokenFetcher interface
type FetchTokenPath (line 37) | type FetchTokenPath
method FetchToken (line 40) | func (f FetchTokenPath) FetchToken(ctx credentials.Context) ([]byte, e...
type WebIdentityRoleProvider (line 51) | type WebIdentityRoleProvider struct
method Retrieve (line 131) | func (p *WebIdentityRoleProvider) Retrieve() (credentials.Value, error) {
method RetrieveWithContext (line 138) | func (p *WebIdentityRoleProvider) RetrieveWithContext(ctx credentials....
function NewWebIdentityCredentials (line 82) | func NewWebIdentityCredentials(c client.ConfigProvider, roleARN, roleSes...
function NewWebIdentityRoleProvider (line 93) | func NewWebIdentityRoleProvider(svc stsiface.STSAPI, roleARN, roleSessio...
function NewWebIdentityRoleProviderWithToken (line 102) | func NewWebIdentityRoleProviderWithToken(svc stsiface.STSAPI, roleARN, r...
function NewWebIdentityRoleProviderWithOptions (line 113) | func NewWebIdentityRoleProviderWithOptions(svc stsiface.STSAPI, roleARN,...
FILE: vendor/github.com/aws/aws-sdk-go/aws/crr/cache.go
type EndpointCache (line 10) | type EndpointCache struct
method get (line 31) | func (c *EndpointCache) get(endpointKey string) (Endpoint, bool) {
method Has (line 46) | func (c *EndpointCache) Has(endpointKey string) bool {
method Get (line 57) | func (c *EndpointCache) Get(d Discoverer, endpointKey string, required...
method Add (line 79) | func (c *EndpointCache) Add(endpoint Endpoint) {
method deleteRandomKey (line 97) | func (c *EndpointCache) deleteRandomKey() bool {
method discover (line 112) | func (c *EndpointCache) discover(d Discoverer, endpointKey string) (En...
function NewEndpointCache (line 21) | func NewEndpointCache(endpointLimit int64) *EndpointCache {
FILE: vendor/github.com/aws/aws-sdk-go/aws/crr/endpoint.go
type Endpoint (line 13) | type Endpoint struct
method Add (line 34) | func (e *Endpoint) Add(addr WeightedAddress) {
method Len (line 40) | func (e *Endpoint) Len() int {
method GetValidAddress (line 53) | func (e *Endpoint) GetValidAddress() (WeightedAddress, bool) {
method Prune (line 73) | func (e *Endpoint) Prune() bool {
type WeightedAddresses (line 19) | type WeightedAddresses
type WeightedAddress (line 22) | type WeightedAddress struct
method HasExpired (line 29) | func (e WeightedAddress) HasExpired() bool {
type Discoverer (line 92) | type Discoverer interface
function BuildEndpointKey (line 99) | func BuildEndpointKey(params map[string]*string) string {
function cloneURL (line 121) | func cloneURL(u *url.URL) (clone *url.URL) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/crr/sync_map.go
type syncMap (line 10) | type syncMap
method Load (line 16) | func (m *syncMap) Load(key interface{}) (interface{}, bool) {
method Store (line 20) | func (m *syncMap) Store(key interface{}, value interface{}) {
method Delete (line 24) | func (m *syncMap) Delete(key interface{}) {
method Range (line 28) | func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
function newSyncMap (line 12) | func newSyncMap() syncMap {
FILE: vendor/github.com/aws/aws-sdk-go/aws/crr/sync_map_1_8.go
type syncMap (line 10) | type syncMap struct
method Load (line 21) | func (m *syncMap) Load(key interface{}) (interface{}, bool) {
method Store (line 29) | func (m *syncMap) Store(key interface{}, value interface{}) {
method Delete (line 36) | func (m *syncMap) Delete(key interface{}) {
method Range (line 43) | func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
function newSyncMap (line 15) | func newSyncMap() syncMap {
FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go
constant DefaultPort (line 15) | DefaultPort = "31000"
constant DefaultHost (line 18) | DefaultHost = "127.0.0.1"
function AddressWithDefaults (line 24) | func AddressWithDefaults(host, port string) string {
function Start (line 58) | func Start(clientID string, url string) (*Reporter, error) {
function Get (line 84) | func Get() *Reporter {
FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go
type metricTime (line 10) | type metricTime
method MarshalJSON (line 12) | func (t metricTime) MarshalJSON() ([]byte, error) {
type metric (line 17) | type metric struct
method TruncateFields (line 63) | func (m *metric) TruncateFields() {
method SetException (line 89) | func (m *metric) SetException(e metricException) {
method SetFinalException (line 100) | func (m *metric) SetFinalException(e metricException) {
function truncateString (line 80) | func truncateString(v *string, l int) *string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go
constant runningEnum (line 8) | runningEnum = iota
constant pausedEnum (line 9) | pausedEnum
type metricChan (line 17) | type metricChan struct
method Pause (line 29) | func (ch *metricChan) Pause() {
method Continue (line 33) | func (ch *metricChan) Continue() {
method IsPaused (line 37) | func (ch *metricChan) IsPaused() bool {
method Push (line 44) | func (ch *metricChan) Push(m metric) bool {
function newMetricChan (line 22) | func newMetricChan(size int) metricChan {
FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go
type metricException (line 3) | type metricException interface
type requestException (line 8) | type requestException struct
method Exception (line 13) | func (e requestException) Exception() string {
method Message (line 16) | func (e requestException) Message() string {
type awsException (line 20) | type awsException struct
type sdkException (line 24) | type sdkException struct
FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
type Reporter (line 15) | type Reporter struct
method sendAPICallAttemptMetric (line 49) | func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) {
method sendAPICallMetric (line 105) | func (rep *Reporter) sendAPICallMetric(r *request.Request) {
method connect (line 142) | func (rep *Reporter) connect(network, url string) error {
method close (line 157) | func (rep *Reporter) close() {
method start (line 165) | func (rep *Reporter) start() {
method Pause (line 190) | func (rep *Reporter) Pause() {
method Continue (line 204) | func (rep *Reporter) Continue() {
method InjectHandlers (line 241) | func (rep *Reporter) InjectHandlers(handlers *request.Handlers) {
function connect (line 27) | func connect(url string) error {
function newReporter (line 41) | func newReporter(clientID, url string) *Reporter {
function getMetricException (line 87) | func getMetricException(err awserr.Error) metricException {
constant APICallMetricHandlerName (line 220) | APICallMetricHandlerName = "awscsm.SendAPICallMetric"
constant APICallAttemptMetricHandlerName (line 221) | APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric"
function boolIntValue (line 258) | func boolIntValue(b bool) int {
FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
type Defaults (line 32) | type Defaults struct
function Get (line 38) | func Get() Defaults {
function Config (line 56) | func Config() *aws.Config {
function Handlers (line 72) | func Handlers() request.Handlers {
function CredChain (line 95) | func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials....
function CredProviders (line 109) | func CredProviders(cfg *aws.Config, handlers request.Handlers) []credent...
constant httpProviderAuthorizationEnvVar (line 118) | httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN"
constant httpProviderAuthFileEnvVar (line 119) | httpProviderAuthFileEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE"
constant httpProviderEnvVar (line 120) | httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI"
function RemoteCredProvider (line 146) | func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) crede...
function isAllowedHost (line 165) | func isAllowedHost(host string) (bool, error) {
function isIPAllowed (line 184) | func isIPAllowed(ip net.IP) bool {
function localHTTPCredProvider (line 191) | func localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u ...
function httpCredProvider (line 223) | func httpCredProvider(cfg aws.Config, handlers request.Handlers, u strin...
function ec2RoleProvider (line 241) | func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credenti...
FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go
function SharedCredentialsFilename (line 14) | func SharedCredentialsFilename() string {
function SharedConfigFilename (line 25) | func SharedConfigFilename() string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
method getToken (line 19) | func (c *EC2Metadata) getToken(ctx aws.Context, duration time.Duration) ...
method GetMetadata (line 54) | func (c *EC2Metadata) GetMetadata(p string) (string, error) {
method GetMetadataWithContext (line 61) | func (c *EC2Metadata) GetMetadataWithContext(ctx aws.Context, p string) ...
method GetUserData (line 80) | func (c *EC2Metadata) GetUserData() (string, error) {
method GetUserDataWithContext (line 87) | func (c *EC2Metadata) GetUserDataWithContext(ctx aws.Context) (string, e...
method GetDynamicData (line 105) | func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
method GetDynamicDataWithContext (line 112) | func (c *EC2Metadata) GetDynamicDataWithContext(ctx aws.Context, p strin...
method GetInstanceIdentityDocument (line 130) | func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentity...
method GetInstanceIdentityDocumentWithContext (line 137) | func (c *EC2Metadata) GetInstanceIdentityDocumentWithContext(ctx aws.Con...
method IAMInfo (line 156) | func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {
method IAMInfoWithContext (line 161) | func (c *EC2Metadata) IAMInfoWithContext(ctx aws.Context) (EC2IAMInfo, e...
method Region (line 186) | func (c *EC2Metadata) Region() (string, error) {
method RegionWithContext (line 191) | func (c *EC2Metadata) RegionWithContext(ctx aws.Context) (string, error) {
method Available (line 208) | func (c *EC2Metadata) Available() bool {
method AvailableWithContext (line 215) | func (c *EC2Metadata) AvailableWithContext(ctx aws.Context) bool {
type EC2IAMInfo (line 225) | type EC2IAMInfo struct
type EC2InstanceIdentityDocument (line 234) | type EC2InstanceIdentityDocument struct
FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
constant ServiceName (line 34) | ServiceName = "ec2metadata"
constant disableServiceEnvVar (line 35) | disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED"
constant ttlHeader (line 38) | ttlHeader = "x-aws-ec2-metadata-token-ttl-seconds"
constant tokenHeader (line 39) | tokenHeader = "x-aws-ec2-metadata-token"
constant fetchTokenHandlerName (line 42) | fetchTokenHandlerName = "FetchTokenHandler"
constant unmarshalMetadataHandlerName (line 43) | unmarshalMetadataHandlerName = "unmarshalMetadataHandler"
constant unmarshalTokenHandlerName (line 44) | unmarshalTokenHandlerName = "unmarshalTokenHandler"
constant enableTokenProviderHandlerName (line 45) | enableTokenProviderHandlerName = "enableTokenProviderHandler"
constant defaultTTL (line 48) | defaultTTL = 21600 * time.Second
constant ttlExpirationWindow (line 49) | ttlExpirationWindow = 30 * time.Second
type EC2Metadata (line 53) | type EC2Metadata struct
function New (line 67) | func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata {
function NewClient (line 82) | func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, sign...
function httpClientZero (line 162) | func httpClientZero(c *http.Client) bool {
type metadataOutput (line 166) | type metadataOutput struct
type tokenOutput (line 170) | type tokenOutput struct
function unmarshalError (line 223) | func unmarshalError(r *request.Request) {
function validateEndpointHandler (line 241) | func validateEndpointHandler(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go
type tokenProvider (line 19) | type tokenProvider struct
method fallbackEnabled (line 38) | func (t *tokenProvider) fallbackEnabled() bool {
method fetchTokenHandler (line 43) | func (t *tokenProvider) fetchTokenHandler(r *request.Request) {
method enableTokenProviderHandler (line 89) | func (t *tokenProvider) enableTokenProviderHandler(r *request.Request) {
type ec2Token (line 27) | type ec2Token struct
function newTokenProvider (line 33) | func newTokenProvider(c *EC2Metadata, duration time.Duration) *tokenProv...
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
type modelDefinition (line 11) | type modelDefinition
type DecodeModelOptions (line 15) | type DecodeModelOptions struct
method Set (line 20) | func (d *DecodeModelOptions) Set(optFns ...func(*DecodeModelOptions)) {
function DecodeModel (line 40) | func DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Reso...
function decodeV3Endpoints (line 66) | func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions...
function custRegionalS3 (line 93) | func custRegionalS3(p *partition) {
function custRmIotDataService (line 125) | func custRmIotDataService(p *partition) {
function custFixAppAutoscalingChina (line 129) | func custFixAppAutoscalingChina(p *partition) {
function custFixAppAutoscalingUsGov (line 151) | func custFixAppAutoscalingUsGov(p *partition) {
type decodeModelError (line 185) | type decodeModelError struct
function newDecodeModelError (line 189) | func newDecodeModelError(msg string, err error) decodeModelError {
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
constant AwsPartitionID (line 11) | AwsPartitionID = "aws"
constant AwsCnPartitionID (line 12) | AwsCnPartitionID = "aws-cn"
constant AwsUsGovPartitionID (line 13) | AwsUsGovPartitionID = "aws-us-gov"
constant AwsIsoPartitionID (line 14) | AwsIsoPartitionID = "aws-iso"
constant AwsIsoBPartitionID (line 15) | AwsIsoBPartitionID = "aws-iso-b"
constant AwsIsoEPartitionID (line 16) | AwsIsoEPartitionID = "aws-iso-e"
constant AwsIsoFPartitionID (line 17) | AwsIsoFPartitionID = "aws-iso-f"
constant AfSouth1RegionID (line 22) | AfSouth1RegionID = "af-south-1"
constant ApEast1RegionID (line 23) | ApEast1RegionID = "ap-east-1"
constant ApNortheast1RegionID (line 24) | ApNortheast1RegionID = "ap-northeast-1"
constant ApNortheast2RegionID (line 25) | ApNortheast2RegionID = "ap-northeast-2"
constant ApNortheast3RegionID (line 26) | ApNortheast3RegionID = "ap-northeast-3"
constant ApSouth1RegionID (line 27) | ApSouth1RegionID = "ap-south-1"
constant ApSouth2RegionID (line 28) | ApSouth2RegionID = "ap-south-2"
constant ApSoutheast1RegionID (line 29) | ApSoutheast1RegionID = "ap-southeast-1"
constant ApSoutheast2RegionID (line 30) | ApSoutheast2RegionID = "ap-southeast-2"
constant ApSoutheast3RegionID (line 31) | ApSoutheast3RegionID = "ap-southeast-3"
constant ApSoutheast4RegionID (line 32) | ApSoutheast4RegionID = "ap-southeast-4"
constant CaCentral1RegionID (line 33) | CaCentral1RegionID = "ca-central-1"
constant EuCentral1RegionID (line 34) | EuCentral1RegionID = "eu-central-1"
constant EuCentral2RegionID (line 35) | EuCentral2RegionID = "eu-central-2"
constant EuNorth1RegionID (line 36) | EuNorth1RegionID = "eu-north-1"
constant EuSouth1RegionID (line 37) | EuSouth1RegionID = "eu-south-1"
constant EuSouth2RegionID (line 38) | EuSouth2RegionID = "eu-south-2"
constant EuWest1RegionID (line 39) | EuWest1RegionID = "eu-west-1"
constant EuWest2RegionID (line 40) | EuWest2RegionID = "eu-west-2"
constant EuWest3RegionID (line 41) | EuWest3RegionID = "eu-west-3"
constant IlCentral1RegionID (line 42) | IlCentral1RegionID = "il-central-1"
constant MeCentral1RegionID (line 43) | MeCentral1RegionID = "me-central-1"
constant MeSouth1RegionID (line 44) | MeSouth1RegionID = "me-south-1"
constant SaEast1RegionID (line 45) | SaEast1RegionID = "sa-east-1"
constant UsEast1RegionID (line 46) | UsEast1RegionID = "us-east-1"
constant UsEast2RegionID (line 47) | UsEast2RegionID = "us-east-2"
constant UsWest1RegionID (line 48) | UsWest1RegionID = "us-west-1"
constant UsWest2RegionID (line 49) | UsWest2RegionID = "us-west-2"
constant CnNorth1RegionID (line 54) | CnNorth1RegionID = "cn-north-1"
constant CnNorthwest1RegionID (line 55) | CnNorthwest1RegionID = "cn-northwest-1"
constant UsGovEast1RegionID (line 60) | UsGovEast1RegionID = "us-gov-east-1"
constant UsGovWest1RegionID (line 61) | UsGovWest1RegionID = "us-gov-west-1"
constant UsIsoEast1RegionID (line 66) | UsIsoEast1RegionID = "us-iso-east-1"
constant UsIsoWest1RegionID (line 67) | UsIsoWest1RegionID = "us-iso-west-1"
constant UsIsobEast1RegionID (line 72) | UsIsobEast1RegionID = "us-isob-east-1"
function DefaultResolver (line 85) | func DefaultResolver() Resolver {
function DefaultPartitions (line 96) | func DefaultPartitions() []Partition {
function AwsPartition (line 111) | func AwsPartition() Partition {
function AwsCnPartition (line 33415) | func AwsCnPartition() Partition {
function AwsUsGovPartition (line 35580) | func AwsUsGovPartition() Partition {
function AwsIsoPartition (line 42111) | func AwsIsoPartition() Partition {
function AwsIsoBPartition (line 43211) | func AwsIsoBPartition() Partition {
function AwsIsoEPartition (line 43930) | func AwsIsoEPartition() Partition {
function AwsIsoFPartition (line 43964) | func AwsIsoFPartition() Partition {
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
constant A4bServiceID (line 8) | A4bServiceID = "a4b"
constant AcmServiceID (line 9) | AcmServiceID = "acm"
constant AcmPcaServiceID (line 10) | AcmPcaServiceID = "acm-pca"
constant ApiMediatailorServiceID (line 11) | ApiMediatailorServiceID = "api.mediatailor"
constant ApiPricingServiceID (line 12) | ApiPricingServiceID = "api.pricing"
constant ApiSagemakerServiceID (line 13) | ApiSagemakerServiceID = "api.sagemaker"
constant ApigatewayServiceID (line 14) | ApigatewayServiceID = "apigateway"
constant ApplicationAutoscalingServiceID (line 15) | ApplicationAutoscalingServiceID = "application-autoscaling"
constant Appstream2ServiceID (line 16) | Appstream2ServiceID = "appstream2"
constant AppsyncServiceID (line 17) | AppsyncServiceID = "appsync"
constant AthenaServiceID (line 18) | AthenaServiceID = "athena"
constant AutoscalingServiceID (line 19) | AutoscalingServiceID = "autoscaling"
constant AutoscalingPlansServiceID (line 20) | AutoscalingPlansServiceID = "autoscaling-plans"
constant BatchServiceID (line 21) | BatchServiceID = "batch"
constant BudgetsServiceID (line 22) | BudgetsServiceID = "budgets"
constant CeServiceID (line 23) | CeServiceID = "ce"
constant ChimeServiceID (line 24) | ChimeServiceID = "chime"
constant Cloud9ServiceID (line 25) | Cloud9ServiceID = "cloud9"
constant ClouddirectoryServiceID (line 26) | ClouddirectoryServiceID = "clouddirectory"
constant CloudformationServiceID (line 27) | CloudformationServiceID = "cloudformation"
constant CloudfrontServiceID (line 28) | CloudfrontServiceID = "cloudfront"
constant CloudhsmServiceID (line 29) | CloudhsmServiceID = "cloudhsm"
constant Cloudhsmv2ServiceID (line 30) | Cloudhsmv2ServiceID = "cloudhsmv2"
constant CloudsearchServiceID (line 31) | CloudsearchServiceID = "cloudsearch"
constant CloudtrailServiceID (line 32) | CloudtrailServiceID = "cloudtrail"
constant CodebuildServiceID (line 33) | CodebuildServiceID = "codebuild"
constant CodecommitServiceID (line 34) | CodecommitServiceID = "codecommit"
constant CodedeployServiceID (line 35) | CodedeployServiceID = "codedeploy"
constant CodepipelineServiceID (line 36) | CodepipelineServiceID = "codepipeline"
constant CodestarServiceID (line 37) | CodestarServiceID = "codestar"
constant CognitoIdentityServiceID (line 38) | CognitoIdentityServiceID = "cognito-identity"
constant CognitoIdpServiceID (line 39) | CognitoIdpServiceID = "cognito-idp"
constant CognitoSyncServiceID (line 40) | CognitoSyncServiceID = "cognito-sync"
constant ComprehendServiceID (line 41) | ComprehendServiceID = "comprehend"
constant ConfigServiceID (line 42) | ConfigServiceID = "config"
constant CurServiceID (line 43) | CurServiceID = "cur"
constant DatapipelineServiceID (line 44) | DatapipelineServiceID = "datapipeline"
constant DaxServiceID (line 45) | DaxServiceID = "dax"
constant DevicefarmServiceID (line 46) | DevicefarmServiceID = "devicefarm"
constant DirectconnectServiceID (line 47) | DirectconnectServiceID = "directconnect"
constant DiscoveryServiceID (line 48) | DiscoveryServiceID = "discovery"
constant DmsServiceID (line 49) | DmsServiceID = "dms"
constant DsServiceID (line 50) | DsServiceID = "ds"
constant DynamodbServiceID (line 51) | DynamodbServiceID = "dynamodb"
constant Ec2ServiceID (line 52) | Ec2ServiceID = "ec2"
constant Ec2metadataServiceID (line 53) | Ec2metadataServiceID = "ec2metadata"
constant EcrServiceID (line 54) | EcrServiceID = "ecr"
constant EcsServiceID (line 55) | EcsServiceID = "ecs"
constant ElasticacheServiceID (line 56) | ElasticacheServiceID = "elasticache"
constant ElasticbeanstalkServiceID (line 57) | ElasticbeanstalkServiceID = "elasticbeanstalk"
constant ElasticfilesystemServiceID (line 58) | ElasticfilesystemServiceID = "elasticfilesystem"
constant ElasticloadbalancingServiceID (line 59) | ElasticloadbalancingServiceID = "elasticloadbalancing"
constant ElasticmapreduceServiceID (line 60) | ElasticmapreduceServiceID = "elasticmapreduce"
constant ElastictranscoderServiceID (line 61) | ElastictranscoderServiceID = "elastictranscoder"
constant EmailServiceID (line 62) | EmailServiceID = "email"
constant EntitlementMarketplaceServiceID (line 63) | EntitlementMarketplaceServiceID = "entitlement.marketplace"
constant EsServiceID (line 64) | EsServiceID = "es"
constant EventsServiceID (line 65) | EventsServiceID = "events"
constant FirehoseServiceID (line 66) | FirehoseServiceID = "firehose"
constant FmsServiceID (line 67) | FmsServiceID = "fms"
constant GameliftServiceID (line 68) | GameliftServiceID = "gamelift"
constant GlacierServiceID (line 69) | GlacierServiceID = "glacier"
constant GlueServiceID (line 70) | GlueServiceID = "glue"
constant GreengrassServiceID (line 71) | GreengrassServiceID = "greengrass"
constant GuarddutyServiceID (line 72) | GuarddutyServiceID = "guardduty"
constant HealthServiceID (line 73) | HealthServiceID = "health"
constant IamServiceID (line 74) | IamServiceID = "iam"
constant ImportexportServiceID (line 75) | ImportexportServiceID = "importexport"
constant InspectorServiceID (line 76) | InspectorServiceID = "inspector"
constant IotServiceID (line 77) | IotServiceID = "iot"
constant IotanalyticsServiceID (line 78) | IotanalyticsServiceID = "iotanalytics"
constant KinesisServiceID (line 79) | KinesisServiceID = "kinesis"
constant KinesisanalyticsServiceID (line 80) | KinesisanalyticsServiceID = "kinesisanalytics"
constant KinesisvideoServiceID (line 81) | KinesisvideoServiceID = "kinesisvideo"
constant KmsServiceID (line 82) | KmsServiceID = "kms"
constant LambdaServiceID (line 83) | LambdaServiceID = "lambda"
constant LightsailServiceID (line 84) | LightsailServiceID = "lightsail"
constant LogsServiceID (line 85) | LogsServiceID = "logs"
constant MachinelearningServiceID (line 86) | MachinelearningServiceID = "machinelearning"
constant MarketplacecommerceanalyticsServiceID (line 87) | MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics"
constant MediaconvertServiceID (line 88) | MediaconvertServiceID = "mediaconvert"
constant MedialiveServiceID (line 89) | MedialiveServiceID = "medialive"
constant MediapackageServiceID (line 90) | MediapackageServiceID = "mediapackage"
constant MediastoreServiceID (line 91) | MediastoreServiceID = "mediastore"
constant MeteringMarketplaceServiceID (line 92) | MeteringMarketplaceServiceID = "metering.marketplace"
constant MghServiceID (line 93) | MghServiceID = "mgh"
constant MobileanalyticsServiceID (line 94) | MobileanalyticsServiceID = "mobileanalytics"
constant ModelsLexServiceID (line 95) | ModelsLexServiceID = "models.lex"
constant MonitoringServiceID (line 96) | MonitoringServiceID = "monitoring"
constant MturkRequesterServiceID (line 97) | MturkRequesterServiceID = "mturk-requester"
constant NeptuneServiceID (line 98) | NeptuneServiceID = "neptune"
constant OpsworksServiceID (line 99) | OpsworksServiceID = "opsworks"
constant OpsworksCmServiceID (line 100) | OpsworksCmServiceID = "opsworks-cm"
constant OrganizationsServiceID (line 101) | OrganizationsServiceID = "organizations"
constant PinpointServiceID (line 102) | PinpointServiceID = "pinpoint"
constant PollyServiceID (line 103) | PollyServiceID = "polly"
constant RdsServiceID (line 104) | RdsServiceID = "rds"
constant RedshiftServiceID (line 105) | RedshiftServiceID = "redshift"
constant RekognitionServiceID (line 106) | RekognitionServiceID = "rekognition"
constant ResourceGroupsServiceID (line 107) | ResourceGroupsServiceID = "resource-groups"
constant Route53ServiceID (line 108) | Route53ServiceID = "route53"
constant Route53domainsServiceID (line 109) | Route53domainsServiceID = "route53domains"
constant RuntimeLexServiceID (line 110) | RuntimeLexServiceID = "runtime.lex"
constant RuntimeSagemakerServiceID (line 111) | RuntimeSagemakerServiceID = "runtime.sagemaker"
constant S3ServiceID (line 112) | S3ServiceID = "s3"
constant S3ControlServiceID (line 113) | S3ControlServiceID = "s3-control"
constant SagemakerServiceID (line 114) | SagemakerServiceID = "api.sagemaker"
constant SdbServiceID (line 115) | SdbServiceID = "sdb"
constant SecretsmanagerServiceID (line 116) | SecretsmanagerServiceID = "secretsmanager"
constant ServerlessrepoServiceID (line 117) | ServerlessrepoServiceID = "serverlessrepo"
constant ServicecatalogServiceID (line 118) | ServicecatalogServiceID = "servicecatalog"
constant ServicediscoveryServiceID (line 119) | ServicediscoveryServiceID = "servicediscovery"
constant ShieldServiceID (line 120) | ShieldServiceID = "shield"
constant SmsServiceID (line 121) | SmsServiceID = "sms"
constant SnowballServiceID (line 122) | SnowballServiceID = "snowball"
constant SnsServiceID (line 123) | SnsServiceID = "sns"
constant SqsServiceID (line 124) | SqsServiceID = "sqs"
constant SsmServiceID (line 125) | SsmServiceID = "ssm"
constant StatesServiceID (line 126) | StatesServiceID = "states"
constant StoragegatewayServiceID (line 127) | StoragegatewayServiceID = "storagegateway"
constant StreamsDynamodbServiceID (line 128) | StreamsDynamodbServiceID = "streams.dynamodb"
constant StsServiceID (line 129) | StsServiceID = "sts"
constant SupportServiceID (line 130) | SupportServiceID = "support"
constant SwfServiceID (line 131) | SwfServiceID = "swf"
constant TaggingServiceID (line 132) | TaggingServiceID = "tagging"
constant TransferServiceID (line 133) | TransferServiceID = "transfer"
constant TranslateServiceID (line 134) | TranslateServiceID = "translate"
constant WafServiceID (line 135) | WafServiceID = "waf"
constant WafRegionalServiceID (line 136) | WafRegionalServiceID = "waf-regional"
constant WorkdocsServiceID (line 137) | WorkdocsServiceID = "workdocs"
constant WorkmailServiceID (line 138) | WorkmailServiceID = "workmail"
constant WorkspacesServiceID (line 139) | WorkspacesServiceID = "workspaces"
constant XrayServiceID (line 140) | XrayServiceID = "xray"
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go
type Logger (line 12) | type Logger interface
type DualStackEndpointState (line 18) | type DualStackEndpointState
constant DualStackEndpointStateUnset (line 23) | DualStackEndpointStateUnset DualStackEndpointState = iota
constant DualStackEndpointStateEnabled (line 26) | DualStackEndpointStateEnabled
constant DualStackEndpointStateDisabled (line 29) | DualStackEndpointStateDisabled
type FIPSEndpointState (line 33) | type FIPSEndpointState
constant FIPSEndpointStateUnset (line 37) | FIPSEndpointStateUnset FIPSEndpointState = iota
constant FIPSEndpointStateEnabled (line 40) | FIPSEndpointStateEnabled
constant FIPSEndpointStateDisabled (line 43) | FIPSEndpointStateDisabled
type Options (line 48) | type Options struct
method getEndpointVariant (line 117) | func (o Options) getEndpointVariant(service string) (v endpointVariant) {
method Set (line 255) | func (o *Options) Set(optFns ...func(*Options)) {
type EC2IMDSEndpointModeState (line 132) | type EC2IMDSEndpointModeState
method SetFromString (line 142) | func (e *EC2IMDSEndpointModeState) SetFromString(v string) error {
constant EC2IMDSEndpointModeStateUnset (line 136) | EC2IMDSEndpointModeStateUnset EC2IMDSEndpointModeState = iota
constant EC2IMDSEndpointModeStateIPv4 (line 137) | EC2IMDSEndpointModeStateIPv4
constant EC2IMDSEndpointModeStateIPv6 (line 138) | EC2IMDSEndpointModeStateIPv6
type STSRegionalEndpoint (line 160) | type STSRegionalEndpoint
method String (line 162) | func (e STSRegionalEndpoint) String() string {
constant UnsetSTSEndpoint (line 178) | UnsetSTSEndpoint STSRegionalEndpoint = iota
constant LegacySTSEndpoint (line 182) | LegacySTSEndpoint
constant RegionalSTSEndpoint (line 186) | RegionalSTSEndpoint
function GetSTSRegionalEndpoint (line 194) | func GetSTSRegionalEndpoint(s string) (STSRegionalEndpoint, error) {
type S3UsEast1RegionalEndpoint (line 207) | type S3UsEast1RegionalEndpoint
method String (line 209) | func (e S3UsEast1RegionalEndpoint) String() string {
constant UnsetS3UsEast1Endpoint (line 226) | UnsetS3UsEast1Endpoint S3UsEast1RegionalEndpoint = iota
constant LegacyS3UsEast1Endpoint (line 230) | LegacyS3UsEast1Endpoint
constant RegionalS3UsEast1Endpoint (line 234) | RegionalS3UsEast1Endpoint
function GetS3UsEast1RegionalEndpoint (line 242) | func GetS3UsEast1RegionalEndpoint(s string) (S3UsEast1RegionalEndpoint, ...
function DisableSSLOption (line 263) | func DisableSSLOption(o *Options) {
function UseDualStackOption (line 272) | func UseDualStackOption(o *Options) {
function UseDualStackEndpointOption (line 278) | func UseDualStackEndpointOption(o *Options) {
function UseFIPSEndpointOption (line 284) | func UseFIPSEndpointOption(o *Options) {
function StrictMatchingOption (line 290) | func StrictMatchingOption(o *Options) {
function ResolveUnknownServiceOption (line 296) | func ResolveUnknownServiceOption(o *Options) {
function STSRegionalEndpointOption (line 302) | func STSRegionalEndpointOption(o *Options) {
type Resolver (line 308) | type Resolver interface
type ResolverFunc (line 315) | type ResolverFunc
method EndpointFor (line 318) | func (fn ResolverFunc) EndpointFor(service, region string, opts ...fun...
function AddScheme (line 329) | func AddScheme(endpoint string, disableSSL bool) string {
type EnumPartitions (line 347) | type EnumPartitions interface
function RegionsForService (line 362) | func RegionsForService(ps []Partition, partitionID, serviceID string) (m...
function PartitionForRegion (line 386) | func PartitionForRegion(ps []Partition, regionID string) (Partition, boo...
type Partition (line 398) | type Partition struct
method DNSSuffix (line 404) | func (p Partition) DNSSuffix() string { return p.dnsSuffix }
method ID (line 407) | func (p Partition) ID() string { return p.id }
method EndpointFor (line 430) | func (p Partition) EndpointFor(service, region string, opts ...func(*O...
method Regions (line 436) | func (p Partition) Regions() map[string]Region {
method Services (line 451) | func (p Partition) Services() map[string]Service {
type Region (line 475) | type Region struct
method ID (line 481) | func (r Region) ID() string { return r.id }
method Description (line 485) | func (r Region) Description() string { return r.desc }
method ResolveEndpoint (line 489) | func (r Region) ResolveEndpoint(service string, opts ...func(*Options)...
method Services (line 494) | func (r Region) Services() map[string]Service {
type Service (line 510) | type Service struct
method ID (line 516) | func (s Service) ID() string { return s.id }
method ResolveEndpoint (line 520) | func (s Service) ResolveEndpoint(region string, opts ...func(*Options)...
method Regions (line 528) | func (s Service) Regions() map[string]Region {
method Endpoints (line 562) | func (s Service) Endpoints() map[string]Endpoint {
type Endpoint (line 581) | type Endpoint struct
method ID (line 588) | func (e Endpoint) ID() string { return e.id }
method ServiceID (line 591) | func (e Endpoint) ServiceID() string { return e.serviceID }
method ResolveEndpoint (line 596) | func (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEnd...
type ResolvedEndpoint (line 602) | type ResolvedEndpoint struct
type awsError (line 625) | type awsError
type EndpointNotFoundError (line 629) | type EndpointNotFoundError struct
type UnknownServiceError (line 639) | type UnknownServiceError struct
method Error (line 658) | func (e UnknownServiceError) Error() string {
method String (line 668) | func (e UnknownServiceError) String() string {
function NewUnknownServiceError (line 647) | func NewUnknownServiceError(p, s string, known []string) UnknownServiceE...
type UnknownEndpointError (line 675) | type UnknownEndpointError struct
method Error (line 696) | func (e UnknownEndpointError) Error() string {
method String (line 706) | func (e UnknownEndpointError) String() string {
function NewUnknownEndpointError (line 684) | func NewUnknownEndpointError(p, s, r string, known []string) UnknownEndp...
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go
constant ec2MetadataEndpointIPv6 (line 12) | ec2MetadataEndpointIPv6 = "http://[fd00:ec2::254]/latest"
constant ec2MetadataEndpointIPv4 (line 13) | ec2MetadataEndpointIPv4 = "http://169.254.169.254/latest"
constant dnsSuffixTemplateKey (line 16) | dnsSuffixTemplateKey = "{dnsSuffix}"
type defaultKey (line 19) | type defaultKey struct
type endpointKey (line 25) | type endpointKey struct
type endpointVariant (line 31) | type endpointVariant
type serviceVariant (line 34) | type serviceVariant
constant fipsVariant (line 38) | fipsVariant endpointVariant = 1 << (64 - 1 - iota)
constant dualStackVariant (line 41) | dualStackVariant
type partitions (line 46) | type partitions
method EndpointFor (line 48) | func (ps partitions) EndpointFor(service, region string, opts ...func(...
method Partitions (line 76) | func (ps partitions) Partitions() []Partition {
type endpointWithVariants (line 85) | type endpointWithVariants struct
type endpointWithTags (line 90) | type endpointWithTags struct
type endpointDefaults (line 95) | type endpointDefaults
method UnmarshalJSON (line 97) | func (p *endpointDefaults) UnmarshalJSON(data []byte) error {
function parseVariantTags (line 128) | func parseVariantTags(tags []string) (ev endpointVariant, unknown bool) {
type partition (line 147) | type partition struct
method Partition (line 157) | func (p partition) Partition() Partition {
method canResolveEndpoint (line 165) | func (p partition) canResolveEndpoint(service, region string, options ...
method EndpointFor (line 203) | func (p partition) EndpointFor(service, region string, opts ...func(*O...
function allowLegacyEmptyRegion (line 183) | func allowLegacyEmptyRegion(service string) bool {
function getEC2MetadataEndpoint (line 268) | func getEC2MetadataEndpoint(partitionID, service string, mode EC2IMDSEnd...
function isLegacyGlobalRegion (line 293) | func isLegacyGlobalRegion(service string, region string, opt Options) (s...
function serviceList (line 318) | func serviceList(ss services) []string {
function endpointList (line 325) | func endpointList(es serviceEndpoints, variant endpointVariant) []string {
type regionRegex (line 336) | type regionRegex struct
method UnmarshalJSON (line 340) | func (rr *regionRegex) UnmarshalJSON(b []byte) (err error) {
type regions (line 354) | type regions
type region (line 356) | type region struct
type services (line 360) | type services
type service (line 362) | type service struct
method endpointForRegion (line 369) | func (s *service) endpointForRegion(region string, endpoints serviceEn...
type serviceEndpoints (line 383) | type serviceEndpoints
method UnmarshalJSON (line 385) | func (s *serviceEndpoints) UnmarshalJSON(data []byte) error {
type endpoint (line 419) | type endpoint struct
method isZero (line 436) | func (e endpoint) isZero() bool {
method resolve (line 478) | func (e endpoint) resolve(service, partitionID, region, dnsSuffixTempl...
method mergeIn (line 537) | func (e *endpoint) mergeIn(other endpoint) {
constant defaultProtocol (line 453) | defaultProtocol = "https"
constant defaultSigner (line 454) | defaultSigner = "v4"
function getByPriority (line 462) | func getByPriority(s []string, p []string, def string) string {
function getEndpointScheme (line 529) | func getEndpointScheme(protocols []string, disableSSL bool) string {
type credentialScope (line 564) | type credentialScope struct
type boxedBool (line 569) | type boxedBool
method UnmarshalJSON (line 571) | func (b *boxedBool) UnmarshalJSON(buf []byte) error {
constant boxedBoolUnset (line 587) | boxedBoolUnset boxedBool = iota
constant boxedFalse (line 588) | boxedFalse
constant boxedTrue (line 589) | boxedTrue
function validateInputRegion (line 592) | func validateInputRegion(region string) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go
type CodeGenOptions (line 17) | type CodeGenOptions struct
method Set (line 27) | func (d *CodeGenOptions) Set(optFns ...func(*CodeGenOptions)) {
function CodeGenModel (line 36) | func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func...
function toSymbol (line 63) | func toSymbol(v string) string {
function quoteString (line 76) | func quoteString(v string) string {
function regionConstName (line 80) | func regionConstName(p, r string) string {
function partitionGetter (line 84) | func partitionGetter(id string) string {
function partitionVarName (line 88) | func partitionVarName(id string) string {
function listPartitionNames (line 92) | func listPartitionNames(ps partitions) string {
function boxedBoolIfSet (line 111) | func boxedBoolIfSet(msg string, v boxedBool) string {
function stringIfSet (line 122) | func stringIfSet(msg, v string) string {
function stringSliceIfSet (line 130) | func stringSliceIfSet(msg string, vs []string) string {
function endpointIsSet (line 143) | func endpointIsSet(v endpoint) bool {
function serviceSet (line 147) | func serviceSet(ps partitions) map[string]struct{} {
function endpointVariantSetter (line 158) | func endpointVariantSetter(variant endpointVariant) (string, error) {
function endpointKeySetter (line 179) | func endpointKeySetter(e endpointKey) (string, error) {
function defaultKeySetter (line 194) | func defaultKeySetter(e defaultKey) (string, error) {
constant v3Tmpl (line 225) | v3Tmpl = `
FILE: vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go
type JSONValue (line 12) | type JSONValue
FILE: vendor/github.com/aws/aws-sdk-go/aws/logger.go
type LogLevelType (line 10) | type LogLevelType
method Value (line 20) | func (l *LogLevelType) Value() LogLevelType {
method Matches (line 30) | func (l *LogLevelType) Matches(v LogLevelType) bool {
method AtLeast (line 38) | func (l *LogLevelType) AtLeast(v LogLevelType) bool {
function LogLevel (line 14) | func LogLevel(l LogLevelType) *LogLevelType {
constant LogOff (line 46) | LogOff LogLevelType = iota * 0x1000
constant LogDebug (line 50) | LogDebug
constant LogDebugWithSigning (line 58) | LogDebugWithSigning LogLevelType = LogDebug | (1 << iota)
constant LogDebugWithHTTPBody (line 64) | LogDebugWithHTTPBody
constant LogDebugWithRequestRetries (line 69) | LogDebugWithRequestRetries
constant LogDebugWithRequestErrors (line 73) | LogDebugWithRequestErrors
constant LogDebugWithEventStreamBody (line 79) | LogDebugWithEventStreamBody
constant LogDebugWithDeprecated (line 82) | LogDebugWithDeprecated
type Logger (line 87) | type Logger interface
type LoggerFunc (line 98) | type LoggerFunc
method Log (line 101) | func (f LoggerFunc) Log(args ...interface{}) {
function NewDefaultLogger (line 107) | func NewDefaultLogger() Logger {
type defaultLogger (line 114) | type defaultLogger struct
method Log (line 119) | func (l defaultLogger) Log(args ...interface{}) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go
function isErrConnectionReset (line 7) | func isErrConnectionReset(err error) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
type Handlers (line 10) | type Handlers struct
method Copy (line 28) | func (h *Handlers) Copy() Handlers {
method Clear (line 48) | func (h *Handlers) Clear() {
method IsEmpty (line 66) | func (h *Handlers) IsEmpty() bool {
type HandlerListRunItem (line 115) | type HandlerListRunItem struct
type HandlerList (line 122) | type HandlerList struct
method copy (line 144) | func (l *HandlerList) copy() HandlerList {
method Clear (line 157) | func (l *HandlerList) Clear() {
method Len (line 162) | func (l *HandlerList) Len() int {
method PushBack (line 167) | func (l *HandlerList) PushBack(f func(*Request)) {
method PushBackNamed (line 172) | func (l *HandlerList) PushBackNamed(n NamedHandler) {
method PushFront (line 180) | func (l *HandlerList) PushFront(f func(*Request)) {
method PushFrontNamed (line 185) | func (l *HandlerList) PushFrontNamed(n NamedHandler) {
method Remove (line 198) | func (l *HandlerList) Remove(n NamedHandler) {
method RemoveByName (line 203) | func (l *HandlerList) RemoveByName(name string) {
method SwapNamed (line 221) | func (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) {
method Swap (line 234) | func (l *HandlerList) Swap(name string, replace NamedHandler) bool {
method SetBackNamed (line 249) | func (l *HandlerList) SetBackNamed(n NamedHandler) {
method SetFrontNamed (line 258) | func (l *HandlerList) SetFrontNamed(n NamedHandler) {
method Run (line 265) | func (l *HandlerList) Run(r *Request) {
type NamedHandler (line 138) | type NamedHandler struct
function HandlerListLogItem (line 280) | func HandlerListLogItem(item HandlerListRunItem) bool {
function HandlerListStopOnError (line 293) | func HandlerListStopOnError(item HandlerListRunItem) bool {
function WithAppendUserAgent (line 299) | func WithAppendUserAgent(s string) Option {
function MakeAddToUserAgentHandler (line 312) | func MakeAddToUserAgentHandler(name, version string, extra ...string) fu...
function MakeAddToUserAgentFreeFormHandler (line 324) | func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {
function WithSetRequestHeaders (line 336) | func WithSetRequestHeaders(h map[string]string) Option {
type withRequestHeader (line 340) | type withRequestHeader
method SetRequestHeaders (line 342) | func (h withRequestHeader) SetRequestHeaders(r *Request) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go
function copyHTTPRequest (line 9) | func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go
type offsetReader (line 12) | type offsetReader struct
method Close (line 31) | func (o *offsetReader) Close() error {
method Read (line 39) | func (o *offsetReader) Read(p []byte) (int, error) {
method Seek (line 51) | func (o *offsetReader) Seek(offset int64, whence int) (int64, error) {
method CloseAndCopy (line 60) | func (o *offsetReader) CloseAndCopy(offset int64) (*offsetReader, erro...
function newOffsetReader (line 18) | func newOffsetReader(buf io.ReadSeeker, offset int64) (*offsetReader, er...
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request.go
constant ErrCodeSerialization (line 23) | ErrCodeSerialization = "SerializationError"
constant ErrCodeRead (line 26) | ErrCodeRead = "ReadError"
constant ErrCodeResponseTimeout (line 30) | ErrCodeResponseTimeout = "ResponseTimeout"
constant ErrCodeInvalidPresignExpire (line 34) | ErrCodeInvalidPresignExpire = "InvalidPresignExpireError"
constant CanceledErrorCode (line 39) | CanceledErrorCode = "RequestCanceled"
constant ErrCodeRequestError (line 43) | ErrCodeRequestError = "RequestError"
type Request (line 47) | type Request struct
method ApplyOptions (line 224) | func (r *Request) ApplyOptions(opts ...Option) {
method Context (line 232) | func (r *Request) Context() aws.Context {
method SetContext (line 255) | func (r *Request) SetContext(ctx aws.Context) {
method WillRetry (line 263) | func (r *Request) WillRetry() bool {
method ParamsFilled (line 277) | func (r *Request) ParamsFilled() bool {
method DataFilled (line 284) | func (r *Request) DataFilled() bool {
method SetBufferBody (line 290) | func (r *Request) SetBufferBody(buf []byte) {
method SetStringBody (line 295) | func (r *Request) SetStringBody(s string) {
method SetReaderBody (line 300) | func (r *Request) SetReaderBody(reader io.ReadSeeker) {
method SetStreamingBody (line 319) | func (r *Request) SetStreamingBody(reader io.ReadCloser) {
method Presign (line 331) | func (r *Request) Presign(expire time.Duration) (string, error) {
method PresignRequest (line 357) | func (r *Request) PresignRequest(expire time.Duration) (string, http.H...
method IsPresigned (line 363) | func (r *Request) IsPresigned() bool {
method Build (line 414) | func (r *Request) Build() error {
method Sign (line 436) | func (r *Request) Sign() error {
method getNextRequestBody (line 449) | func (r *Request) getNextRequestBody() (body io.ReadCloser, err error) {
method GetBody (line 510) | func (r *Request) GetBody() io.ReadSeeker {
method Send (line 527) | func (r *Request) Send() error {
method prepareRetry (line 572) | func (r *Request) prepareRetry() error {
method sendRequest (line 598) | func (r *Request) sendRequest() (sendErr error) {
method copy (line 633) | func (r *Request) copy() *Request {
type Operation (line 99) | type Operation struct
function New (line 118) | func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
type Option (line 176) | type Option
function WithGetResponseHeader (line 190) | func WithGetResponseHeader(key string, val *string) Option {
function WithGetResponseHeaders (line 204) | func WithGetResponseHeaders(headers *http.Header) Option {
function WithLogLevel (line 216) | func WithLogLevel(l aws.LogLevelType) Option {
function fmtAttemptCount (line 270) | func fmtAttemptCount(retryCount, maxRetries int) string {
function getPresignedURL (line 367) | func getPresignedURL(r *Request, expire time.Duration) (string, http.Hea...
constant notRetrying (line 392) | notRetrying = "not retrying"
function debugLogReqError (line 395) | func debugLogReqError(r *Request, stage, retryStr string, err error) {
function AddToUserAgent (line 643) | func AddToUserAgent(r *Request, s string) {
function SanitizeHostForHeader (line 652) | func SanitizeHostForHeader(r *http.Request) {
function getHost (line 661) | func getHost(r *http.Request) string {
function stripPort (line 680) | func stripPort(hostport string) string {
function portOnly (line 695) | func portOnly(hostport string) string {
function isDefaultPort (line 711) | func isDefaultPort(scheme, port string) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go
type noBody (line 14) | type noBody struct
method Read (line 16) | func (noBody) Read([]byte) (int, error) { return 0, io.EOF }
method Close (line 17) | func (noBody) Close() error { return nil }
method WriteTo (line 18) | func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil }
method ResetBody (line 32) | func (r *Request) ResetBody() {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go
method ResetBody (line 27) | func (r *Request) ResetBody() {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go
function setRequestContext (line 12) | func setRequestContext(r *Request, ctx aws.Context) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go
function setRequestContext (line 12) | func setRequestContext(r *Request, ctx aws.Context) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
type Pagination (line 31) | type Pagination struct
method HasNextPage (line 57) | func (p *Pagination) HasNextPage() bool {
method Err (line 70) | func (p *Pagination) Err() error {
method Page (line 77) | func (p *Pagination) Page() interface{} {
method Next (line 89) | func (p *Pagination) Next() bool {
type Paginator (line 127) | type Paginator struct
method nextPageTokens (line 135) | func (r *Request) nextPageTokens() []interface{} {
function logDeprecatedf (line 191) | func logDeprecatedf(logger aws.Logger, flag *int32, msg string) {
method HasNextPage (line 209) | func (r *Request) HasNextPage() bool {
method NextPage (line 220) | func (r *Request) NextPage() *Request {
method EachPage (line 252) | func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (s...
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
type Retryer (line 20) | type Retryer interface
function WithRetryer (line 39) | func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config {
type noOpRetryer (line 56) | type noOpRetryer struct
method MaxRetries (line 60) | func (d noOpRetryer) MaxRetries() int {
method ShouldRetry (line 65) | func (d noOpRetryer) ShouldRetry(_ *Request) bool {
method RetryRules (line 71) | func (d noOpRetryer) RetryRules(_ *Request) time.Duration {
function isCodeThrottle (line 107) | func isCodeThrottle(code string) bool {
function isCodeRetryable (line 112) | func isCodeRetryable(code string) bool {
function isCodeExpiredCreds (line 120) | func isCodeExpiredCreds(code string) bool {
function isNestedErrorRetryable (line 130) | func isNestedErrorRetryable(parentErr awserr.Error) bool {
function IsErrorRetryable (line 157) | func IsErrorRetryable(err error) bool {
type temporary (line 164) | type temporary interface
function shouldRetryError (line 168) | func shouldRetryError(origErr error) bool {
function IsErrorThrottle (line 230) | func IsErrorThrottle(err error) bool {
function IsErrorExpiredCreds (line 239) | func IsErrorExpiredCreds(err error) bool {
method IsErrorRetryable (line 250) | func (r *Request) IsErrorRetryable() bool {
method IsErrorThrottle (line 272) | func (r *Request) IsErrorThrottle() bool {
function isErrCode (line 291) | func isErrCode(err error, codes []string) bool {
method IsErrorExpired (line 307) | func (r *Request) IsErrorExpired() bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go
type readResult (line 16) | type readResult struct
type timeoutReadCloser (line 23) | type timeoutReadCloser struct
method Read (line 31) | func (r *timeoutReadCloser) Read(b []byte) (int, error) {
method Close (line 49) | func (r *timeoutReadCloser) Close() error {
constant HandlerResponseTimeout (line 56) | HandlerResponseTimeout = "ResponseTimeoutHandler"
function adaptToResponseTimeoutError (line 61) | func adaptToResponseTimeoutError(req *Request) {
function WithResponseReadTimeout (line 75) | func WithResponseReadTimeout(duration time.Duration) Option {
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
constant InvalidParameterErrCode (line 12) | InvalidParameterErrCode = "InvalidParameter"
constant ParamRequiredErrCode (line 14) | ParamRequiredErrCode = "ParamRequiredError"
constant ParamMinValueErrCode (line 17) | ParamMinValueErrCode = "ParamMinValueError"
constant ParamMinLenErrCode (line 19) | ParamMinLenErrCode = "ParamMinLenError"
constant ParamMaxLenErrCode (line 21) | ParamMaxLenErrCode = "ParamMaxLenError"
constant ParamFormatErrCode (line 25) | ParamFormatErrCode = "ParamFormatInvalidError"
type Validator (line 31) | type Validator interface
type ErrInvalidParams (line 37) | type ErrInvalidParams struct
method Add (line 46) | func (e *ErrInvalidParams) Add(err ErrInvalidParam) {
method AddNested (line 56) | func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInval...
method Len (line 65) | func (e ErrInvalidParams) Len() int {
method Code (line 70) | func (e ErrInvalidParams) Code() string {
method Message (line 75) | func (e ErrInvalidParams) Message() string {
method Error (line 80) | func (e ErrInvalidParams) Error() string {
method OrigErr (line 92) | func (e ErrInvalidParams) OrigErr() error {
method OrigErrs (line 98) | func (e ErrInvalidParams) OrigErrs() []error {
type ErrInvalidParam (line 108) | type ErrInvalidParam interface
type errInvalidParam (line 121) | type errInvalidParam struct
method Code (line 130) | func (e *errInvalidParam) Code() string {
method Message (line 135) | func (e *errInvalidParam) Message() string {
method Error (line 140) | func (e *errInvalidParam) Error() string {
method OrigErr (line 145) | func (e *errInvalidParam) OrigErr() error {
method Field (line 150) | func (e *errInvalidParam) Field() string {
method SetContext (line 164) | func (e *errInvalidParam) SetContext(ctx string) {
method AddNestedContext (line 169) | func (e *errInvalidParam) AddNestedContext(ctx string) {
type ErrParamRequired (line 179) | type ErrParamRequired struct
function NewErrParamRequired (line 184) | func NewErrParamRequired(field string) *ErrParamRequired {
type ErrParamMinValue (line 195) | type ErrParamMinValue struct
method MinValue (line 215) | func (e *ErrParamMinValue) MinValue() float64 {
function NewErrParamMinValue (line 201) | func NewErrParamMinValue(field string, min float64) *ErrParamMinValue {
type ErrParamMinLen (line 220) | type ErrParamMinLen struct
method MinLen (line 238) | func (e *ErrParamMinLen) MinLen() int {
function NewErrParamMinLen (line 226) | func NewErrParamMinLen(field string, min int) *ErrParamMinLen {
type ErrParamMaxLen (line 243) | type ErrParamMaxLen struct
method MaxLen (line 261) | func (e *ErrParamMaxLen) MaxLen() int {
function NewErrParamMaxLen (line 249) | func NewErrParamMaxLen(field string, max int, value string) *ErrParamMax...
type ErrParamFormat (line 266) | type ErrParamFormat struct
method Format (line 284) | func (e *ErrParamFormat) Format() string {
function NewErrParamFormat (line 272) | func NewErrParamFormat(field string, format, value string) *ErrParamForm...
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go
constant WaiterResourceNotReadyErrorCode (line 14) | WaiterResourceNotReadyErrorCode = "ResourceNotReady"
type WaiterOption (line 18) | type WaiterOption
function WithWaiterMaxAttempts (line 22) | func WithWaiterMaxAttempts(max int) WaiterOption {
type WaiterDelay (line 34) | type WaiterDelay
function ConstantWaiterDelay (line 39) | func ConstantWaiterDelay(delay time.Duration) WaiterDelay {
function WithWaiterDelay (line 46) | func WithWaiterDelay(delayer WaiterDelay) WaiterOption {
function WithWaiterLogger (line 54) | func WithWaiterLogger(logger aws.Logger) WaiterOption {
function WithWaiterRequestOptions (line 63) | func WithWaiterRequestOptions(opts ...Option) WaiterOption {
type Waiter (line 74) | type Waiter struct
method ApplyOptions (line 88) | func (w *Waiter) ApplyOptions(opts ...WaiterOption) {
method WaitWithContext (line 169) | func (w Waiter) WaitWithContext(ctx aws.Context) error {
type WaiterState (line 96) | type WaiterState
method String (line 99) | func (s WaiterState) String() string {
constant SuccessWaiterState (line 114) | SuccessWaiterState WaiterState = iota
constant FailureWaiterState (line 115) | FailureWaiterState
constant RetryWaiterState (line 116) | RetryWaiterState
type WaiterMatchMode (line 121) | type WaiterMatchMode
method String (line 135) | func (m WaiterMatchMode) String() string {
constant PathAllWaiterMatch (line 126) | PathAllWaiterMatch WaiterMatchMode = iota
constant PathWaiterMatch (line 127) | PathWaiterMatch
constant PathAnyWaiterMatch (line 128) | PathAnyWaiterMatch
constant PathListWaiterMatch (line 129) | PathListWaiterMatch
constant StatusWaiterMatch (line 130) | StatusWaiterMatch
constant ErrorWaiterMatch (line 131) | ErrorWaiterMatch
type WaiterAcceptor (line 216) | type WaiterAcceptor struct
method match (line 226) | func (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request...
function waiterLogf (line 291) | func waiterLogf(logger aws.Logger, msg string, args ...interface{}) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go
type CredentialsProviderOptions (line 23) | type CredentialsProviderOptions struct
function resolveCredentials (line 33) | func resolveCredentials(cfg *aws.Config,
function assumeWebIdentity (line 74) | func assumeWebIdentity(cfg *aws.Config, handlers request.Handlers,
function resolveCredsFromProfile (line 102) | func resolveCredsFromProfile(cfg *aws.Config,
function resolveSSOCredentials (line 180) | func resolveSSOCredentials(cfg *aws.Config, sharedCfg sharedConfig, hand...
constant credSourceEc2Metadata (line 222) | credSourceEc2Metadata = "Ec2InstanceMetadata"
constant credSourceEnvironment (line 223) | credSourceEnvironment = "Environment"
constant credSourceECSContainer (line 224) | credSourceECSContainer = "EcsContainer"
function resolveCredsFromSource (line 227) | func resolveCredsFromSource(cfg *aws.Config,
function credsFromAssumeRole (line 256) | func credsFromAssumeRole(cfg aws.Config,
type AssumeRoleTokenProviderNotSetError (line 302) | type AssumeRoleTokenProviderNotSetError struct
method Code (line 305) | func (e AssumeRoleTokenProviderNotSetError) Code() string {
method Message (line 310) | func (e AssumeRoleTokenProviderNotSetError) Message() string {
method OrigErr (line 315) | func (e AssumeRoleTokenProviderNotSetError) OrigErr() error {
method Error (line 320) | func (e AssumeRoleTokenProviderNotSetError) Error() string {
type credProviderError (line 324) | type credProviderError struct
method Retrieve (line 328) | func (c credProviderError) Retrieve() (credentials.Value, error) {
method IsExpired (line 331) | func (c credProviderError) IsExpired() bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport.go
function getCustomTransport (line 14) | func getCustomTransport() *http.Transport {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.12.go
function getCustomTransport (line 14) | func getCustomTransport() *http.Transport {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.5.go
function getCustomTransport (line 14) | func getCustomTransport() *http.Transport {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.6.go
function getCustomTransport (line 14) | func getCustomTransport() *http.Transport {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
constant EnvProviderName (line 16) | EnvProviderName = "EnvConfigCredentials"
type envConfig (line 22) | type envConfig struct
function loadEnvConfig (line 286) | func loadEnvConfig() (envConfig, error) {
function loadSharedEnvConfig (line 297) | func loadSharedEnvConfig() (envConfig, error) {
function envConfigLoad (line 301) | func envConfigLoad(enableSharedConfig bool) (envConfig, error) {
function setFromEnvVal (line 418) | func setFromEnvVal(dst *string, keys []string) {
function setBoolPtrFromEnvVal (line 427) | func setBoolPtrFromEnvVal(dst **bool, keys []string) {
function setEC2IMDSEndpointMode (line 445) | func setEC2IMDSEndpointMode(mode *endpoints.EC2IMDSEndpointModeState, ke...
function setUseDualStackEndpointFromEnvVal (line 459) | func setUseDualStackEndpointFromEnvVal(dst *endpoints.DualStackEndpointS...
function setUseFIPSEndpointFromEnvVal (line 480) | func setUseFIPSEndpointFromEnvVal(dst *endpoints.FIPSEndpointState, keys...
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/session.go
constant ErrCodeSharedConfig (line 28) | ErrCodeSharedConfig = "SharedConfigErr"
constant ErrCodeLoadCustomCABundle (line 31) | ErrCodeLoadCustomCABundle = "LoadCustomCABundleError"
constant ErrCodeLoadClientTLSCert (line 35) | ErrCodeLoadClientTLSCert = "LoadClientTLSCertError"
type Session (line 56) | type Session struct
method Copy (line 858) | func (s *Session) Copy(cfgs ...*aws.Config) *Session {
method ClientConfig (line 873) | func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) cl...
method resolveEndpoint (line 906) | func (s *Session) resolveEndpoint(service, region, resolvedRegion stri...
method ClientConfigNoResolveEndpoint (line 954) | func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) c...
method logDeprecatedNewSessionError (line 977) | func (s *Session) logDeprecatedNewSessionError(msg string, err error, ...
function New (line 84) | func New(cfgs ...*aws.Config) *Session {
function NewSession (line 148) | func NewSession(cfgs ...*aws.Config) (*Session, error) {
type SharedConfigState (line 158) | type SharedConfigState
constant SharedConfigStateFromEnv (line 164) | SharedConfigStateFromEnv SharedConfigState = iota
constant SharedConfigDisable (line 168) | SharedConfigDisable
constant SharedConfigEnable (line 172) | SharedConfigEnable
type Options (line 177) | type Options struct
function NewSessionWithOptions (line 342) | func NewSessionWithOptions(opts Options) (*Session, error) {
function Must (line 378) | func Must(sess *Session, err error) *Session {
function wrapEC2IMDSEndpoint (line 388) | func wrapEC2IMDSEndpoint(resolver endpoints.Resolver, endpoint string, m...
function deprecatedNewSession (line 408) | func deprecatedNewSession(envCfg envConfig, cfgs ...*aws.Config) *Session {
function enableCSM (line 442) | func enableCSM(handlers *request.Handlers, cfg csmConfig, logger aws.Log...
function newSession (line 456) | func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*S...
type csmConfig (line 528) | type csmConfig struct
function loadCSMConfig (line 537) | func loadCSMConfig(envCfg envConfig, cfgFiles []string) (csmConfig, erro...
function setTLSOptions (line 568) | func setTLSOptions(opts *Options, cfg *aws.Config, envCfg envConfig, sha...
function getHTTPTransport (line 620) | func getHTTPTransport(client *http.Client) (*http.Transport, error) {
function loadCustomCABundle (line 640) | func loadCustomCABundle(client *http.Client, bundle io.Reader) error {
function loadCertPool (line 661) | func loadCertPool(r io.Reader) (*x509.CertPool, error) {
function loadClientTLSCert (line 677) | func loadClientTLSCert(client *http.Client, certFile, keyFile io.Reader)...
function mergeConfigSrcs (line 715) | func mergeConfigSrcs(cfg, userCfg *aws.Config,
function mergeSTSRegionalEndpointConfig (line 826) | func mergeSTSRegionalEndpointConfig(cfg *aws.Config, values []endpoints....
function mergeS3UsEast1RegionalEndpointConfig (line 835) | func mergeS3UsEast1RegionalEndpointConfig(cfg *aws.Config, values []endp...
function initHandlers (line 844) | func initHandlers(s *Session) {
constant ec2MetadataServiceID (line 904) | ec2MetadataServiceID = "ec2metadata"
function normalizeRegion (line 989) | func normalizeRegion(cfg *aws.Config) (resolved string) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
constant accessKeyIDKey (line 16) | accessKeyIDKey = `aws_access_key_id`
constant secretAccessKey (line 17) | secretAccessKey = `aws_secret_access_key`
constant sessionTokenKey (line 18) | sessionTokenKey = `aws_session_token`
constant roleArnKey (line 21) | roleArnKey = `role_arn`
constant sourceProfileKey (line 22) | sourceProfileKey = `source_profile`
constant credentialSourceKey (line 23) | credentialSourceKey = `credential_source`
constant externalIDKey (line 24) | externalIDKey = `external_id`
constant mfaSerialKey (line 25) | mfaSerialKey = `mfa_serial`
constant roleSessionNameKey (line 26) | roleSessionNameKey = `role_session_name`
constant roleDurationSecondsKey (line 27) | roleDurationSecondsKey = "duration_seconds"
constant ssoSectionPrefix (line 31) | ssoSectionPrefix = `sso-session `
constant ssoSessionNameKey (line 34) | ssoSessionNameKey = "sso_session"
constant ssoAccountIDKey (line 37) | ssoAccountIDKey = "sso_account_id"
constant ssoRegionKey (line 38) | ssoRegionKey = "sso_region"
constant ssoRoleNameKey (line 39) | ssoRoleNameKey = "sso_role_name"
constant ssoStartURL (line 40) | ssoStartURL = "sso_start_url"
constant csmEnabledKey (line 43) | csmEnabledKey = `csm_enabled`
constant csmHostKey (line 44) | csmHostKey = `csm_host`
constant csmPortKey (line 45) | csmPortKey = `csm_port`
constant csmClientIDKey (line 46) | csmClientIDKey = `csm_client_id`
constant regionKey (line 49) | regionKey = `region`
constant customCABundleKey (line 52) | customCABundleKey = `ca_bundle`
constant enableEndpointDiscoveryKey (line 55) | enableEndpointDiscoveryKey = `endpoint_discovery_enabled`
constant credentialProcessKey (line 58) | credentialProcessKey = `credential_process`
constant webIdentityTokenFileKey (line 61) | webIdentityTokenFileKey = `web_identity_token_file`
constant stsRegionalEndpointSharedKey (line 64) | stsRegionalEndpointSharedKey = `sts_regional_endpoints`
constant s3UsEast1RegionalSharedKey (line 67) | s3UsEast1RegionalSharedKey = `s3_us_east_1_regional_endpoint`
constant DefaultSharedConfigProfile (line 72) | DefaultSharedConfigProfile = `default`
constant s3UseARNRegionKey (line 75) | s3UseARNRegionKey = "s3_use_arn_region"
constant ec2MetadataServiceEndpointModeKey (line 78) | ec2MetadataServiceEndpointModeKey = "ec2_metadata_service_endpoint_mode"
constant ec2MetadataServiceEndpointKey (line 81) | ec2MetadataServiceEndpointKey = "ec2_metadata_service_endpoint"
constant ec2MetadataV1DisabledKey (line 84) | ec2MetadataV1DisabledKey = "ec2_metadata_v1_disabled"
constant useDualStackEndpoint (line 87) | useDualStackEndpoint = "use_dualstack_endpoint"
constant useFIPSEndpointKey (line 90) | useFIPSEndpointKey = "use_fips_endpoint"
type sharedConfig (line 94) | type sharedConfig struct
method setFromIniFiles (line 273) | func (cfg *sharedConfig) setFromIniFiles(profiles map[string]struct{},...
method setFromIniFile (line 380) | func (cfg *sharedConfig) setFromIniFile(profile string, file sharedCon...
method validateCredentialsConfig (line 489) | func (cfg *sharedConfig) validateCredentialsConfig(profile string) err...
method validateCredentialsRequireARN (line 497) | func (cfg *sharedConfig) validateCredentialsRequireARN(profile string)...
method validateCredentialType (line 519) | func (cfg *sharedConfig) validateCredentialType() error {
method validateSSOConfiguration (line 533) | func (cfg *sharedConfig) validateSSOConfiguration() error {
method hasCredentials (line 551) | func (cfg *sharedConfig) hasCredentials() bool {
method clearCredentialOptions (line 566) | func (cfg *sharedConfig) clearCredentialOptions() {
method clearAssumeRoleOptions (line 577) | func (cfg *sharedConfig) clearAssumeRoleOptions() {
method hasSSOConfiguration (line 585) | func (cfg *sharedConfig) hasSSOConfiguration() bool {
method hasSSOTokenProviderConfiguration (line 589) | func (c *sharedConfig) hasSSOTokenProviderConfiguration() bool {
method hasLegacySSOConfiguration (line 593) | func (c *sharedConfig) hasLegacySSOConfiguration() bool {
method validateSSOTokenProviderConfiguration (line 597) | func (c *sharedConfig) validateSSOTokenProviderConfiguration() error {
method validateLegacySSOConfiguration (line 632) | func (c *sharedConfig) validateLegacySSOConfiguration() error {
type sharedConfigFile (line 204) | type sharedConfigFile struct
type ssoSession (line 211) | type ssoSession struct
method setFromIniSection (line 217) | func (s *ssoSession) setFromIniSection(section ini.Section) {
function loadSharedConfig (line 234) | func loadSharedConfig(profile string, filenames []string, exOpts bool) (...
function loadSharedConfigIniFiles (line 253) | func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, e...
function updateEC2MetadataServiceEndpointMode (line 481) | func updateEC2MetadataServiceEndpointMode(endpointMode *endpoints.EC2IMD...
function oneOrNone (line 658) | func oneOrNone(bs ...bool) bool {
function updateString (line 675) | func updateString(dst *string, section ini.Section, key string) {
function updateBool (line 684) | func updateBool(dst *bool, section ini.Section, key string) {
function updateBoolPtr (line 696) | func updateBoolPtr(dst **bool, section ini.Section, key string) {
type SharedConfigLoadError (line 708) | type SharedConfigLoadError struct
method Code (line 714) | func (e SharedConfigLoadError) Code() string {
method Message (line 719) | func (e SharedConfigLoadError) Message() string {
method OrigErr (line 724) | func (e SharedConfigLoadError) OrigErr() error {
method Error (line 729) | func (e SharedConfigLoadError) Error() string {
type SharedConfigProfileNotExistsError (line 735) | type SharedConfigProfileNotExistsError struct
method Code (line 741) | func (e SharedConfigProfileNotExistsError) Code() string {
method Message (line 746) | func (e SharedConfigProfileNotExistsError) Message() string {
method OrigErr (line 751) | func (e SharedConfigProfileNotExistsError) OrigErr() error {
method Error (line 756) | func (e SharedConfigProfileNotExistsError) Error() string {
type SharedConfigAssumeRoleError (line 763) | type SharedConfigAssumeRoleError struct
method Code (line 769) | func (e SharedConfigAssumeRoleError) Code() string {
method Message (line 774) | func (e SharedConfigAssumeRoleError) Message() string {
method OrigErr (line 782) | func (e SharedConfigAssumeRoleError) OrigErr() error {
method Error (line 787) | func (e SharedConfigAssumeRoleError) Error() string {
type CredentialRequiresARNError (line 793) | type CredentialRequiresARNError struct
method Code (line 802) | func (e CredentialRequiresARNError) Code() string {
method Message (line 807) | func (e CredentialRequiresARNError) Message() string {
method OrigErr (line 815) | func (e CredentialRequiresARNError) OrigErr() error {
method Error (line 820) | func (e CredentialRequiresARNError) Error() string {
function updateUseDualStackEndpoint (line 826) | func updateUseDualStackEndpoint(dst *endpoints.DualStackEndpointState, s...
function updateUseFIPSEndpoint (line 843) | func updateUseFIPSEndpoint(dst *endpoints.FIPSEndpointState, section ini...
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go
type rules (line 9) | type rules
method IsValid (line 19) | func (r rules) IsValid(value string) bool {
type rule (line 13) | type rule interface
type mapRule (line 29) | type mapRule
method IsValid (line 32) | func (m mapRule) IsValid(value string) bool {
type allowList (line 38) | type allowList struct
method IsValid (line 43) | func (w allowList) IsValid(value string) bool {
type excludeList (line 48) | type excludeList struct
method IsValid (line 53) | func (b excludeList) IsValid(value string) bool {
type patterns (line 57) | type patterns
method IsValid (line 61) | func (p patterns) IsValid(value string) bool {
type inclusiveRules (line 71) | type inclusiveRules
method IsValid (line 74) | func (r inclusiveRules) IsValid(value string) bool {
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go
function WithUnsignedPayload (line 5) | func WithUnsignedPayload(v4 *Signer) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/request_context_go1.5.go
function requestContext (line 12) | func requestContext(r *http.Request) aws.Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/request_context_go1.7.go
function requestContext (line 12) | func requestContext(r *http.Request) aws.Context {
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/stream.go
type credentialValueProvider (line 11) | type credentialValueProvider interface
type StreamSigner (line 16) | type StreamSigner struct
method GetSignature (line 36) | func (s *StreamSigner) GetSignature(headers, payload []byte, date time...
function NewStreamSigner (line 26) | func NewStreamSigner(region, service string, seedSignature []byte, crede...
function buildEventStreamStringToSign (line 54) | func buildEventStreamStringToSign(headers, payload, prevSig []byte, scop...
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go
function getURIPath (line 11) | func getURIPath(u *url.URL) string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
constant authorizationHeader (line 79) | authorizationHeader = "Authorization"
constant authHeaderSignatureElem (line 80) | authHeaderSignatureElem = "Signature="
constant signatureQueryKey (line 81) | signatureQueryKey = "X-Amz-Signature"
constant authHeaderPrefix (line 83) | authHeaderPrefix = "AWS4-HMAC-SHA256"
constant timeFormat (line 84) | timeFormat = "20060102T150405Z"
constant shortTimeFormat (line 85) | shortTimeFormat = "20060102"
constant awsV4Request (line 86) | awsV4Request = "aws4_request"
constant emptyStringSHA256 (line 89) | emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca49...
type Signer (line 162) | type Signer struct
method Sign (line 279) | func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, re...
method Presign (line 313) | func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service,...
method signWithBody (line 317) | func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, ser...
method logSigningInfo (line 507) | func (v4 *Signer) logSigningInfo(ctx *signingCtx) {
function NewSigner (line 216) | func NewSigner(credentials *credentials.Credentials, options ...func(*Si...
type signingCtx (line 228) | type signingCtx struct
method sanitizeHostForHeader (line 378) | func (ctx *signingCtx) sanitizeHostForHeader() {
method handlePresignRemoval (line 382) | func (ctx *signingCtx) handlePresignRemoval() {
method assignAmzQueryValues (line 396) | func (ctx *signingCtx) assignAmzQueryValues() {
method build (line 516) | func (ctx *signingCtx) build(disableHeaderHoisting bool) error {
method buildTime (line 579) | func (ctx *signingCtx) buildTime() {
method buildCredentialString (line 589) | func (ctx *signingCtx) buildCredentialString() {
method buildCanonicalHeaders (line 610) | func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Heade...
method buildCanonicalString (line 660) | func (ctx *signingCtx) buildCanonicalString() {
method buildStringToSign (line 679) | func (ctx *signingCtx) buildStringToSign() {
method buildSignature (line 688) | func (ctx *signingCtx) buildSignature() {
method buildBodyDigest (line 694) | func (ctx *signingCtx) buildBodyDigest() error {
method isRequestSigned (line 733) | func (ctx *signingCtx) isRequestSigned() bool {
method removePresign (line 745) | func (ctx *signingCtx) removePresign() {
function SignSDKRequest (line 430) | func SignSDKRequest(req *request.Request) {
function BuildNamedHandler (line 435) | func BuildNamedHandler(name string, opts ...func(*Signer)) request.Named...
function SignSDKRequestWithCurrentTime (line 447) | func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func(...
constant logSignInfoMsg (line 497) | logSignInfoMsg = `DEBUG: Request Signature:
constant logSignedURLMsg (line 503) | logSignedURLMsg = `
function GetSignedRequestSignature (line 557) | func GetSignedRequestSignature(r *http.Request) ([]byte, error) {
function buildQuery (line 597) | func buildQuery(r rule, header http.Header) (url.Values, http.Header) {
function hmacSHA256 (line 755) | func hmacSHA256(key []byte, data []byte) []byte {
function hashSHA256 (line 761) | func hashSHA256(data []byte) []byte {
function makeSha256Reader (line 767) | func makeSha256Reader(reader io.ReadSeeker) (hashBytes []byte, err error) {
constant doubleSpace (line 790) | doubleSpace = " "
function stripExcessSpaces (line 794) | func stripExcessSpaces(vals []string) {
function buildSigningScope (line 834) | func buildSigningScope(region, service string, dt time.Time) string {
function deriveSigningKey (line 843) | func deriveSigningKey(region, service, secretKey string, dt time.Time) [...
function formatShortTime (line 851) | func formatShortTime(dt time.Time) string {
function formatTime (line 855) | func formatTime(dt time.Time) string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/types.go
function ReadSeekCloser (line 23) | func ReadSeekCloser(r io.Reader) ReaderSeekerCloser {
type ReaderSeekerCloser (line 29) | type ReaderSeekerCloser struct
method Read (line 56) | func (r ReaderSeekerCloser) Read(p []byte) (int, error) {
method Seek (line 70) | func (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, err...
method IsSeeker (line 79) | func (r ReaderSeekerCloser) IsSeeker() bool {
method HasLen (line 86) | func (r ReaderSeekerCloser) HasLen() (int, bool) {
method GetLen (line 103) | func (r ReaderSeekerCloser) GetLen() (int64, error) {
method Close (line 152) | func (r ReaderSeekerCloser) Close() error {
function IsReaderSeekable (line 36) | func IsReaderSeekable(r io.Reader) bool {
function SeekerLen (line 117) | func SeekerLen(s io.Seeker) (int64, error) {
function seekerLen (line 130) | func seekerLen(s io.Seeker) (int64, error) {
type WriteAtBuffer (line 163) | type WriteAtBuffer struct
method WriteAt (line 183) | func (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) {
method Bytes (line 204) | func (b *WriteAtBuffer) Bytes() []byte {
function NewWriteAtBuffer (line 176) | func NewWriteAtBuffer(buf []byte) *WriteAtBuffer {
type MultiCloser (line 212) | type MultiCloser
method Close (line 217) | func (m MultiCloser) Close() error {
type errors (line 232) | type errors
method Error (line 234) | func (es errors) Error() string {
function CopySeekableBody (line 244) | func CopySeekableBody(dst io.Writer, src io.ReadSeeker) (int64, error) {
FILE: vendor/github.com/aws/aws-sdk-go/aws/url.go
function URLHostname (line 11) | func URLHostname(url *url.URL) string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go
function URLHostname (line 14) | func URLHostname(url *url.URL) string {
function stripPort (line 21) | func stripPort(hostport string) string {
FILE: vendor/github.com/aws/aws-sdk-go/aws/version.go
constant SDKName (line 5) | SDKName = "aws-sdk-go"
constant SDKVersion (line 8) | SDKVersion = "1.48.16"
FILE: vendor/github.com/aws/aws-sdk-go/internal/context/background_go1.5.go
type emptyCtx (line 14) | type emptyCtx
method Deadline (line 16) | func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
method Done (line 20) | func (*emptyCtx) Done() <-chan struct{} {
method Err (line 24) | func (*emptyCtx) Err() error {
method Value (line 28) | func (*emptyCtx) Value(key interface{}) interface{} {
method String (line 32) | func (e *emptyCtx) String() string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go
type ASTKind (line 5) | type ASTKind
method String (line 24) | func (k ASTKind) String() string {
constant ASTKindNone (line 10) | ASTKindNone = ASTKind(iota)
constant ASTKindStart (line 11) | ASTKindStart
constant ASTKindExpr (line 12) | ASTKindExpr
constant ASTKindEqualExpr (line 13) | ASTKindEqualExpr
constant ASTKindStatement (line 14) | ASTKindStatement
constant ASTKindSkipStatement (line 15) | ASTKindSkipStatement
constant ASTKindExprStatement (line 16) | ASTKindExprStatement
constant ASTKindSectionStatement (line 17) | ASTKindSectionStatement
constant ASTKindNestedSectionStatement (line 18) | ASTKindNestedSectionStatement
constant ASTKindCompletedNestedSectionStatement (line 19) | ASTKindCompletedNestedSectionStatement
constant ASTKindCommentStatement (line 20) | ASTKindCommentStatement
constant ASTKindCompletedSectionStatement (line 21) | ASTKindCompletedSectionStatement
type AST (line 55) | type AST struct
method AppendChild (line 79) | func (a *AST) AppendChild(child AST) {
method GetRoot (line 85) | func (a *AST) GetRoot() AST {
method GetChildren (line 98) | func (a *AST) GetChildren() []AST {
method SetChildren (line 111) | func (a *AST) SetChildren(children []AST) {
function newAST (line 62) | func newAST(kind ASTKind, root AST, children ...AST) AST {
function newASTWithRootToken (line 69) | func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go
function isComma (line 5) | func isComma(b rune) bool {
function newCommaToken (line 9) | func newCommaToken() Token {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go
function isComment (line 5) | func isComment(b []rune) bool {
function newCommentToken (line 22) | func newCommentToken(b []rune) (Token, int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go
function newExpression (line 8) | func newExpression(tok Token) AST {
function newEqualExpr (line 12) | func newEqualExpr(left AST, tok Token) AST {
function EqualExprKey (line 17) | func EqualExprKey(ast AST) string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go
function Fuzz (line 10) | func Fuzz(data []byte) int {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go
function OpenFile (line 12) | func OpenFile(path string) (Sections, error) {
function Parse (line 24) | func Parse(f io.Reader) (Sections, error) {
function ParseBytes (line 39) | func ParseBytes(b []byte) (Sections, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go
constant ErrCodeUnableToReadFile (line 14) | ErrCodeUnableToReadFile = "FailedRead"
type TokenType (line 18) | type TokenType
method String (line 20) | func (t TokenType) String() string {
constant TokenNone (line 45) | TokenNone = TokenType(iota)
constant TokenLit (line 46) | TokenLit
constant TokenSep (line 47) | TokenSep
constant TokenComma (line 48) | TokenComma
constant TokenOp (line 49) | TokenOp
constant TokenWS (line 50) | TokenWS
constant TokenNL (line 51) | TokenNL
constant TokenComment (line 52) | TokenComment
type iniLexer (line 55) | type iniLexer struct
method Tokenize (line 59) | func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) {
method tokenize (line 68) | func (l *iniLexer) tokenize(b []byte) ([]Token, error) {
function countTokens (line 106) | func countTokens(runes []rune) int {
type Token (line 140) | type Token struct
method Raw (line 158) | func (tok Token) Raw() []rune {
method Type (line 163) | func (tok Token) Type() TokenType {
function newToken (line 149) | func newToken(t TokenType, raw []rune, v ValueType) Token {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
type ParseState (line 9) | type ParseState
constant InvalidState (line 13) | InvalidState ParseState = iota
constant StatementState (line 15) | StatementState
constant StatementPrimeState (line 17) | StatementPrimeState
constant ValueState (line 19) | ValueState
constant OpenScopeState (line 21) | OpenScopeState
constant SectionState (line 23) | SectionState
constant CloseScopeState (line 25) | CloseScopeState
constant SkipState (line 27) | SkipState
constant SkipTokenState (line 30) | SkipTokenState
constant CommentState (line 33) | CommentState
constant MarkCompleteState (line 36) | MarkCompleteState
constant TerminalState (line 38) | TerminalState
function ParseAST (line 121) | func ParseAST(r io.Reader) ([]AST, error) {
function ParseASTBytes (line 133) | func ParseASTBytes(b []byte) ([]AST, error) {
function parse (line 143) | func parse(tokens []Token) ([]AST, error) {
function trimSpaces (line 329) | func trimSpaces(k AST) AST {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go
function isBoolValue (line 20) | func isBoolValue(b []rune) bool {
function isLitValue (line 29) | func isLitValue(want, have []rune) bool {
function isCaselessLitValue (line 44) | func isCaselessLitValue(want, have []rune) bool {
function isNumberValue (line 64) | func isNumberValue(b []rune) bool {
function isValid (line 120) | func isValid(b []rune) (bool, int, error) {
function isValidRune (line 129) | func isValidRune(r rune) bool {
type ValueType (line 135) | type ValueType
method String (line 137) | func (v ValueType) String() string {
constant NoneType (line 156) | NoneType = ValueType(iota)
constant DecimalType (line 157) | DecimalType
constant IntegerType (line 158) | IntegerType
constant StringType (line 159) | StringType
constant QuotedStringType (line 160) | QuotedStringType
constant BoolType (line 161) | BoolType
type Value (line 165) | type Value struct
method Append (line 214) | func (v *Value) Append(tok Token) {
method String (line 227) | func (v Value) String() string {
method IntValue (line 265) | func (v Value) IntValue() (int64, bool) {
method FloatValue (line 274) | func (v Value) FloatValue() (float64, bool) {
method BoolValue (line 283) | func (v Value) BoolValue() (bool, bool) {
method StringValue (line 303) | func (v Value) StringValue() string {
function newValue (line 175) | func newValue(t ValueType, base int, raw []rune) (Value, error) {
function newLitToken (line 244) | func newLitToken(b []rune) (Token, int, error) {
function isTrimmable (line 294) | func isTrimmable(r rune) bool {
function contains (line 315) | func contains(runes []rune, c rune) bool {
function runeCompare (line 325) | func runeCompare(v1 []rune, v2 []rune) bool {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go
function isNewline (line 3) | func isNewline(b []rune) bool {
function newNewlineToken (line 19) | func newNewlineToken(b []rune) (Token, int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go
constant none (line 10) | none = numberFormat(iota)
constant binary (line 11) | binary
constant octal (line 12) | octal
constant decimal (line 13) | decimal
constant hex (line 14) | hex
constant exponent (line 15) | exponent
type numberFormat (line 18) | type numberFormat
type numberHelper (line 23) | type numberHelper struct
method Exists (line 30) | func (b numberHelper) Exists() bool {
method IsNegative (line 34) | func (b numberHelper) IsNegative() bool {
method Determine (line 38) | func (b *numberHelper) Determine(c rune) error {
method CorrectByte (line 67) | func (b numberHelper) CorrectByte(c rune) bool {
method Base (line 106) | func (b numberHelper) Base() int {
method String (line 119) | func (b numberHelper) String() string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go
function isOp (line 12) | func isOp(b []rune) bool {
function newOpToken (line 27) | func newOpToken(b []rune) (Token, int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go
constant ErrCodeParseError (line 8) | ErrCodeParseError = "INIParseError"
type ParseError (line 13) | type ParseError struct
method Code (line 26) | func (err *ParseError) Code() string {
method Message (line 31) | func (err *ParseError) Message() string {
method OrigError (line 37) | func (err *ParseError) OrigError() error {
method Error (line 41) | func (err *ParseError) Error() string {
function NewParseError (line 19) | func NewParseError(message string) *ParseError {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go
type ParseStack (line 11) | type ParseStack struct
method Pop (line 26) | func (s *ParseStack) Pop() AST {
method Push (line 32) | func (s *ParseStack) Push(ast AST) {
method MarkComplete (line 38) | func (s *ParseStack) MarkComplete(ast AST) {
method List (line 44) | func (s ParseStack) List() []AST {
method Len (line 49) | func (s *ParseStack) Len() int {
method String (line 53) | func (s ParseStack) String() string {
function newParseStack (line 18) | func newParseStack(sizeContainer, sizeList int) ParseStack {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go
function isSep (line 11) | func isSep(b []rune) bool {
function newSepToken (line 29) | func newSepToken(b []rune) (Token, int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go
type skipper (line 12) | type skipper struct
method ShouldSkip (line 24) | func (s *skipper) ShouldSkip(tok Token) bool {
method Skip (line 37) | func (s *skipper) Skip() {
method Continue (line 41) | func (s *skipper) Continue() {
function newSkipper (line 18) | func newSkipper() skipper {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go
function newStatement (line 4) | func newStatement() AST {
function newSectionStatement (line 9) | func newSectionStatement(tok Token) AST {
function newExprStatement (line 14) | func newExprStatement(ast AST) AST {
function newCommentStatement (line 23) | func newCommentStatement(tok Token) AST {
function newCompletedSectionStatement (line 28) | func newCompletedSectionStatement(ast AST) AST {
function newSkipStatement (line 33) | func newSkipStatement(ast AST) AST {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go
function getStringValue (line 11) | func getStringValue(b []rune) (int, error) {
function getBoolValue (line 49) | func getBoolValue(b []rune) (int, error) {
function getNumericalValue (line 77) | func getNumericalValue(b []rune) (int, int, error) {
function isDigit (line 153) | func isDigit(b rune) bool {
function hasExponent (line 157) | func hasExponent(v []rune) bool {
function isBinaryByte (line 161) | func isBinaryByte(b rune) bool {
function isOctalByte (line 170) | func isOctalByte(b rune) bool {
function isHexByte (line 179) | func isHexByte(b rune) bool {
function getValue (line 187) | func getValue(b []rune) (int, error) {
function getNegativeNumber (line 217) | func getNegativeNumber(b []rune) int {
function isEscaped (line 234) | func isEscaped(value []rune, b rune) bool {
function getEscapedByte (line 252) | func getEscapedByte(b rune) (rune, error) {
function removeEscapedCharacters (line 269) | func removeEscapedCharacters(b []rune) []rune {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go
type Visitor (line 10) | type Visitor interface
type DefaultVisitor (line 20) | type DefaultVisitor struct
method VisitExpr (line 35) | func (v *DefaultVisitor) VisitExpr(expr AST) error {
method VisitStatement (line 79) | func (v *DefaultVisitor) VisitStatement(stmt AST) error {
function NewDefaultVisitor (line 26) | func NewDefaultVisitor() *DefaultVisitor {
type Sections (line 99) | type Sections struct
method GetSection (line 105) | func (t Sections) GetSection(p string) (Section, bool) {
method List (line 115) | func (t Sections) List() []string {
type values (line 111) | type values
type Section (line 129) | type Section struct
method Has (line 135) | func (t Section) Has(k string) bool {
method ValueType (line 142) | func (t Section) ValueType(k string) (ValueType, bool) {
method Bool (line 148) | func (t Section) Bool(k string) (bool, bool) {
method Int (line 153) | func (t Section) Int(k string) (int64, bool) {
method Float64 (line 158) | func (t Section) Float64(k string) (float64, bool) {
method String (line 163) | func (t Section) String(k string) string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go
function Walk (line 4) | func Walk(tree []AST, v Visitor) error {
FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go
function isWhitespace (line 11) | func isWhitespace(c rune) bool {
function newWSToken (line 15) | func newWSToken(b []rune) (Token, int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go
constant Byte (line 5) | Byte int64 = 1
constant KibiByte (line 7) | KibiByte = Byte * 1024
constant MebiByte (line 9) | MebiByte = KibiByte * 1024
constant GibiByte (line 11) | GibiByte = MebiByte * 1024
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go
constant SeekStart (line 8) | SeekStart = 0
constant SeekCurrent (line 9) | SeekCurrent = 1
constant SeekEnd (line 10) | SeekEnd = 2
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go
constant SeekStart (line 10) | SeekStart = io.SeekStart
constant SeekCurrent (line 11) | SeekCurrent = io.SeekCurrent
constant SeekEnd (line 12) | SeekEnd = io.SeekEnd
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go
function Round (line 14) | func Round(x float64) float64 {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go
constant uvone (line 11) | uvone = 0x3FF0000000000000
constant mask (line 12) | mask = 0x7FF
constant shift (line 13) | shift = 64 - 11 - 1
constant bias (line 14) | bias = 1023
constant signMask (line 15) | signMask = 1 << 63
constant fracMask (line 16) | fracMask = 1<<shift - 1
function Round (line 28) | func Round(x float64) float64 {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go
type lockedSource (line 10) | type lockedSource struct
method Int63 (line 15) | func (r *lockedSource) Int63() (n int64) {
method Seed (line 22) | func (r *lockedSource) Seed(seed int64) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go
function Read (line 10) | func Read(r *rand.Rand, p []byte) (int, error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go
function Read (line 9) | func Read(r *rand.Rand, p []byte) (n int, err error) {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
function PathJoin (line 11) | func PathJoin(elems ...string) string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go
constant ECSCredsProviderEnvVar (line 6) | ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go
function SharedCredentialsFilename (line 15) | func SharedCredentialsFilename() string {
function SharedConfigFilename (line 26) | func SharedConfigFilename() string {
function UserHomeDir (line 32) | func UserHomeDir() string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config_resolve_home.go
function userHomeDir (line 11) | func userHomeDir() string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config_resolve_home_go1.12.go
function userHomeDir (line 10) | func userHomeDir() string {
FILE: vendor/github.com/aws/aws-sdk-go/internal/strings/strings.go
function HasPrefixFold (line 9) | func HasPrefixFold(s, prefix string) bool {
FILE: vendor/github.com/aws/aws-sdk-go/internal/sync/singleflight/singleflight.go
type call (line 12) | type call struct
type Group (line 33) | type Group struct
method Do (line 51) | func (g *Group) Do(key string, fn func() (interface{}, error)) (v inte...
method DoChan (line 73) | func (g *Group) DoChan(key string, fn func() (interface{}, error)) <-c...
method doCall (line 96) | func (g *Group) doCall(c *call, key string, fn func() (interface{}, er...
method Forget (line 113) | func (g *Group) Forget(key string) {
type Result (line 40) | type Result struct
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
function ValidateEndpointHost (line 24) | func ValidateEndpointHost(opName, host string) error {
function ValidHostLabel (line 75) | func ValidHostLabel(label string) bool {
function ValidPortNumber (line 94) | func ValidPortNumber(port string) bool {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go
constant HostPrefixHandlerName (line 12) | HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler"
function NewHostPrefixHandler (line 15) | func NewHostPrefixHandler(prefix string, labelsFn func() map[string]stri...
type HostPrefixBuilder (line 29) | type HostPrefixBuilder struct
method Build (line 35) | func (h HostPrefixBuilder) Build(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go
constant idempotencyTokenFillTag (line 13) | idempotencyTokenFillTag = `idempotencyToken`
function CanSetIdempotencyToken (line 20) | func CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool {
function GetIdempotencyToken (line 34) | func GetIdempotencyToken() string {
function SetIdempotencyToken (line 43) | func SetIdempotencyToken(v reflect.Value) {
function UUIDVersion4 (line 67) | func UUIDVersion4(u []byte) string {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
constant floatNaN (line 19) | floatNaN = "NaN"
constant floatInf (line 20) | floatInf = "Infinity"
constant floatNegInf (line 21) | floatNegInf = "-Infinity"
function BuildJSON (line 28) | func BuildJSON(v interface{}) ([]byte, error) {
function buildAny (line 35) | func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
function buildStruct (line 80) | func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.Str...
function buildList (line 159) | func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.Struc...
type sortedValues (line 175) | type sortedValues
method Len (line 177) | func (sv sortedValues) Len() int { return len(sv) }
method Swap (line 178) | func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[...
method Less (line 179) | func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < s...
function buildMap (line 181) | func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
function buildScalar (line 203) | func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructT...
function writeString (line 275) | func writeString(s string, buf *bytes.Buffer) {
function elemOf (line 304) | func elemOf(value reflect.Value) reflect.Value {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
function UnmarshalJSONError (line 25) | func UnmarshalJSONError(v interface{}, stream io.Reader) error {
function UnmarshalJSON (line 43) | func UnmarshalJSON(v interface{}, stream io.Reader) error {
function UnmarshalJSONCaseInsensitive (line 60) | func UnmarshalJSONCaseInsensitive(v interface{}, stream io.Reader) error {
type unmarshaler (line 77) | type unmarshaler struct
method unmarshalAny (line 81) | func (u unmarshaler) unmarshalAny(value reflect.Value, data interface{...
method unmarshalStruct (line 123) | func (u unmarshaler) unmarshalStruct(value reflect.Value, data interfa...
method unmarshalList (line 181) | func (u unmarshaler) unmarshalList(value reflect.Value, data interface...
method unmarshalMap (line 205) | func (u unmarshaler) unmarshalMap(value reflect.Value, data interface{...
method unmarshalScalar (line 229) | func (u unmarshaler) unmarshalScalar(value reflect.Value, data interfa...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go
function Build (line 39) | func Build(req *request.Request) {
function Unmarshal (line 69) | func Unmarshal(req *request.Request) {
function UnmarshalMeta (line 85) | func UnmarshalMeta(req *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/unmarshal_error.go
constant awsQueryError (line 17) | awsQueryError = "x-amzn-query-error"
constant awsQueryErrorPartsCount (line 19) | awsQueryErrorPartsCount = 2
type UnmarshalTypedError (line 24) | type UnmarshalTypedError struct
method UnmarshalError (line 62) | func (u *UnmarshalTypedError) UnmarshalError(
function NewUnmarshalTypedError (line 31) | func NewUnmarshalTypedError(exceptions map[string]func(protocol.Response...
function NewUnmarshalTypedErrorWithOptions (line 40) | func NewUnmarshalTypedErrorWithOptions(exceptions map[string]func(protoc...
function WithQueryCompatibility (line 53) | func WithQueryCompatibility(queryExceptions map[string]func(protocol.Res...
function queryCodeParts (line 117) | func queryCodeParts(resp *http.Response, u *UnmarshalTypedError) []string {
function UnmarshalError (line 134) | func UnmarshalError(req *request.Request) {
type jsonErrorResponse (line 157) | type jsonErrorResponse struct
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go
type EscapeMode (line 13) | type EscapeMode
constant NoEscape (line 17) | NoEscape EscapeMode = iota
constant Base64Escape (line 18) | Base64Escape
constant QuotedEscape (line 19) | QuotedEscape
function EncodeJSONValue (line 26) | func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) {
function DecodeJSONValue (line 48) | func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go
type PayloadUnmarshaler (line 15) | type PayloadUnmarshaler interface
type HandlerPayloadUnmarshal (line 22) | type HandlerPayloadUnmarshal struct
method UnmarshalPayload (line 29) | func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v inter...
type PayloadMarshaler (line 47) | type PayloadMarshaler interface
type HandlerPayloadMarshal (line 54) | type HandlerPayloadMarshal struct
method MarshalPayload (line 61) | func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/protocol.go
type RequireHTTPMinProtocol (line 13) | type RequireHTTPMinProtocol struct
method Handler (line 20) | func (p RequireHTTPMinProtocol) Handler(r *request.Request) {
constant ErrCodeMinimumHTTPProtocolError (line 36) | ErrCodeMinimumHTTPProtocolError = "MinimumHTTPProtocolError"
function newMinHTTPProtoError (line 38) | func newMinHTTPProtoError(major, minor int, r *request.Request) error {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go
function Build (line 18) | func Build(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
constant floatNaN (line 18) | floatNaN = "NaN"
constant floatInf (line 19) | floatInf = "Infinity"
constant floatNegInf (line 20) | floatNegInf = "-Infinity"
function Parse (line 25) | func Parse(body url.Values, i interface{}, isEC2 bool) error {
function elemOf (line 30) | func elemOf(value reflect.Value) reflect.Value {
type queryParser (line 37) | type queryParser struct
method parseValue (line 41) | func (q *queryParser) parseValue(v url.Values, value reflect.Value, pr...
method parseStruct (line 73) | func (q *queryParser) parseStruct(v url.Values, value reflect.Value, p...
method parseList (line 124) | func (q *queryParser) parseList(v url.Values, value reflect.Value, pre...
method parseMap (line 158) | func (q *queryParser) parseMap(v url.Values, value reflect.Value, pref...
method parseScalar (line 223) | func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name ...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
function Unmarshal (line 20) | func Unmarshal(r *request.Request) {
function UnmarshalMeta (line 37) | func UnmarshalMeta(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
type xmlErrorResponse (line 16) | type xmlErrorResponse struct
type xmlResponseError (line 22) | type xmlResponseError struct
method UnmarshalXML (line 26) | func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.Star...
function UnmarshalError (line 45) | func UnmarshalError(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
constant floatNaN (line 25) | floatNaN = "NaN"
constant floatInf (line 26) | floatInf = "Infinity"
constant floatNegInf (line 27) | floatNegInf = "-Infinity"
function init (line 37) | func init() {
function Build (line 54) | func Build(r *request.Request) {
function BuildAsGET (line 64) | func BuildAsGET(r *request.Request) {
function buildLocationElements (line 72) | func buildLocationElements(r *request.Request, v reflect.Value, buildGET...
function buildBody (line 142) | func buildBody(r *request.Request, v reflect.Value) {
function buildHeader (line 167) | func buildHeader(header *http.Header, v reflect.Value, name string, tag ...
function buildHeaderMap (line 183) | func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.St...
function buildURI (line 201) | func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.Stru...
function buildQueryString (line 218) | func buildQueryString(query url.Values, v reflect.Value, name string, ta...
function cleanPath (line 247) | func cleanPath(u *url.URL) {
function EscapePath (line 261) | func EscapePath(path string, encodeSep bool) string {
function convertType (line 274) | func convertType(v reflect.Value, tag reflect.StructTag) (str string, er...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
function PayloadMember (line 6) | func PayloadMember(i interface{}) interface{} {
constant nopayloadPayloadType (line 31) | nopayloadPayloadType = "nopayload"
function PayloadType (line 35) | func PayloadType(i interface{}) string {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
function Unmarshal (line 30) | func Unmarshal(r *request.Request) {
function UnmarshalMeta (line 40) | func UnmarshalMeta(r *request.Request) {
function UnmarshalResponse (line 56) | func UnmarshalResponse(resp *http.Response, data interface{}, lowerCaseH...
function unmarshalBody (line 61) | func unmarshalBody(r *request.Request, v reflect.Value) error {
function unmarshalLocationElements (line 117) | func unmarshalLocationElements(resp *http.Response, v reflect.Value, low...
function unmarshalStatusCode (line 153) | func unmarshalStatusCode(v reflect.Value, statusCode int) {
function unmarshalHeaderMap (line 165) | func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix str...
function unmarshalHeader (line 190) | func unmarshalHeader(v reflect.Value, header string, tag reflect.StructT...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/restjson/restjson.go
function Build (line 36) | func Build(r *request.Request) {
function Unmarshal (line 48) | func Unmarshal(r *request.Request) {
function UnmarshalMeta (line 57) | func UnmarshalMeta(r *request.Request) {
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/restjson/unmarshal_error.go
constant errorTypeHeader (line 19) | errorTypeHeader = "X-Amzn-Errortype"
constant errorMessageHeader (line 20) | errorMessageHeader = "X-Amzn-Errormessage"
type UnmarshalTypedError (line 25) | type UnmarshalTypedError struct
method UnmarshalError (line 40) | func (u *UnmarshalTypedError) UnmarshalError(
function NewUnmarshalTypedError (line 31) | func NewUnmarshalTypedError(exceptions map[string]func(protocol.Response...
function UnmarshalError (line 78) | func UnmarshalError(r *request.Request) {
type jsonErrorResponse (line 98) | type jsonErrorResponse struct
method SanitizedCode (line 104) | func (j *jsonErrorResponse) SanitizedCode() string {
function sanitizeCode (line 123) | func sanitizeCode(code string) string {
function unmarshalErrorInfo (line 131) | func unmarshalErrorInfo(resp *http.Response) (code string, msg string, e...
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
constant RFC822TimeFormatName (line 15) | RFC822TimeFormatName = "rfc822"
constant ISO8601TimeFormatName (line 16) | ISO8601TimeFormatName = "iso8601"
constant UnixTimeFormatName (line 17) | UnixTimeFormatName = "unixTimestamp"
constant RFC822TimeFormat (line 24) | RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT"
constant rfc822TimeFormatSingleDigitDay (line 25) | rfc822TimeFormatSingleDigitDay = "Mon, _2 Jan 2006 15:04:05 ...
constant rfc822TimeFormatSingleDigitDayTwoDigitYear (line 26) | rfc822TimeFormatSingleDigitDayTwoDigitYear = "Mon, _2 Jan 06 15:04:05 GMT"
constant RFC822OutputTimeFormat (line 29) | RFC822OutputTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
constant ISO8601TimeFormat (line 32) | ISO8601TimeFormat = "2006-01-02T15:04:05.999999999Z"
constant iso8601TimeFormatNoZ (line 33) | iso8601TimeFormatNoZ = "2006-01-02T15:04:05.999999999"
constant ISO8601OutputTimeFormat (line 36) | ISO8601OutputTimeFormat = "2006-01-02T15:04:05.999999999Z"
function IsKnownTimestampFormat (line 41) | func IsKnownTimestampFormat(name string) bool {
function FormatTime (line 55) | func FormatTime(name string, t time.Time) string {
function ParseTime (line 73) | func ParseTime(formatName, value string) (time.Time, error) {
function tryParse (line 103) | func tryParse(v string, formats ...string) (time.Time, error) {
type parseErrors (line 120) | type parseErrors
method Error (line 122) | func (es parseErrors) Error() string {
type parseError (line 131) | type parseError struct
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go
function UnmarshalDiscardBody (line 14) | func UnmarshalDiscardBody(r *request.Request) {
type ResponseMetadata (line 24) | type ResponseMetadata struct
FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal_error.go
type UnmarshalErrorHandler (line 12) | type UnmarshalErrorHandler struct
method NamedHandler (line 35) | func (u *UnmarshalErrorHandler) NamedHandler() request.NamedHandler {
method UnmarshalError (line 45) | func (u *UnmarshalErrorHandler) UnmarshalError(r *request.Request) {
type ErrorUnmarshaler (line 18) | type ErrorUnmar
Copy disabled (too large)
Download .json
Condensed preview — 1542 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (28,133K chars).
[
{
"path": ".dockerignore",
"chars": 15,
"preview": "bin\nvendor\npkg\n"
},
{
"path": ".gitignore",
"chars": 11,
"preview": "bin/\n.idea/"
},
{
"path": ".travis.yml",
"chars": 2237,
"preview": "language: go\ngo:\n - 1.x\n - tip\nenv:\n - VAULT_ADDR='http://127.0.0.1:8200' CONSUL_VERSION=0.9.3 ETCD_VERSION=3.3.1 DYN"
},
{
"path": "CHANGELOG",
"chars": 6182,
"preview": "### v0.16.0\n\n28f72608 Release arm64 binaries\n4528af01 Add option to specify auth backend mount path in Vault\nb51998d6 ne"
},
{
"path": "CONTRIBUTING.md",
"chars": 1484,
"preview": "# Contributing to Confd\n\nWant to hack on Confd? Awesome! Here are instructions to get you started. They are probably not"
},
{
"path": "Dockerfile.build.alpine",
"chars": 186,
"preview": "FROM golang:1.10.2-alpine\n\nRUN apk add --no-cache make git\nRUN mkdir -p /go/src/github.com/kelseyhightower/confd && \\\n "
},
{
"path": "LICENSE",
"chars": 1060,
"preview": "Copyright (c) 2013 Kelsey Hightower\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthi"
},
{
"path": "MAINTAINERS",
"chars": 284,
"preview": "Chris Armstrong <carmstrong@engineyard.com> (@carmstrong)\nGabriel Monroy <gmonroy@engineyard.com> (@gabrtv)\nKelsey Hight"
},
{
"path": "Makefile",
"chars": 1318,
"preview": ".PHONY: build install clean test integration dep release\nVERSION=`egrep -o '[0-9]+\\.[0-9a-z.\\-]+' version.go`\nGIT_SHA=`g"
},
{
"path": "README.md",
"chars": 2274,
"preview": "# confd\n\n[](https://travis-ci.org/kelseyhi"
},
{
"path": "backends/client.go",
"chars": 3016,
"preview": "package backends\n\nimport (\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/kelseyhightower/confd/backends/consul\"\n\t\"github.com/kelsey"
},
{
"path": "backends/config.go",
"chars": 1031,
"preview": "package backends\n\nimport (\n\tutil \"github.com/kelseyhightower/confd/util\"\n)\n\ntype Config struct {\n\tAuthToken string "
},
{
"path": "backends/consul/client.go",
"chars": 1858,
"preview": "package consul\n\nimport (\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/consul/api\"\n)\n\n// Client provides a wrapper around t"
},
{
"path": "backends/dynamodb/client.go",
"chars": 2926,
"preview": "package dynamodb\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"github.com"
},
{
"path": "backends/env/client.go",
"chars": 1290,
"preview": "package env\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/kelseyhightower/confd/log\"\n)\n\nvar replacer = strings.NewRepl"
},
{
"path": "backends/etcd/client.go",
"chars": 6629,
"preview": "package etcd\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/kelseyhight"
},
{
"path": "backends/etcdv3/client.go",
"chars": 6631,
"preview": "package etcdv3\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/kelseyhig"
},
{
"path": "backends/file/client.go",
"chars": 3725,
"preview": "package file\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"path\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/fsnotify/fsnotify\"\n\t\"github.com/k"
},
{
"path": "backends/rancher/client.go",
"chars": 3741,
"preview": "package rancher\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\tlo"
},
{
"path": "backends/redis/client.go",
"chars": 7532,
"preview": "package redis\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n\t\"github.com/kel"
},
{
"path": "backends/ssm/client.go",
"chars": 2568,
"preview": "package ssm\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/a"
},
{
"path": "backends/vault/client.go",
"chars": 7535,
"preview": "package vault\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"path\"\n"
},
{
"path": "backends/zookeeper/client.go",
"chars": 3401,
"preview": "package zookeeper\n\nimport (\n\t\"path/filepath\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/kelseyhightower/confd/log\"\n\tzk \"github.com"
},
{
"path": "confd.go",
"chars": 1472,
"preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n\t\"runtime\"\n\t\"syscall\"\n\n\t\"github.com/kelseyhightower/confd/backe"
},
{
"path": "config.go",
"chars": 7837,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/BurntS"
},
{
"path": "config_test.go",
"chars": 734,
"preview": "package main\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/kelseyhightower/confd/log\"\n)\n\nfunc TestInitConfigDefaultConfi"
},
{
"path": "contrib/etcd/Procfile",
"chars": 2445,
"preview": "# Use goreman to run `go get github.com/mattn/goreman`\netcd0: /usr/local/bin/etcd --name etcd0 --listen-client-urls http"
},
{
"path": "contrib/generate-changelog.sh",
"chars": 398,
"preview": "#!/usr/bin/env bash\n# Generates a changelog of all merges from a given release all the way to HEAD.\n\nREPO=https://github"
},
{
"path": "docs/command-line-flags.md",
"chars": 2922,
"preview": "# Command Line Flags\n\nCommand line flags override the confd [configuration file](configuration-guide.md).\n\n```\nconfd -h\n"
},
{
"path": "docs/configuration-guide.md",
"chars": 3117,
"preview": "# Configuration Guide\n\nThe confd configuration file is written in [TOML](https://github.com/mojombo/toml)\nand loaded fro"
},
{
"path": "docs/data_encryption.md",
"chars": 9085,
"preview": "Encrypting your data\n====================\n\nThis example is shown using etcd, but any of the supported backends *should* "
},
{
"path": "docs/dns-srv-records.md",
"chars": 813,
"preview": "# DNS SRV Records\n\nSRV records can be used to declare the backend nodes; just use the `-srv-domain` flag.\n\n## Examples\n\n"
},
{
"path": "docs/installation.md",
"chars": 1977,
"preview": "# Installation\n\n### Binary Download\n\nCurrently confd ships binaries for OS X and Linux 64bit systems. You can download t"
},
{
"path": "docs/logging.md",
"chars": 868,
"preview": "# Logging\n\nconfd logs everything to stdout. You can control the types of messages that get printed by using the `-log-le"
},
{
"path": "docs/noop-mode.md",
"chars": 490,
"preview": "# Noop Mode\n\nWhen in noop mode target configuration files will not be modified.\n\n## Usage\n\n### commandline flag\n\n```\ncon"
},
{
"path": "docs/quick-start-guide.md",
"chars": 7089,
"preview": "# Quick Start Guide\n\nBefore we begin be sure to [download and install confd](installation.md).\n\n## Select a backend\n\ncon"
},
{
"path": "docs/release-checklist.md",
"chars": 1204,
"preview": "# Release Checklist\n\nIn order to cut a new release, a few things must be done:\n\n1. auto-generate the CHANGELOG using the"
},
{
"path": "docs/template-resources.md",
"chars": 1245,
"preview": "# Template Resources\n\nTemplate resources are written in TOML and define a single template resource.\nTemplate resources a"
},
{
"path": "docs/templates.md",
"chars": 10330,
"preview": "# Templates\n\nTemplates define a single application configuration template.\nTemplates are stored under the `/etc/confd/te"
},
{
"path": "docs/tomcat-sample.md",
"chars": 3400,
"preview": "# confd for Apache Tomcat\nIf you administrate an [Apache Tomcat](http://tomcat.apache.org/) you usually need to edit mul"
},
{
"path": "docs/vault-kubernetes-auth.md",
"chars": 3144,
"preview": "These are steps to get vault with Kubernetes auth working on minikube.\n\n*Do not use default service account in prod inst"
},
{
"path": "go.mod",
"chars": 2930,
"preview": "module github.com/kelseyhightower/confd\n\ngo 1.19\n\nrequire (\n\tgithub.com/BurntSushi/toml v1.3.2\n\tgithub.com/aws/aws-sdk-g"
},
{
"path": "go.sum",
"chars": 30839,
"preview": "github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=\ngithub.com/BurntSushi/toml v1.3.2/go.m"
},
{
"path": "integration/confdir/conf.d/basic.toml",
"chars": 184,
"preview": "[template]\nmode = \"0644\"\nsrc = \"basic.conf.tmpl\"\ndest = \"/tmp/confd-basic-test.conf\"\nkeys = [\n \"/database/host\",\n \"/da"
},
{
"path": "integration/confdir/conf.d/exists.toml",
"chars": 113,
"preview": "[template]\nmode = \"0644\"\nsrc = \"exists-test.conf.tmpl\"\ndest = \"/tmp/confd-exists-test.conf\"\nkeys = [\n \"/key\",\n]\n"
},
{
"path": "integration/confdir/conf.d/iteration.toml",
"chars": 119,
"preview": "[template]\nmode = \"0644\"\nsrc = \"iteration.conf.tmpl\"\ndest = \"/tmp/confd-iteration-test.conf\"\nkeys = [\n \"/upstream\",\n]\n"
},
{
"path": "integration/confdir/conf.d/manykeys.toml",
"chars": 4322,
"preview": "[template]\nmode = \"0644\"\nsrc = \"basic.conf.tmpl\"\ndest = \"/tmp/confd-manykeys-test.conf\"\nkeys = [\n \"/database/host\",\n \""
},
{
"path": "integration/confdir/conf.d/nested.toml",
"chars": 111,
"preview": "[template]\nmode = \"0644\"\nsrc = \"nested.conf.tmpl\"\ndest = \"/tmp/confd-nested-test.conf\"\nkeys = [\n \"/nested\",\n]\n"
},
{
"path": "integration/confdir/templates/basic.conf.tmpl",
"chars": 193,
"preview": "hostname: {{ getenv \"HOSTNAME\" }}\n[database]\nhost={{ getv \"/database/host\" }}\npassword={{ getv \"/database/password\" }}\np"
},
{
"path": "integration/confdir/templates/exists-test.conf.tmpl",
"chars": 152,
"preview": "{{ if exists \"/key\" }}value: {{ getv \"/key\" }}{{ end }}\n{{- if exists \"/doesnotexist\" }}This line will not be printed va"
},
{
"path": "integration/confdir/templates/iteration.conf.tmpl",
"chars": 398,
"preview": "upstream app {\n{{- range gets \"/upstream/*\" }}\n server {{ .Value }};\n{{- end }}\n}\n\nserver {\n server_name www.exampl"
},
{
"path": "integration/confdir/templates/nested.conf.tmpl",
"chars": 432,
"preview": "upstream app {\n{{ range gets \"/nested/*\" }}\n {{ range gets .Key }}\n server {{ .Value }};\n {{ end }}\n{{ end }}\n}\n\nse"
},
{
"path": "integration/consul/test.sh",
"chars": 1443,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\n\n# Configure consul\ncurl -X PUT http://127.0.0.1:8500/v1/kv/key -d 'foobar'\ncur"
},
{
"path": "integration/dynamodb/test.sh",
"chars": 3805,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport DYNAMODB_LOCAL=\"1\"\nexport AWS_ACCESS_KEY_ID=\"foo\"\nexport AWS_SECRET_ACCE"
},
{
"path": "integration/env/test.sh",
"chars": 609,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport KEY=\"foobar\"\nexport DATABASE_HOST=\"127.0.0.1\"\nexport DATABASE_PASSWORD=\""
},
{
"path": "integration/etcd/test.sh",
"chars": 1590,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\n\ncurl -L -X PUT http://127.0.0.1:2379/v2/keys/key -d value=foobar\ncurl -L -X PU"
},
{
"path": "integration/etcdv3/test.sh",
"chars": 724,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport ETCDCTL_API=\"3\"\n\netcdctl put /key foobar\netcdctl put /database/host 127."
},
{
"path": "integration/expect/basic.conf",
"chars": 89,
"preview": "hostname: localhost\n[database]\nhost=127.0.0.1\npassword=p@sSw0rd\nport=3306\nusername=confd\n"
},
{
"path": "integration/expect/check.sh",
"chars": 287,
"preview": "#!/bin/bash\nset -ex\n\ndiff /tmp/confd-basic-test.conf integration/expect/basic.conf\ndiff /tmp/confd-exists-test.conf inte"
},
{
"path": "integration/expect/exists-test.conf",
"chars": 14,
"preview": "value: foobar\n"
},
{
"path": "integration/expect/iteration.conf",
"chars": 382,
"preview": "upstream app {\n server 10.0.1.10:8080;\n server 10.0.1.11:8080;\n}\n\nserver {\n server_name www.example.com;\n locat"
},
{
"path": "integration/file/test.sh",
"chars": 711,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nmkdir backends1 backends2\ncat <<EOT >> backends1/1.yaml\nkey: foobar\ndatabase:\n "
},
{
"path": "integration/rancher/test.sh",
"chars": 752,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\n\ncat > ./rancher-answers.json<<EOF\n{\n \"2015-07-25\": {\n \"default\": {\n \""
},
{
"path": "integration/redis/test.sh",
"chars": 916,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\n\nredis-cli set /key foobar\nredis-cli set /database/host 127.0.0.1\nredis-cli set"
},
{
"path": "integration/ssm/main.go",
"chars": 2348,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-g"
},
{
"path": "integration/ssm/test.sh",
"chars": 2423,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport SSM_LOCAL=\"1\"\nexport AWS_ACCESS_KEY_ID=\"foo\"\nexport AWS_SECRET_ACCESS_KE"
},
{
"path": "integration/vault/test.sh",
"chars": 822,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport ROOT_TOKEN=\"$(vault read -field id auth/token/lookup-self)\"\n\nvault secre"
},
{
"path": "integration/vault-path/test.sh",
"chars": 1340,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\nexport ROOT_TOKEN=\"$(vault read -field id auth/token/lookup-self)\"\n\nvault secre"
},
{
"path": "integration/zookeeper/main.go",
"chars": 1156,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strconv\"\n\t\"time\"\n\n\tzk \"github.com/samuel/go-zookeeper/zk\"\n"
},
{
"path": "integration/zookeeper/test.json",
"chars": 990,
"preview": "{\n \"key\": \"foobar\",\n \"database\" : {\n \"host\": \"127.0.0.1\",\n \"password\": \"p@sSw0rd\",\n \"port\": \"33"
},
{
"path": "integration/zookeeper/test.sh",
"chars": 270,
"preview": "#!/bin/bash\n\nexport HOSTNAME=\"localhost\"\n\n# feed zookeeper\nexport ZK_PATH=\"`dirname \\\"$0\\\"`\"\nsh -c \"cd $ZK_PATH; go run "
},
{
"path": "integration/zookeeper/zoo.cfg",
"chars": 53,
"preview": "tickTime=2000\ndataDir=/tmp/zookeeper\nclientPort=2181\n"
},
{
"path": "log/log.go",
"chars": 1809,
"preview": "/*\nPackage log provides support for logging to stdout and stderr.\n\nLog entries will be logged in the following format:\n\n"
},
{
"path": "resource/template/processor.go",
"chars": 2946,
"preview": "package template\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/kelseyhightower/confd/log\"\n\tutil \"github.com/kelseyhight"
},
{
"path": "resource/template/resource.go",
"chars": 8676,
"preview": "package template\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t"
},
{
"path": "resource/template/resource_test.go",
"chars": 2755,
"preview": "package template\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"text/template\"\n\n\t\"github.com/kelseyhightower"
},
{
"path": "resource/template/template_funcs.go",
"chars": 5591,
"preview": "package template\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"path\"\n\t\"sort\"\n\t\"strconv\"\n"
},
{
"path": "resource/template/template_test.go",
"chars": 11320,
"preview": "package template\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/kelseyhightower/confd/backends\"\n)\n\nconst ("
},
{
"path": "util/filestat_posix.go",
"chars": 594,
"preview": "// +build !windows\n\npackage util\n\nimport (\n\t\"crypto/md5\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// filestat return a"
},
{
"path": "util/filestat_windows.go",
"chars": 473,
"preview": "package util\n\nimport (\n\t\"crypto/md5\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\n// filestat return a FileInfo describing the named "
},
{
"path": "util/util.go",
"chars": 3189,
"preview": "package util\n\nimport (\n\t\"fmt\"\n\t\"github.com/kelseyhightower/confd/log\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n)\n\n// Nodes is a cu"
},
{
"path": "util/util_test.go",
"chars": 4395,
"preview": "package util\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/kelseyhightower/confd/log\"\n)"
},
{
"path": "vendor/github.com/BurntSushi/toml/.gitignore",
"chars": 22,
"preview": "/toml.test\n/toml-test\n"
},
{
"path": "vendor/github.com/BurntSushi/toml/COPYING",
"chars": 1079,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2013 TOML authors\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "vendor/github.com/BurntSushi/toml/README.md",
"chars": 2729,
"preview": "TOML stands for Tom's Obvious, Minimal Language. This Go package provides a\nreflection interface similar to Go's standar"
},
{
"path": "vendor/github.com/BurntSushi/toml/decode.go",
"chars": 16832,
"preview": "package toml\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"strcon"
},
{
"path": "vendor/github.com/BurntSushi/toml/decode_go116.go",
"chars": 358,
"preview": "//go:build go1.16\n// +build go1.16\n\npackage toml\n\nimport (\n\t\"io/fs\"\n)\n\n// DecodeFS reads the contents of a file from [fs"
},
{
"path": "vendor/github.com/BurntSushi/toml/deprecated.go",
"chars": 837,
"preview": "package toml\n\nimport (\n\t\"encoding\"\n\t\"io\"\n)\n\n// TextMarshaler is an alias for encoding.TextMarshaler.\n//\n// Deprecated: u"
},
{
"path": "vendor/github.com/BurntSushi/toml/doc.go",
"chars": 494,
"preview": "// Package toml implements decoding and encoding of TOML files.\n//\n// This package supports TOML v1.0.0, as specified at"
},
{
"path": "vendor/github.com/BurntSushi/toml/encode.go",
"chars": 18872,
"preview": "package toml\n\nimport (\n\t\"bufio\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv"
},
{
"path": "vendor/github.com/BurntSushi/toml/error.go",
"chars": 8132,
"preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// ParseError is returned when there is an error parsing the TOML syntax suc"
},
{
"path": "vendor/github.com/BurntSushi/toml/internal/tz.go",
"chars": 1539,
"preview": "package internal\n\nimport \"time\"\n\n// Timezones used for local datetime, date, and time TOML types.\n//\n// The exact way ti"
},
{
"path": "vendor/github.com/BurntSushi/toml/lex.go",
"chars": 30876,
"preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype itemType int\n\nconst (\n"
},
{
"path": "vendor/github.com/BurntSushi/toml/meta.go",
"chars": 3200,
"preview": "package toml\n\nimport (\n\t\"strings\"\n)\n\n// MetaData allows access to meta information about TOML data that's not\n// accessi"
},
{
"path": "vendor/github.com/BurntSushi/toml/parse.go",
"chars": 22120,
"preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"github.com/BurntSushi/toml/internal"
},
{
"path": "vendor/github.com/BurntSushi/toml/type_fields.go",
"chars": 6469,
"preview": "package toml\n\n// Struct field handling is adapted from code in encoding/json:\n//\n// Copyright 2010 The Go Authors. All "
},
{
"path": "vendor/github.com/BurntSushi/toml/type_toml.go",
"chars": 1913,
"preview": "package toml\n\n// tomlType represents any Go type that corresponds to a TOML type.\n// While the first draft of the TOML s"
},
{
"path": "vendor/github.com/armon/go-metrics/.gitignore",
"chars": 273,
"preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture spe"
},
{
"path": "vendor/github.com/armon/go-metrics/.travis.yml",
"chars": 107,
"preview": "language: go\n\ngo:\n - \"1.x\"\n\nenv:\n - GO111MODULE=on\n\ninstall:\n - go get ./...\n\nscript:\n - go test ./...\n"
},
{
"path": "vendor/github.com/armon/go-metrics/LICENSE",
"chars": 1079,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2013 Armon Dadgar\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "vendor/github.com/armon/go-metrics/README.md",
"chars": 3572,
"preview": "go-metrics\n==========\n\nThis library provides a `metrics` package which can be used to instrument code,\nexpose applicatio"
},
{
"path": "vendor/github.com/armon/go-metrics/const_unix.go",
"chars": 153,
"preview": "// +build !windows\n\npackage metrics\n\nimport (\n\t\"syscall\"\n)\n\nconst (\n\t// DefaultSignal is used with DefaultInmemSignal\n\tD"
},
{
"path": "vendor/github.com/armon/go-metrics/const_windows.go",
"chars": 196,
"preview": "// +build windows\n\npackage metrics\n\nimport (\n\t\"syscall\"\n)\n\nconst (\n\t// DefaultSignal is used with DefaultInmemSignal\n\t//"
},
{
"path": "vendor/github.com/armon/go-metrics/inmem.go",
"chars": 9120,
"preview": "package metrics\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math\"\n\t\"net/url\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar spaceReplacer = strings.N"
},
{
"path": "vendor/github.com/armon/go-metrics/inmem_endpoint.go",
"chars": 4120,
"preview": "package metrics\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"sort\"\n\t\"time\"\n)\n\n// MetricsSummary holds a roll-up of metrics "
},
{
"path": "vendor/github.com/armon/go-metrics/inmem_signal.go",
"chars": 2823,
"preview": "package metrics\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n)\n\n// InmemSignal is us"
},
{
"path": "vendor/github.com/armon/go-metrics/metrics.go",
"chars": 7859,
"preview": "package metrics\n\nimport (\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\tiradix \"github.com/hashicorp/go-immutable-radix\"\n)\n\ntype Label"
},
{
"path": "vendor/github.com/armon/go-metrics/sink.go",
"chars": 4207,
"preview": "package metrics\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n)\n\n// The MetricSink interface is used to transmit metrics information\n// to"
},
{
"path": "vendor/github.com/armon/go-metrics/start.go",
"chars": 5815,
"preview": "package metrics\n\nimport (\n\t\"os\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\tiradix \"github.com/hashicorp/go-immutable-radix\"\n)\n\n// "
},
{
"path": "vendor/github.com/armon/go-metrics/statsd.go",
"chars": 4123,
"preview": "package metrics\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\t// statsdMaxLen is the"
},
{
"path": "vendor/github.com/armon/go-metrics/statsite.go",
"chars": 4024,
"preview": "package metrics\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\t// We force flush the "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/LICENSE.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/NOTICE.txt",
"chars": 120,
"preview": "AWS SDK for Go\nCopyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.\nCopyright 2014-2015 Stripe, Inc.\n"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/auth/bearer/token.go",
"chars": 1382,
"preview": "package bearer\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"time\"\n)\n\n// Token provides a type wrapping a bearer token an"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go",
"chars": 5427,
"preview": "// Package awserr represents API error interface accessors for the SDK.\npackage awserr\n\n// An Error wraps lower level er"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go",
"chars": 6025,
"preview": "package awserr\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// SprintError returns a string of the formatted error code.\n//\n// Bo"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go",
"chars": 2779,
"preview": "package awsutil\n\nimport (\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Copy deeply copies a src structure to dst. Useful for copying r"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go",
"chars": 925,
"preview": "package awsutil\n\nimport (\n\t\"reflect\"\n)\n\n// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.\n"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go",
"chars": 5379,
"preview": "package awsutil\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jmespath/go-jmespath\"\n)\n\nvar indexRe "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go",
"chars": 2769,
"preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Prettify returns the string representation o"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go",
"chars": 1965,
"preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// StringValue returns the string representation of a"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/client/client.go",
"chars": 2877,
"preview": "package client\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"git"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go",
"chars": 4798,
"preview": "package client\n\nimport (\n\t\"math\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-g"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/client/logger.go",
"chars": 5871,
"preview": "package client\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http/httputil\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"git"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go",
"chars": 344,
"preview": "package metadata\n\n// ClientInfo wraps immutable data from the client.Client structure.\ntype ClientInfo struct {\n\tService"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go",
"chars": 822,
"preview": "package client\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// NoOpRetryer provides a retryer that per"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/config.go",
"chars": 22276,
"preview": "package aws\n\nimport (\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go",
"chars": 1554,
"preview": "//go:build !go1.9\n// +build !go1.9\n\npackage aws\n\nimport \"time\"\n\n// Context is an copy of the Go v1.7 stdlib's context.Co"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go",
"chars": 302,
"preview": "//go:build go1.9\n// +build go1.9\n\npackage aws\n\nimport \"context\"\n\n// Context is an alias of the Go stdlib's context.Conte"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go",
"chars": 676,
"preview": "//go:build !go1.7\n// +build !go1.7\n\npackage aws\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/context\"\n)\n\n// Background"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go",
"chars": 633,
"preview": "//go:build go1.7\n// +build go1.7\n\npackage aws\n\nimport \"context\"\n\n// BackgroundContext returns a context that will never "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go",
"chars": 500,
"preview": "package aws\n\nimport (\n\t\"time\"\n)\n\n// SleepWithContext will wait for the timer duration to expire, or the context\n// is ca"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/convert_types.go",
"chars": 20491,
"preview": "package aws\n\nimport \"time\"\n\n// String returns a pointer to the string value passed in.\nfunc String(v string) *string {\n\t"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/awsinternal.go",
"chars": 61,
"preview": "// DO NOT EDIT\npackage corehandlers\n\nconst isAwsInternal = \"\""
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go",
"chars": 7488,
"preview": "package corehandlers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"githu"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go",
"chars": 512,
"preview": "package corehandlers\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\n// ValidateParametersHandler is a request handler "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go",
"chars": 1204,
"preview": "package corehandlers\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/reques"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go",
"chars": 3263,
"preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar (\n\t// ErrNoValidProvidersFoundInChain Is re"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.5.go",
"chars": 684,
"preview": "//go:build !go1.7\n// +build !go1.7\n\npackage credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/context\"\n)\n\n// ba"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.7.go",
"chars": 641,
"preview": "//go:build go1.7\n// +build go1.7\n\npackage credentials\n\nimport \"context\"\n\n// backgroundContext returns a context that wil"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.5.go",
"chars": 1628,
"preview": "//go:build !go1.9\n// +build !go1.9\n\npackage credentials\n\nimport \"time\"\n\n// Context is an copy of the Go v1.7 stdlib's co"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.9.go",
"chars": 376,
"preview": "//go:build go1.9\n// +build go1.9\n\npackage credentials\n\nimport \"context\"\n\n// Context is an alias of the Go stdlib's conte"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go",
"chars": 11914,
"preview": "// Package credentials provides credential retrieval and management\n//\n// The Credentials is the primary method of getti"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go",
"chars": 6175,
"preview": "package ec2rolecreds\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"g"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go",
"chars": 8158,
"preview": "// Package endpointcreds provides support for retrieving credentials from an\n// arbitrary HTTP endpoint.\n//\n// The crede"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go",
"chars": 2042,
"preview": "package credentials\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// EnvProviderName provides a name of En"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini",
"chars": 243,
"preview": "[default]\naws_access_key_id = accessKey\naws_secret_access_key = secret\naws_session_token = token\n\n[no_token]\naws_access_"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go",
"chars": 13318,
"preview": "/*\nPackage processcreds is a credential Provider to retrieve `credential_process`\ncredentials.\n\nWARNING: The following d"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go",
"chars": 4902,
"preview": "package credentials\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/internal"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/doc.go",
"chars": 2646,
"preview": "// Package ssocreds provides a credential provider for retrieving temporary AWS credentials using an SSO access token.\n/"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/os.go",
"chars": 132,
"preview": "//go:build !windows\n// +build !windows\n\npackage ssocreds\n\nimport \"os\"\n\nfunc getHomeDirectory() string {\n\treturn os.Geten"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/os_windows.go",
"chars": 99,
"preview": "package ssocreds\n\nimport \"os\"\n\nfunc getHomeDirectory() string {\n\treturn os.Getenv(\"USERPROFILE\")\n}\n"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/provider.go",
"chars": 6143,
"preview": "package ssocreds\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"ti"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/sso_cached_token.go",
"chars": 6475,
"preview": "package ssocreds\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"github.com/aws/aws-sdk-go/internal/s"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ssocreds/token_provider.go",
"chars": 5196,
"preview": "package ssocreds\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/auth/b"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go",
"chars": 1841,
"preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// StaticProviderName provides a name of Static"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go",
"chars": 15409,
"preview": "/*\nPackage stscreds are credential Providers to retrieve STS AWS credentials.\n\nSTS provides multiple ways to retrieve cr"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go",
"chars": 6710,
"preview": "package stscreds\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/crr/cache.go",
"chars": 3437,
"preview": "package crr\n\nimport (\n\t\"sync/atomic\"\n)\n\n// EndpointCache is an LRU cache that holds a series of endpoints\n// based on so"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/crr/endpoint.go",
"chars": 2943,
"preview": "package crr\n\nimport (\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\n// Endpoint represents "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/crr/sync_map.go",
"chars": 503,
"preview": "//go:build go1.9\n// +build go1.9\n\npackage crr\n\nimport (\n\t\"sync\"\n)\n\ntype syncMap sync.Map\n\nfunc newSyncMap() syncMap {\n\tr"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/crr/sync_map_1_8.go",
"chars": 774,
"preview": "//go:build !go1.9\n// +build !go1.9\n\npackage crr\n\nimport (\n\t\"sync\"\n)\n\ntype syncMap struct {\n\tcontainer map[interface{}]in"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go",
"chars": 2603,
"preview": "// Package csm provides the Client Side Monitoring (CSM) client which enables\n// sending metrics via UDP connection to t"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go",
"chars": 2092,
"preview": "package csm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tlock sync.Mutex\n)\n\nconst (\n\t// DefaultPort is used when no por"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go",
"chars": 3818,
"preview": "package csm\n\nimport (\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\ntype metricTime time.Time\n\nfunc (t metricT"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go",
"chars": 857,
"preview": "package csm\n\nimport (\n\t\"sync/atomic\"\n)\n\nconst (\n\trunningEnum = iota\n\tpausedEnum\n)\n\nvar (\n\t// MetricsChannelSize of metri"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go",
"chars": 387,
"preview": "package csm\n\ntype metricException interface {\n\tException() string\n\tMessage() string\n}\n\ntype requestException struct {\n\te"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go",
"chars": 5981,
"preview": "package csm\n\nimport (\n\t\"encoding/json\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go",
"chars": 8280,
"preview": "// Package defaults is a collection of helpers to retrieve the SDK's default\n// configuration and handlers.\n//\n// Genera"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go",
"chars": 768,
"preview": "package defaults\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\n// SharedCredentialsFilename returns "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/doc.go",
"chars": 2381,
"preview": "// Package aws provides the core SDK's utilities and shared types. Use this package's\n// utilities to simplify setting a"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go",
"chars": 8614,
"preview": "package ec2metadata\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sd"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go",
"chars": 7917,
"preview": "// Package ec2metadata provides the client for making API calls to the\n// EC2 Metadata service.\n//\n// This package's cli"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go",
"chars": 3089,
"preview": "package ec2metadata\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"githu"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go",
"chars": 4842,
"preview": "package endpoints\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\ntype modelDefiniti"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go",
"chars": 1035866,
"preview": "// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT.\n\npackage endpoints\n\nimport (\n\t\"regexp\"\n)\n\n// Partiti"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go",
"chars": 11645,
"preview": "package endpoints\n\n// Service identifiers\n//\n// Deprecated: Use client package's EndpointsID value instead of these\n// S"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go",
"chars": 2713,
"preview": "// Package endpoints provides the types and functionality for defining regions\n// and endpoints, as well as querying tho"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go",
"chars": 23663,
"preview": "package endpoints\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// A Logger is a min"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go",
"chars": 485,
"preview": "package endpoints\n\nvar legacyGlobalRegions = map[string]map[string]struct{}{\n\t\"sts\": {\n\t\t\"ap-northeast-1\": {},\n\t\t\"ap-sou"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go",
"chars": 14543,
"preview": "package endpoints\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst (\n\tec2MetadataEndpointIPv6 "
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go",
"chars": 10008,
"preview": "//go:build codegen\n// +build codegen\n\npackage endpoints\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"text/template\"\n\t\""
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/errors.go",
"chars": 472,
"preview": "package aws\n\nimport \"github.com/aws/aws-sdk-go/aws/awserr\"\n\nvar (\n\t// ErrMissingRegion is an error that is returned if r"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go",
"chars": 290,
"preview": "package aws\n\n// JSONValue is a representation of a grab bag type that will be marshaled\n// into a json string. This type"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/logger.go",
"chars": 4127,
"preview": "package aws\n\nimport (\n\t\"log\"\n\t\"os\"\n)\n\n// A LogLevelType defines the level logging should be performed at. Used to instru"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go",
"chars": 376,
"preview": "package request\n\nimport (\n\t\"strings\"\n)\n\nfunc isErrConnectionReset(err error) bool {\n\tif strings.Contains(err.Error(), \"r"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go",
"chars": 9380,
"preview": "package request\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// A Handlers provides a collection of request handlers for various\n// st"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go",
"chars": 358,
"preview": "package request\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc copyHTTPRequest(r *http.Request, body io.ReadCloser) *htt"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go",
"chars": 1389,
"preview": "package request\n\nimport (\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\n// offsetReader is a thread-safe"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request.go",
"chars": 21487,
"preview": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"git"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go",
"chars": 1359,
"preview": "//go:build !go1.8\n// +build !go1.8\n\npackage request\n\nimport \"io\"\n\n// NoBody is an io.ReadCloser with no bytes. Read alwa"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go",
"chars": 1080,
"preview": "//go:build go1.8\n// +build go1.8\n\npackage request\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// N"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go",
"chars": 423,
"preview": "//go:build go1.7\n// +build go1.7\n\npackage request\n\nimport \"github.com/aws/aws-sdk-go/aws\"\n\n// setContext updates the Req"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go",
"chars": 412,
"preview": "//go:build !go1.7\n// +build !go1.7\n\npackage request\n\nimport \"github.com/aws/aws-sdk-go/aws\"\n\n// setContext updates the R"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go",
"chars": 7765,
"preview": "package request\n\nimport (\n\t\"reflect\"\n\t\"sync/atomic\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/aw"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go",
"chars": 8830,
"preview": "package request\n\nimport (\n\t\"net\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sd"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go",
"chars": 2453,
"preview": "package request\n\nimport (\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar timeoutErr = awserr.New(\n\tErrCod"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/validation.go",
"chars": 7623,
"preview": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nconst (\n\t// InvalidParameterErrCod"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go",
"chars": 9043,
"preview": "package request\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"git"
},
{
"path": "vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go",
"chars": 10310,
"preview": "package session\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\""
}
]
// ... and 1342 more files (download for full content)
About this extraction
This page contains the full source code of the kelseyhightower/confd GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1542 files (25.0 MB), approximately 6.6M tokens, and a symbol index with 121722 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.