Skip to content

Commit

Permalink
correctly assign cidr to lb nodepools (#1654)
Browse files Browse the repository at this point in the history
Co-authored-by: CI/CD pipeline <CI/[email protected]>
  • Loading branch information
Despire and CI/CD pipeline authored Feb 12, 2025
1 parent cfe2346 commit 8a1c50a
Show file tree
Hide file tree
Showing 4 changed files with 230 additions and 9 deletions.
16 changes: 8 additions & 8 deletions manifests/claudie/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,18 +57,18 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: ghcr.io/berops/claudie/ansibler
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/autoscaler-adapter
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/builder
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/claudie-operator
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/kube-eleven
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/kuber
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/manager
newTag: 6b6ef10-3236
newTag: 4789f19-3239
- name: ghcr.io/berops/claudie/terraformer
newTag: 6b6ef10-3236
newTag: 4789f19-3239
2 changes: 1 addition & 1 deletion manifests/testing-framework/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,4 @@ secretGenerator:

images:
- name: ghcr.io/berops/claudie/testing-framework
newTag: 6b6ef10-3236
newTag: 4789f19-3239
20 changes: 20 additions & 0 deletions services/manager/internal/service/create_desired_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"slices"
"strings"

"github.com/berops/claudie/internal/clusters"
"github.com/berops/claudie/internal/hash"
"github.com/berops/claudie/internal/manifest"
"github.com/berops/claudie/internal/nodepools"
Expand Down Expand Up @@ -376,6 +377,7 @@ func generateMissingDynamicNodes(nodepoolID string, usedNames map[string]struct{

func fillMissingCIDR(c *spec.ClusterState) error {
// https://github.com/berops/claudie/issues/647
// 1. generate cidrs for k8s nodepools.
existing := make(map[string][]string)
for p, nps := range nodepools.ByProviderRegion(c.GetCurrent().GetK8S().GetClusterInfo().GetNodePools()) {
for _, np := range nodepools.ExtractDynamic(nps) {
Expand All @@ -388,6 +390,24 @@ func fillMissingCIDR(c *spec.ClusterState) error {
return fmt.Errorf("error while generating cidr for nodepool: %w", err)
}
}

// 2. generate cidrs for each lb nodepool
for _, desired := range c.GetDesired().GetLoadBalancers().GetClusters() {
existing := make(map[string][]string)
if i := clusters.IndexLoadbalancerById(desired.GetClusterInfo().Id(), c.GetCurrent().GetLoadBalancers().GetClusters()); i >= 0 {
current := c.GetCurrent().GetLoadBalancers().GetClusters()[i]
for p, nps := range nodepools.ByProviderRegion(current.GetClusterInfo().GetNodePools()) {
for _, np := range nodepools.ExtractDynamic(nps) {
existing[p] = append(existing[p], np.Cidr)
}
}
}
for p, nps := range nodepools.ByProviderRegion(desired.GetClusterInfo().GetNodePools()) {
if err := calculateCIDR(baseSubnetCIDR, p, existing, nodepools.ExtractDynamic(nps)); err != nil {
return fmt.Errorf("error while generating cidr for loadbalancer %q, nodepools: %w", desired.GetClusterInfo().Id(), err)
}
}
}
return nil
}

Expand Down
201 changes: 201 additions & 0 deletions services/manager/internal/service/create_desired_state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -797,3 +797,204 @@ func TestGetCIDR(t *testing.T) {
}
}
}

func Test_fillMissingCIDR(t *testing.T) {
type args struct {
c *spec.ClusterState
}
tests := []struct {
name string
args args
wantErr bool
validate func(t *testing.T, args args)
}{
{
name: "test01",
args: args{
c: &spec.ClusterState{
Current: &spec.Clusters{
K8S: &spec.K8Scluster{ClusterInfo: &spec.ClusterInfo{
Name: "k8s-current-test-01",
Hash: "01",
NodePools: []*spec.NodePool{
{
Name: "k8s-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-west",
Provider: &spec.Provider{SpecName: "hetzner-1", CloudProviderName: "hetzner"},
}},
},
{
Name: "k8s-02",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.1.0/24",
Region: "europe-east",
Provider: &spec.Provider{SpecName: "gcp-1", CloudProviderName: "gcp"},
}},
},
}}},
LoadBalancers: &spec.LoadBalancers{Clusters: []*spec.LBcluster{
{
ClusterInfo: &spec.ClusterInfo{
Name: "lb-current-test-01",
Hash: "03",
NodePools: []*spec.NodePool{
{
Name: "lb-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-east",
Provider: &spec.Provider{SpecName: "gcp-1", CloudProviderName: "gcp"},
}},
},
{
Name: "lb-02",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.1.0/24",
Region: "europe-east",
Provider: &spec.Provider{SpecName: "gcp-1", CloudProviderName: "gcp"},
}},
},
}},
},
{
ClusterInfo: &spec.ClusterInfo{
Name: "lb-current-test-02",
Hash: "04",
NodePools: []*spec.NodePool{
{
Name: "lb-02-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-1", CloudProviderName: "oci"},
}},
},
{
Name: "lb-02-02",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.1.0/24",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-2", CloudProviderName: "oci"},
}},
},
}},
},
}},
},
Desired: &spec.Clusters{
K8S: &spec.K8Scluster{ClusterInfo: &spec.ClusterInfo{
Name: "k8s-current-test-01",
Hash: "01",
NodePools: []*spec.NodePool{
{
Name: "k8s-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-west",
Provider: &spec.Provider{SpecName: "hetzner-1", CloudProviderName: "hetzner"},
}},
},
{
Name: "k8s-03",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "",
Region: "europe-west",
Provider: &spec.Provider{SpecName: "hetzner-1", CloudProviderName: "hetzner"},
}},
},
}}},
LoadBalancers: &spec.LoadBalancers{Clusters: []*spec.LBcluster{
{
ClusterInfo: &spec.ClusterInfo{
Name: "lb-current-test-01",
Hash: "03",
NodePools: []*spec.NodePool{
{
Name: "lb-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-east",
Provider: &spec.Provider{SpecName: "gcp-1", CloudProviderName: "gcp"},
}},
},
{
Name: "lb-03",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "",
Region: "europe-east",
Provider: &spec.Provider{SpecName: "gcp-1", CloudProviderName: "gcp"},
}},
},
}},
},
{
ClusterInfo: &spec.ClusterInfo{
Name: "lb-current-test-02",
Hash: "04",
NodePools: []*spec.NodePool{
{
Name: "lb-02-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.0.0/24",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-1", CloudProviderName: "oci"},
}},
},
{
Name: "lb-02-02",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "10.0.1.0/24",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-2", CloudProviderName: "oci"},
}},
},
}},
},
{
ClusterInfo: &spec.ClusterInfo{
Name: "lb-current-test-03",
Hash: "04",
NodePools: []*spec.NodePool{
{
Name: "lb-02-01",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-1", CloudProviderName: "oci"},
}},
},
{
Name: "lb-02-02",
Type: &spec.NodePool_DynamicNodePool{DynamicNodePool: &spec.DynamicNodePool{
Cidr: "",
Region: "europe-north",
Provider: &spec.Provider{SpecName: "oci-2", CloudProviderName: "oci"},
}},
},
}},
},
}},
},
},
},
wantErr: false,
validate: func(t *testing.T, args args) {
assert.Equal(t, "10.0.1.0/24", args.c.Desired.K8S.ClusterInfo.NodePools[1].GetDynamicNodePool().Cidr)
assert.Equal(t, "10.0.2.0/24", args.c.Desired.LoadBalancers.Clusters[0].ClusterInfo.NodePools[1].GetDynamicNodePool().Cidr)
assert.Equal(t, "10.0.0.0/24", args.c.Desired.LoadBalancers.Clusters[2].ClusterInfo.NodePools[0].GetDynamicNodePool().Cidr)
assert.Equal(t, "10.0.0.0/24", args.c.Desired.LoadBalancers.Clusters[2].ClusterInfo.NodePools[1].GetDynamicNodePool().Cidr)
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := fillMissingCIDR(tt.args.c); (err != nil) != tt.wantErr {
t.Errorf("fillMissingCIDR() = %v want = %v", err, tt.wantErr)
}
tt.validate(t, tt.args)
})
}
}

0 comments on commit 8a1c50a

Please sign in to comment.