Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions pkg/provider/difftracker/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
Copyright 2026 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package difftracker
Comment thread
nilo19 marked this conversation as resolved.

import "fmt"

// Config holds the configuration values needed by DiffTracker
// to perform Azure operations without depending on the entire AzureCloud struct
// This allows DiffTracker to be more modular and testable
type Config struct {
// Azure subscription ID
SubscriptionID string

// Azure resource group name
ResourceGroup string

// Azure location/region
Location string

// Service Gateway resource name
ServiceGatewayResourceName string

// Full Service Gateway resource ID
ServiceGatewayID string

// Virtual Network name (required for backend pool configuration)
VNetName string
}

// Validate checks if the configuration has all required fields
func (c *Config) Validate() error {
if c.SubscriptionID == "" {
return fmt.Errorf("config validation failed: SubscriptionID is required")
}
if c.ResourceGroup == "" {
return fmt.Errorf("config validation failed: ResourceGroup is required")
}
if c.Location == "" {
return fmt.Errorf("config validation failed: Location is required")
}
if c.ServiceGatewayResourceName == "" {
return fmt.Errorf("config validation failed: ServiceGatewayResourceName is required")
}
if c.ServiceGatewayID == "" {
return fmt.Errorf("config validation failed: ServiceGatewayID is required")
}
if c.VNetName == "" {
return fmt.Errorf("config validation failed: VNetName is required")
}
return nil
}
78 changes: 78 additions & 0 deletions pkg/provider/difftracker/difftracker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
Copyright 2026 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package difftracker

import (
"fmt"

"k8s.io/client-go/kubernetes"
"k8s.io/klog/v2"

"sigs.k8s.io/cloud-provider-azure/pkg/azclient"
Comment thread
nilo19 marked this conversation as resolved.
utilsets "sigs.k8s.io/cloud-provider-azure/pkg/util/sets"
)

// InitializeDiffTracker creates and initializes a new DiffTracker with the given state and configuration.
// It validates the configuration and ensures all required dependencies are present.
// Returns an error if the configuration is invalid or if any required dependency is nil.
func InitializeDiffTracker(K8s K8sState, NRP NRPState, config Config, networkClientFactory azclient.ClientFactory, kubeClient kubernetes.Interface) (*DiffTracker, error) {
if err := config.Validate(); err != nil {
return nil, fmt.Errorf("InitializeDiffTracker: %w", err)
}

if networkClientFactory == nil {
return nil, fmt.Errorf("InitializeDiffTracker: networkClientFactory must not be nil")
}
if kubeClient == nil {
return nil, fmt.Errorf("InitializeDiffTracker: kubeClient must not be nil")
}

klog.V(2).Infof("InitializeDiffTracker: initializing with config: subscription=%s, resourceGroup=%s, location=%s",
config.SubscriptionID, config.ResourceGroup, config.Location)

// If any field is nil, initialize it
if K8s.Services == nil {
K8s.Services = utilsets.NewString()
}
if K8s.Egresses == nil {
K8s.Egresses = utilsets.NewString()
}
if K8s.Nodes == nil {
K8s.Nodes = make(map[string]Node)
}
if NRP.LoadBalancers == nil {
NRP.LoadBalancers = utilsets.NewString()
}
if NRP.NATGateways == nil {
NRP.NATGateways = utilsets.NewString()
}
if NRP.Locations == nil {
NRP.Locations = make(map[string]NRPLocation)
}

diffTracker := &DiffTracker{
K8sResources: K8s,
NRPResources: NRP,

// Configuration and clients
config: config,
networkClientFactory: networkClientFactory,
kubeClient: kubeClient,
}

return diffTracker, nil
}
Loading
Loading