Skip to content

Commit

Permalink
fix(inputs.kubernetes): refresh token from file at each read (influxd…
Browse files Browse the repository at this point in the history
  • Loading branch information
powersj authored Aug 3, 2022
1 parent d606899 commit 388be51
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
6 changes: 5 additions & 1 deletion plugins/inputs/kubernetes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ avoid cardinality issues:
## Use bearer token for authorization. ('bearer_token' takes priority)
## If both of these are empty, we'll use the default serviceaccount:
## at: /run/secrets/kubernetes.io/serviceaccount/token
# bearer_token = "/path/to/bearer/token"
##
## To re-read the token at each interval, please use a file with the
## bearer_token option. If given a string, Telegraf will always use that
## token.
# bearer_token = "/run/secrets/kubernetes.io/serviceaccount/token"
## OR
# bearer_token_string = "abc_123"

Expand Down
17 changes: 8 additions & 9 deletions plugins/inputs/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type Kubernetes struct {

// Bearer Token authorization file path
BearerToken string `toml:"bearer_token"`
BearerTokenString string `toml:"bearer_token_string"`
BearerTokenString string `toml:"bearer_token_string" deprecated:"1.24.0;use 'BearerToken' with a file instead"`

LabelInclude []string `toml:"label_include"`
LabelExclude []string `toml:"label_exclude"`
Expand Down Expand Up @@ -65,14 +65,6 @@ func (k *Kubernetes) Init() error {
k.BearerToken = defaultServiceAccountPath
}

if k.BearerToken != "" {
token, err := os.ReadFile(k.BearerToken)
if err != nil {
return err
}
k.BearerTokenString = strings.TrimSpace(string(token))
}

labelFilter, err := filter.NewIncludeExcludeFilter(k.LabelInclude, k.LabelExclude)
if err != nil {
return err
Expand Down Expand Up @@ -186,6 +178,13 @@ func (k *Kubernetes) LoadJSON(url string, v interface{}) error {
ResponseHeaderTimeout: time.Duration(k.ResponseTimeout),
}
}
if k.BearerToken != "" {
token, err := os.ReadFile(k.BearerToken)
if err != nil {
return err
}
k.BearerTokenString = strings.TrimSpace(string(token))
}
req.Header.Set("Authorization", "Bearer "+k.BearerTokenString)
req.Header.Add("Accept", "application/json")
resp, err = k.RoundTripper.RoundTrip(req)
Expand Down
6 changes: 5 additions & 1 deletion plugins/inputs/kubernetes/sample.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
## Use bearer token for authorization. ('bearer_token' takes priority)
## If both of these are empty, we'll use the default serviceaccount:
## at: /run/secrets/kubernetes.io/serviceaccount/token
# bearer_token = "/path/to/bearer/token"
##
## To re-read the token at each interval, please use a file with the
## bearer_token option. If given a string, Telegraf will always use that
## token.
# bearer_token = "/run/secrets/kubernetes.io/serviceaccount/token"
## OR
# bearer_token_string = "abc_123"

Expand Down

0 comments on commit 388be51

Please sign in to comment.