pkg/config/config.go (83 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package config
import (
"fmt"
"strings"
"sigs.k8s.io/cloud-provider-azure/pkg/azclient"
"sigs.k8s.io/cloud-provider-azure/pkg/azclient/policy/ratelimit"
"github.com/Azure/kube-egress-gateway/pkg/consts"
)
type RateLimitConfig ratelimit.Config
type CloudConfig struct {
azclient.ARMClientConfig `json:",inline" mapstructure:",squash"`
azclient.AzureAuthConfig `json:",inline" mapstructure:",squash"`
*RateLimitConfig `json:",inline" mapstructure:",squash"`
// azure resource location
Location string `json:"location,omitempty" mapstructure:"location,omitempty"`
// subscription ID
SubscriptionID string `json:"subscriptionID,omitempty" mapstructure:"subscriptionID,omitempty"`
// default resource group where the gateway nodes are deployed
ResourceGroup string `json:"resourceGroup,omitempty" mapstructure:"resourceGroup,omitempty"`
// name of the gateway ILB
LoadBalancerName string `json:"gatewayLoadBalancerName,omitempty" mapstructure:"gatewayLoadBalancerName,omitempty"`
// resource group where the gateway ILB belongs
LoadBalancerResourceGroup string `json:"loadBalancerResourceGroup,omitempty" mapstructure:"loadBalancerResourceGroup,omitempty"`
// name of the virtual network where the gateway ILB is deployed
VnetName string `json:"vnetName,omitempty" mapstructure:"vnetName,omitempty"`
// name of the resource group where the virtual network is deployed
VnetResourceGroup string `json:"vnetResourceGroup,omitempty" mapstructure:"vnetResourceGroup,omitempty"`
// name of the subnet in the vnet where the gateway ILB is deployed
SubnetName string `json:"subnetName,omitempty" mapstructure:"subnetName,omitempty"`
// Enable exponential backoff to manage resource request retries
CloudProviderBackoff bool `json:"cloudProviderBackoff,omitempty" mapstructure:"cloudProviderBackoff,omitempty"`
}
func (cfg *CloudConfig) DefaultAndValidate() error {
cfg.trimSpace()
if cfg.Cloud == "" {
return fmt.Errorf("cloud is empty")
}
if cfg.Location == "" {
return fmt.Errorf("location is empty")
}
if cfg.SubscriptionID == "" {
return fmt.Errorf("subscription ID is empty")
}
if !cfg.UseManagedIdentityExtension {
if cfg.UserAssignedIdentityID != "" {
return fmt.Errorf("useManagedIdentityExtension needs to be true when userAssignedIdentityID is provided")
}
if cfg.AADClientID == "" || cfg.AADClientSecret == "" {
return fmt.Errorf("AAD client ID or AAD client secret is empty")
}
}
if cfg.ResourceGroup == "" {
return fmt.Errorf("resource group is empty")
}
if cfg.VnetName == "" {
return fmt.Errorf("virtual network name is empty")
}
if cfg.SubnetName == "" {
return fmt.Errorf("virtual network subnet name is empty")
}
// default values
if cfg.UserAgent == "" {
cfg.UserAgent = consts.DefaultUserAgent
}
if cfg.LoadBalancerResourceGroup == "" {
cfg.LoadBalancerResourceGroup = cfg.ResourceGroup
}
if cfg.VnetResourceGroup == "" {
cfg.VnetResourceGroup = cfg.ResourceGroup
}
if cfg.RateLimitConfig == nil {
cfg.RateLimitConfig = &RateLimitConfig{
CloudProviderRateLimit: false,
}
}
return nil
}
func (cfg *CloudConfig) trimSpace() {
cfg.Cloud = strings.TrimSpace(cfg.Cloud)
cfg.Location = strings.TrimSpace(cfg.Location)
cfg.SubscriptionID = strings.TrimSpace(cfg.SubscriptionID)
cfg.TenantID = strings.TrimSpace(cfg.TenantID)
cfg.UserAssignedIdentityID = strings.TrimSpace(cfg.UserAssignedIdentityID)
cfg.AADClientID = strings.TrimSpace(cfg.AADClientID)
cfg.AADClientSecret = strings.TrimSpace(cfg.AADClientSecret)
cfg.UserAgent = strings.TrimSpace(cfg.UserAgent)
cfg.ResourceGroup = strings.TrimSpace(cfg.ResourceGroup)
cfg.LoadBalancerName = strings.TrimSpace(cfg.LoadBalancerName)
cfg.LoadBalancerResourceGroup = strings.TrimSpace(cfg.LoadBalancerResourceGroup)
cfg.VnetName = strings.TrimSpace(cfg.VnetName)
cfg.VnetResourceGroup = strings.TrimSpace(cfg.VnetResourceGroup)
cfg.SubnetName = strings.TrimSpace(cfg.SubnetName)
}