[ACI] Support to add extra user agent to the request (#378)

* Add UserAgent

* Change to join the user agent with a whitespace and set in the header

* Remove empty entry from user agent
This commit is contained in:
Robbie Zhang
2018-10-18 14:28:43 -07:00
committed by GitHub
parent 0dbc88826c
commit 5991b29f76
8 changed files with 49 additions and 24 deletions

View File

@@ -75,6 +75,7 @@ type ACIProvider struct {
networkProfile string
kubeProxyExtension *aci.Extension
kubeDNSIP string
extraUserAgent string
metricsSync sync.Mutex
metricsSyncTime time.Time
@@ -196,7 +197,9 @@ func NewACIProvider(config string, rm *manager.ResourceManager, nodeName, operat
azAuth.SubscriptionID = subscriptionID
}
p.aciClient, err = aci.NewClient(azAuth)
p.extraUserAgent = os.Getenv("ACI_EXTRA_USER_AGENT")
p.aciClient, err = aci.NewClient(azAuth, p.extraUserAgent)
if err != nil {
return nil, err
}
@@ -315,7 +318,7 @@ func NewACIProvider(config string, rm *manager.ResourceManager, nodeName, operat
}
func (p *ACIProvider) setupNetworkProfile(auth *client.Authentication) error {
c, err := network.NewClient(auth)
c, err := network.NewClient(auth, p.extraUserAgent)
if err != nil {
return fmt.Errorf("error creating azure networking client: %v", err)
}

View File

@@ -14,7 +14,7 @@ import (
const (
// BaseURI is the default URI used for compute services.
baseURI = "https://management.azure.com"
userAgent = "virtual-kubelet/azure-arm-aci/2018-09-01"
defaultUserAgent = "virtual-kubelet/azure-arm-aci/2018-09-01"
apiVersion = "2018-09-01"
containerGroupURLPath = "subscriptions/{{.subscriptionId}}/resourceGroups/{{.resourceGroup}}/providers/Microsoft.ContainerInstance/containerGroups/{{.containerGroupName}}"
@@ -34,12 +34,17 @@ type Client struct {
auth *azure.Authentication
}
// NewClient creates a new Azure Container Instances client.
func NewClient(auth *azure.Authentication) (*Client, error) {
// NewClient creates a new Azure Container Instances client with extra user agent.
func NewClient(auth *azure.Authentication, extraUserAgent string) (*Client, error) {
if auth == nil {
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
}
userAgent := []string{defaultUserAgent}
if extraUserAgent != "" {
userAgent = append(userAgent, extraUserAgent)
}
client, err := azure.NewClient(auth, baseURI, userAgent)
if err != nil {
return nil, fmt.Errorf("Creating Azure client failed: %v", err)

View File

@@ -39,7 +39,7 @@ func TestMain(m *testing.M) {
subscriptionID = auth.SubscriptionID
// Check if the resource group exists and create it if not.
rgCli, err := resourcegroups.NewClient(auth)
rgCli, err := resourcegroups.NewClient(auth, "unit-test")
if err != nil {
log.Fatalf("creating new resourcegroups client failed: %v", err)
}
@@ -82,7 +82,7 @@ func TestNewClient(t *testing.T) {
log.Fatalf("Failed to load Azure authentication file: %v", err)
}
c, err := NewClient(auth)
c, err := NewClient(auth, "unit-test")
if err != nil {
t.Fatal(err)
}

View File

@@ -24,13 +24,13 @@ type BearerAuthorizer struct {
}
type userAgentTransport struct {
userAgent string
userAgent []string
base http.RoundTripper
client *Client
}
// NewClient creates a new Azure API client from an Authentication struct and BaseURI.
func NewClient(auth *Authentication, baseURI string, userAgent string) (*Client, error) {
func NewClient(auth *Authentication, baseURI string, userAgent []string) (*Client, error) {
resource, err := getResourceForToken(auth, baseURI)
if err != nil {
return nil, fmt.Errorf("Getting resource for token failed: %v", err)
@@ -52,9 +52,16 @@ func NewClient(auth *Authentication, baseURI string, userAgent string) (*Client,
client.BearerAuthorizer = &BearerAuthorizer{tokenProvider: tp}
nonEmptyUserAgent := userAgent[:0]
for _, ua := range userAgent {
if ua != "" {
nonEmptyUserAgent = append(nonEmptyUserAgent, ua)
}
}
uat := userAgentTransport{
base: http.DefaultTransport,
userAgent: userAgent,
userAgent: nonEmptyUserAgent,
client: client,
}
@@ -77,7 +84,7 @@ func (t userAgentTransport) RoundTrip(req *http.Request) (*http.Response, error)
}
// Add the user agent header.
newReq.Header["User-Agent"] = []string{t.userAgent}
newReq.Header["User-Agent"] = []string{strings.Join(t.userAgent, " ")}
// Add the content-type header.
newReq.Header["Content-Type"] = []string{"application/json"}

View File

@@ -12,8 +12,8 @@ import (
const (
baseURI = "https://management.azure.com"
userAgent = "virtual-kubelet/azure-arm-networking/2018-07-01"
apiVersion = "2018-07-01"
defaultUserAgent = "virtual-kubelet/azure-arm-network/2018-08-01"
apiVersion = "2018-08-01"
)
// Client is a client for interacting with Azure networking
@@ -25,11 +25,16 @@ type Client struct {
}
// NewClient creates a new client for interacting with azure networking
func NewClient(azAuth *azure.Authentication) (*Client, error) {
func NewClient(azAuth *azure.Authentication, extraUserAgent string) (*Client, error) {
if azAuth == nil {
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
}
userAgent := []string{defaultUserAgent}
if extraUserAgent != "" {
userAgent = append(userAgent, extraUserAgent)
}
client, err := azure.NewClient(azAuth, baseURI, userAgent)
if err != nil {
return nil, fmt.Errorf("Creating Azure client failed: %v", err)

View File

@@ -27,7 +27,7 @@ func TestMain(m *testing.M) {
os.Exit(1)
}
c, err := resourcegroups.NewClient(testAuth)
c, err := resourcegroups.NewClient(testAuth, "unit-test")
if err != nil {
os.Exit(1)
}
@@ -68,7 +68,7 @@ func newTestClient(t *testing.T) *Client {
if err := setupAuth(); err != nil {
t.Fatal(err)
}
c, err := NewClient(testAuth)
c, err := NewClient(testAuth, "unit-test")
if err != nil {
t.Fatal(err)
}

View File

@@ -10,7 +10,7 @@ import (
const (
// BaseURI is the default URI used for compute services.
BaseURI = "https://management.azure.com"
userAgent = "virtual-kubelet/azure-arm-resourcegroups/2017-12-01"
defaultUserAgent = "virtual-kubelet/azure-arm-resourcegroups/2017-12-01"
apiVersion = "2017-08-01"
resourceGroupURLPath = "subscriptions/{{.subscriptionId}}/resourcegroups/{{.resourceGroupName}}"
@@ -26,11 +26,16 @@ type Client struct {
}
// NewClient creates a new Azure resource groups client.
func NewClient(auth *azure.Authentication) (*Client, error) {
func NewClient(auth *azure.Authentication, extraUserAgent string) (*Client, error) {
if auth == nil {
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
}
userAgent := []string{defaultUserAgent}
if extraUserAgent != "" {
userAgent = append(userAgent, extraUserAgent)
}
client, err := azure.NewClient(auth, BaseURI, userAgent)
if err != nil {
return nil, fmt.Errorf("Creating Azure client failed: %v", err)

View File

@@ -25,7 +25,7 @@ func TestNewClient(t *testing.T) {
t.Fatalf("Failed to load Azure authentication file: %v", err)
}
c, err := NewClient(auth)
c, err := NewClient(auth, "unit-test")
if err != nil {
t.Fatal(err)
}