[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:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user