// SetConfig is specified in the Environ interface. func (env *azureEnviron) SetConfig(cfg *config.Config) error { env.mu.Lock() defer env.mu.Unlock() var old *config.Config if env.config != nil { old = env.config.Config } ecfg, err := validateConfig(cfg, old) if err != nil { return err } env.config = ecfg // Initialise clients. env.compute = compute.NewWithBaseURI(ecfg.endpoint, env.config.subscriptionId) env.resources = resources.NewWithBaseURI(ecfg.endpoint, env.config.subscriptionId) env.storage = storage.NewWithBaseURI(ecfg.endpoint, env.config.subscriptionId) env.network = network.NewWithBaseURI(ecfg.endpoint, env.config.subscriptionId) clients := map[string]*autorest.Client{ "azure.compute": &env.compute.Client, "azure.resources": &env.resources.Client, "azure.storage": &env.storage.Client, "azure.network": &env.network.Client, } if env.provider.config.Sender != nil { env.config.token.SetSender(env.provider.config.Sender) } for id, client := range clients { client.Authorizer = env.config.token logger := loggo.GetLogger(id) if env.provider.config.Sender != nil { client.Sender = env.provider.config.Sender } client.ResponseInspector = tracingRespondDecorator(logger) client.RequestInspector = tracingPrepareDecorator(logger) if env.provider.config.RequestInspector != nil { tracer := client.RequestInspector inspector := env.provider.config.RequestInspector client.RequestInspector = func(p autorest.Preparer) autorest.Preparer { p = tracer(p) p = inspector(p) return p } } } // Invalidate instance types when the location changes. if old != nil { oldLocation := old.UnknownAttrs()["location"].(string) if env.config.location != oldLocation { env.instanceTypes = nil } } return nil }
func (env *azureEnviron) initEnviron() error { credAttrs := env.cloud.Credential.Attributes() env.subscriptionId = credAttrs[credAttrSubscriptionId] env.authorizer = &cloudSpecAuth{ cloud: env.cloud, sender: env.provider.config.Sender, } env.compute = compute.NewWithBaseURI(env.cloud.Endpoint, env.subscriptionId) env.resources = resources.NewWithBaseURI(env.cloud.Endpoint, env.subscriptionId) env.storage = storage.NewWithBaseURI(env.cloud.Endpoint, env.subscriptionId) env.network = network.NewWithBaseURI(env.cloud.Endpoint, env.subscriptionId) clients := map[string]*autorest.Client{ "azure.compute": &env.compute.Client, "azure.resources": &env.resources.Client, "azure.storage": &env.storage.Client, "azure.network": &env.network.Client, } for id, client := range clients { client.Authorizer = env.authorizer logger := loggo.GetLogger(id) if env.provider.config.Sender != nil { client.Sender = env.provider.config.Sender } client.ResponseInspector = tracing.RespondDecorator(logger) client.RequestInspector = tracing.PrepareDecorator(logger) if env.provider.config.RequestInspector != nil { tracer := client.RequestInspector inspector := env.provider.config.RequestInspector client.RequestInspector = func(p autorest.Preparer) autorest.Preparer { p = tracer(p) p = inspector(p) return p } } } return nil }