[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
|
networkProfile string
|
||||||
kubeProxyExtension *aci.Extension
|
kubeProxyExtension *aci.Extension
|
||||||
kubeDNSIP string
|
kubeDNSIP string
|
||||||
|
extraUserAgent string
|
||||||
|
|
||||||
metricsSync sync.Mutex
|
metricsSync sync.Mutex
|
||||||
metricsSyncTime time.Time
|
metricsSyncTime time.Time
|
||||||
@@ -196,7 +197,9 @@ func NewACIProvider(config string, rm *manager.ResourceManager, nodeName, operat
|
|||||||
azAuth.SubscriptionID = subscriptionID
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -315,7 +318,7 @@ func NewACIProvider(config string, rm *manager.ResourceManager, nodeName, operat
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *ACIProvider) setupNetworkProfile(auth *client.Authentication) error {
|
func (p *ACIProvider) setupNetworkProfile(auth *client.Authentication) error {
|
||||||
c, err := network.NewClient(auth)
|
c, err := network.NewClient(auth, p.extraUserAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error creating azure networking client: %v", err)
|
return fmt.Errorf("error creating azure networking client: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// BaseURI is the default URI used for compute services.
|
// BaseURI is the default URI used for compute services.
|
||||||
baseURI = "https://management.azure.com"
|
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"
|
apiVersion = "2018-09-01"
|
||||||
|
|
||||||
containerGroupURLPath = "subscriptions/{{.subscriptionId}}/resourceGroups/{{.resourceGroup}}/providers/Microsoft.ContainerInstance/containerGroups/{{.containerGroupName}}"
|
containerGroupURLPath = "subscriptions/{{.subscriptionId}}/resourceGroups/{{.resourceGroup}}/providers/Microsoft.ContainerInstance/containerGroups/{{.containerGroupName}}"
|
||||||
containerGroupListURLPath = "subscriptions/{{.subscriptionId}}/providers/Microsoft.ContainerInstance/containerGroups"
|
containerGroupListURLPath = "subscriptions/{{.subscriptionId}}/providers/Microsoft.ContainerInstance/containerGroups"
|
||||||
@@ -34,12 +34,17 @@ type Client struct {
|
|||||||
auth *azure.Authentication
|
auth *azure.Authentication
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClient creates a new Azure Container Instances client.
|
// NewClient creates a new Azure Container Instances client with extra user agent.
|
||||||
func NewClient(auth *azure.Authentication) (*Client, error) {
|
func NewClient(auth *azure.Authentication, extraUserAgent string) (*Client, error) {
|
||||||
if auth == nil {
|
if auth == nil {
|
||||||
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
|
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)
|
client, err := azure.NewClient(auth, baseURI, userAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Creating Azure client failed: %v", err)
|
return nil, fmt.Errorf("Creating Azure client failed: %v", err)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func TestMain(m *testing.M) {
|
|||||||
subscriptionID = auth.SubscriptionID
|
subscriptionID = auth.SubscriptionID
|
||||||
|
|
||||||
// Check if the resource group exists and create it if not.
|
// 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 {
|
if err != nil {
|
||||||
log.Fatalf("creating new resourcegroups client failed: %v", err)
|
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)
|
log.Fatalf("Failed to load Azure authentication file: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := NewClient(auth)
|
c, err := NewClient(auth, "unit-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ type BearerAuthorizer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type userAgentTransport struct {
|
type userAgentTransport struct {
|
||||||
userAgent string
|
userAgent []string
|
||||||
base http.RoundTripper
|
base http.RoundTripper
|
||||||
client *Client
|
client *Client
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClient creates a new Azure API client from an Authentication struct and BaseURI.
|
// 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)
|
resource, err := getResourceForToken(auth, baseURI)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Getting resource for token failed: %v", err)
|
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}
|
client.BearerAuthorizer = &BearerAuthorizer{tokenProvider: tp}
|
||||||
|
|
||||||
|
nonEmptyUserAgent := userAgent[:0]
|
||||||
|
for _, ua := range userAgent {
|
||||||
|
if ua != "" {
|
||||||
|
nonEmptyUserAgent = append(nonEmptyUserAgent, ua)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uat := userAgentTransport{
|
uat := userAgentTransport{
|
||||||
base: http.DefaultTransport,
|
base: http.DefaultTransport,
|
||||||
userAgent: userAgent,
|
userAgent: nonEmptyUserAgent,
|
||||||
client: client,
|
client: client,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +84,7 @@ func (t userAgentTransport) RoundTrip(req *http.Request) (*http.Response, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add the user agent header.
|
// 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.
|
// Add the content-type header.
|
||||||
newReq.Header["Content-Type"] = []string{"application/json"}
|
newReq.Header["Content-Type"] = []string{"application/json"}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
baseURI = "https://management.azure.com"
|
baseURI = "https://management.azure.com"
|
||||||
userAgent = "virtual-kubelet/azure-arm-networking/2018-07-01"
|
defaultUserAgent = "virtual-kubelet/azure-arm-network/2018-08-01"
|
||||||
apiVersion = "2018-07-01"
|
apiVersion = "2018-08-01"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Client is a client for interacting with Azure networking
|
// 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
|
// 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 {
|
if azAuth == nil {
|
||||||
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
|
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)
|
client, err := azure.NewClient(azAuth, baseURI, userAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Creating Azure client failed: %v", err)
|
return nil, fmt.Errorf("Creating Azure client failed: %v", err)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func TestMain(m *testing.M) {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := resourcegroups.NewClient(testAuth)
|
c, err := resourcegroups.NewClient(testAuth, "unit-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
@@ -68,7 +68,7 @@ func newTestClient(t *testing.T) *Client {
|
|||||||
if err := setupAuth(); err != nil {
|
if err := setupAuth(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
c, err := NewClient(testAuth)
|
c, err := NewClient(testAuth, "unit-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// BaseURI is the default URI used for compute services.
|
// BaseURI is the default URI used for compute services.
|
||||||
BaseURI = "https://management.azure.com"
|
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"
|
apiVersion = "2017-08-01"
|
||||||
|
|
||||||
resourceGroupURLPath = "subscriptions/{{.subscriptionId}}/resourcegroups/{{.resourceGroupName}}"
|
resourceGroupURLPath = "subscriptions/{{.subscriptionId}}/resourcegroups/{{.resourceGroupName}}"
|
||||||
)
|
)
|
||||||
@@ -26,11 +26,16 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewClient creates a new Azure resource groups client.
|
// 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 {
|
if auth == nil {
|
||||||
return nil, fmt.Errorf("Authentication is not supplied for the Azure client")
|
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)
|
client, err := azure.NewClient(auth, BaseURI, userAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Creating Azure client failed: %v", err)
|
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)
|
t.Fatalf("Failed to load Azure authentication file: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := NewClient(auth)
|
c, err := NewClient(auth, "unit-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user