Merge pull request #13594 from ihmccreery/tokens

Second attempt at GCE tokens behavior to new format
This commit is contained in:
Quinton Hoole 2015-09-04 11:38:08 -07:00
commit 059d762e64
3 changed files with 12 additions and 7 deletions

View File

@ -540,10 +540,11 @@ grains:
- kubernetes-master - kubernetes-master
cloud: gce cloud: gce
EOF EOF
if ! [[ -z "${PROJECT_ID:-}" ]] && ! [[ -z "${TOKEN_URL:-}" ]] && ! [[ -z "${NODE_NETWORK:-}" ]] ; then if ! [[ -z "${PROJECT_ID:-}" ]] && ! [[ -z "${TOKEN_URL:-}" ]] && ! [[ -z "${TOKEN_BODY:-}" ]] && ! [[ -z "${NODE_NETWORK:-}" ]] ; then
cat <<EOF >/etc/gce.conf cat <<EOF >/etc/gce.conf
[global] [global]
token-url = ${TOKEN_URL} token-url = ${TOKEN_URL}
token-body = ${TOKEN_BODY}
project-id = ${PROJECT_ID} project-id = ${PROJECT_ID}
network-name = ${NODE_NETWORK} network-name = ${NODE_NETWORK}
EOF EOF

View File

@ -61,6 +61,7 @@ type GCECloud struct {
type Config struct { type Config struct {
Global struct { Global struct {
TokenURL string `gcfg:"token-url"` TokenURL string `gcfg:"token-url"`
TokenBody string `gcfg:"token-body"`
ProjectID string `gcfg:"project-id"` ProjectID string `gcfg:"project-id"`
NetworkName string `gcfg:"network-name"` NetworkName string `gcfg:"network-name"`
} }
@ -159,7 +160,7 @@ func newGCECloud(config io.Reader) (*GCECloud, error) {
} }
} }
if cfg.Global.TokenURL != "" { if cfg.Global.TokenURL != "" {
tokenSource = newAltTokenSource(cfg.Global.TokenURL) tokenSource = newAltTokenSource(cfg.Global.TokenURL, cfg.Global.TokenBody)
} }
} }
client := oauth2.NewClient(oauth2.NoContext, tokenSource) client := oauth2.NewClient(oauth2.NoContext, tokenSource)

View File

@ -19,6 +19,7 @@ package gce_cloud
import ( import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"strings"
"time" "time"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
@ -59,6 +60,7 @@ func init() {
type altTokenSource struct { type altTokenSource struct {
oauthClient *http.Client oauthClient *http.Client
tokenURL string tokenURL string
tokenBody string
throttle util.RateLimiter throttle util.RateLimiter
} }
@ -73,7 +75,7 @@ func (a *altTokenSource) Token() (*oauth2.Token, error) {
} }
func (a *altTokenSource) token() (*oauth2.Token, error) { func (a *altTokenSource) token() (*oauth2.Token, error) {
req, err := http.NewRequest("GET", a.tokenURL, nil) req, err := http.NewRequest("POST", a.tokenURL, strings.NewReader(a.tokenBody))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -86,23 +88,24 @@ func (a *altTokenSource) token() (*oauth2.Token, error) {
return nil, err return nil, err
} }
var tok struct { var tok struct {
AccessToken string `json:"accessToken"` AccessToken string `json:"accessToken"`
ExpiryTimeSeconds int64 `json:"expiryTimeSeconds,string"` ExpireTime time.Time `json:"expireTime"`
} }
if err := json.NewDecoder(res.Body).Decode(&tok); err != nil { if err := json.NewDecoder(res.Body).Decode(&tok); err != nil {
return nil, err return nil, err
} }
return &oauth2.Token{ return &oauth2.Token{
AccessToken: tok.AccessToken, AccessToken: tok.AccessToken,
Expiry: time.Unix(tok.ExpiryTimeSeconds, 0), Expiry: tok.ExpireTime,
}, nil }, nil
} }
func newAltTokenSource(tokenURL string) oauth2.TokenSource { func newAltTokenSource(tokenURL, tokenBody string) oauth2.TokenSource {
client := oauth2.NewClient(oauth2.NoContext, google.ComputeTokenSource("")) client := oauth2.NewClient(oauth2.NoContext, google.ComputeTokenSource(""))
a := &altTokenSource{ a := &altTokenSource{
oauthClient: client, oauthClient: client,
tokenURL: tokenURL, tokenURL: tokenURL,
tokenBody: tokenBody,
throttle: util.NewTokenBucketRateLimiter(tokenURLQPS, tokenURLBurst), throttle: util.NewTokenBucketRateLimiter(tokenURLQPS, tokenURLBurst),
} }
return oauth2.ReuseTokenSource(nil, a) return oauth2.ReuseTokenSource(nil, a)