Skip to content

Commit 64dbe50

Browse files
author
ablandamou
committed
🐛 correction of issue #2617 selected fixed subnet not applied
1 parent c9b797f commit 64dbe50

File tree

3 files changed

+97
-17
lines changed

3 files changed

+97
-17
lines changed

controllers/openstackcluster_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ func bastionToOpenStackServerSpec(openStackCluster *infrav1.OpenStackCluster) *i
571571
if bastion.AvailabilityZone != nil {
572572
az = *bastion.AvailabilityZone
573573
}
574-
openStackServerSpec := openStackMachineSpecToOpenStackServerSpec(bastion.Spec, openStackCluster.Spec.IdentityRef, compute.InstanceTags(bastion.Spec, openStackCluster), az, nil, getBastionSecurityGroupID(openStackCluster), openStackCluster.Status.Network.ID)
574+
openStackServerSpec := openStackMachineSpecToOpenStackServerSpec(bastion.Spec, openStackCluster.Spec.IdentityRef, compute.InstanceTags(bastion.Spec, openStackCluster), az, nil, getBastionSecurityGroupID(openStackCluster), openStackCluster)
575575

576576
return openStackServerSpec
577577
}

controllers/openstackmachine_controller.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ func (r *OpenStackMachineReconciler) getMachineServer(ctx context.Context, openS
475475

476476
// openStackMachineSpecToOpenStackServerSpec converts an OpenStackMachineSpec to an OpenStackServerSpec.
477477
// It returns the OpenStackServerSpec object and an error if there is any.
478-
func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.OpenStackMachineSpec, identityRef infrav1.OpenStackIdentityReference, tags []string, failureDomain string, userDataRef *corev1.LocalObjectReference, defaultSecGroup *string, defaultNetworkID string) *infrav1alpha1.OpenStackServerSpec {
478+
func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.OpenStackMachineSpec, identityRef infrav1.OpenStackIdentityReference, tags []string, failureDomain string, userDataRef *corev1.LocalObjectReference, defaultSecGroup *string, openStackCluster *infrav1.OpenStackCluster) *infrav1alpha1.OpenStackServerSpec {
479479
openStackServerSpec := &infrav1alpha1.OpenStackServerSpec{
480480
AdditionalBlockDevices: openStackMachineSpec.AdditionalBlockDevices,
481481
ConfigDrive: openStackMachineSpec.ConfigDrive,
@@ -516,21 +516,39 @@ func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.Ope
516516
if len(openStackMachineSpec.Ports) == 0 {
517517
serverPorts = make([]infrav1.PortOpts, 1)
518518
}
519+
520+
var fixedIPs []infrav1.FixedIP
521+
if len(openStackCluster.Spec.Subnets) > 0 {
522+
fixedIPs = make([]infrav1.FixedIP, len(openStackCluster.Spec.Subnets))
523+
for idx, sn := range openStackCluster.Spec.Subnets {
524+
fixedIPs[idx] = infrav1.FixedIP{
525+
Subnet: &sn,
526+
}
527+
}
528+
}
529+
519530
for i := range serverPorts {
520-
if serverPorts[i].Network == nil {
521-
serverPorts[i].Network = &infrav1.NetworkParam{
522-
ID: &defaultNetworkID,
531+
serverPort := &serverPorts[i]
532+
if serverPort.Network == nil {
533+
if openStackCluster.Status.Network.ID != "" {
534+
serverPort.Network = &infrav1.NetworkParam{
535+
ID: &openStackCluster.Status.Network.ID,
536+
}
537+
if len(fixedIPs) > 0 {
538+
serverPort.FixedIPs = fixedIPs
539+
}
540+
523541
}
524542
}
525-
if len(serverPorts[i].SecurityGroups) == 0 && defaultSecGroup != nil {
526-
serverPorts[i].SecurityGroups = []infrav1.SecurityGroupParam{
543+
if len(serverPort.SecurityGroups) == 0 && defaultSecGroup != nil {
544+
serverPort.SecurityGroups = []infrav1.SecurityGroupParam{
527545
{
528546
ID: defaultSecGroup,
529547
},
530548
}
531549
}
532550
if len(openStackMachineSpec.SecurityGroups) > 0 {
533-
serverPorts[i].SecurityGroups = append(serverPorts[i].SecurityGroups, openStackMachineSpec.SecurityGroups...)
551+
serverPort.SecurityGroups = append(serverPort.SecurityGroups, openStackMachineSpec.SecurityGroups...)
534552
}
535553
}
536554
openStackServerSpec.Ports = serverPorts
@@ -584,7 +602,7 @@ func (r *OpenStackMachineReconciler) getOrCreateMachineServer(ctx context.Contex
584602
}
585603
return openStackCluster.Spec.IdentityRef
586604
}()
587-
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
605+
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster)
588606
machineServer = &infrav1alpha1.OpenStackServer{
589607
ObjectMeta: metav1.ObjectMeta{
590608
Labels: map[string]string{

controllers/openstackmachine_controller_test.go

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
6464
},
6565
},
6666
}
67+
openStackClusterWithSubnet := &infrav1.OpenStackCluster{
68+
Spec: infrav1.OpenStackClusterSpec{
69+
ManagedSecurityGroups: &infrav1.ManagedSecurityGroups{},
70+
Subnets: []infrav1.SubnetParam{
71+
{
72+
ID: ptr.To(subnetUUID),
73+
},
74+
},
75+
},
76+
Status: infrav1.OpenStackClusterStatus{
77+
WorkerSecurityGroup: &infrav1.SecurityGroupStatus{
78+
ID: workerSecurityGroupUUID,
79+
},
80+
Network: &infrav1.NetworkStatusWithSubnets{
81+
NetworkStatus: infrav1.NetworkStatus{
82+
ID: networkUUID,
83+
},
84+
},
85+
},
86+
}
6787
portOpts := []infrav1.PortOpts{
6888
{
6989
Network: &infrav1.NetworkParam{
@@ -91,16 +111,37 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
91111
},
92112
},
93113
}
114+
portOptsWithAdditionalSubnet := []infrav1.PortOpts{
115+
{
116+
Network: &infrav1.NetworkParam{
117+
ID: ptr.To(openStackCluster.Status.Network.ID),
118+
},
119+
SecurityGroups: []infrav1.SecurityGroupParam{
120+
{
121+
ID: ptr.To(openStackCluster.Status.WorkerSecurityGroup.ID),
122+
},
123+
},
124+
FixedIPs: []infrav1.FixedIP{
125+
{
126+
Subnet: &infrav1.SubnetParam{
127+
ID: ptr.To(subnetUUID),
128+
},
129+
},
130+
},
131+
},
132+
}
94133
image := infrav1.ImageParam{Filter: &infrav1.ImageFilter{Name: ptr.To("my-image")}}
95134
tags := []string{"tag1", "tag2"}
96135
userData := &corev1.LocalObjectReference{Name: "server-data-secret"}
97136
tests := []struct {
98-
name string
99-
spec *infrav1.OpenStackMachineSpec
100-
want *infrav1alpha1.OpenStackServerSpec
137+
name string
138+
cluster *infrav1.OpenStackCluster
139+
spec *infrav1.OpenStackMachineSpec
140+
want *infrav1alpha1.OpenStackServerSpec
101141
}{
102142
{
103-
name: "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion",
143+
name: "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion",
144+
cluster: openStackCluster,
104145
spec: &infrav1.OpenStackMachineSpec{
105146
Flavor: ptr.To(flavorName),
106147
Image: image,
@@ -117,7 +158,8 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
117158
},
118159
},
119160
{
120-
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with an additional security group",
161+
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with an additional security group",
162+
cluster: openStackCluster,
121163
spec: &infrav1.OpenStackMachineSpec{
122164
Flavor: ptr.To(flavorName),
123165
Image: image,
@@ -139,7 +181,26 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
139181
},
140182
},
141183
{
142-
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavor and flavorID specified",
184+
name: "Test a OpenStackMachineSpec to OpenStackServerSpec conversion with a specified subnet",
185+
cluster: openStackClusterWithSubnet,
186+
spec: &infrav1.OpenStackMachineSpec{
187+
Flavor: ptr.To(flavorName),
188+
Image: image,
189+
SSHKeyName: sshKeyName,
190+
},
191+
want: &infrav1alpha1.OpenStackServerSpec{
192+
Flavor: ptr.To(flavorName),
193+
IdentityRef: identityRef,
194+
Image: image,
195+
SSHKeyName: sshKeyName,
196+
Ports: portOptsWithAdditionalSubnet,
197+
Tags: tags,
198+
UserDataRef: userData,
199+
},
200+
},
201+
{
202+
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavor and flavorID specified",
203+
cluster: openStackCluster,
143204
spec: &infrav1.OpenStackMachineSpec{
144205
Flavor: ptr.To(flavorName),
145206
FlavorID: ptr.To(flavorUUID),
@@ -158,7 +219,8 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
158219
},
159220
},
160221
{
161-
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavorID specified but not flavor",
222+
name: "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavorID specified but not flavor",
223+
cluster: openStackCluster,
162224
spec: &infrav1.OpenStackMachineSpec{
163225
FlavorID: ptr.To(flavorUUID),
164226
Image: image,
@@ -178,7 +240,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
178240
for i := range tests {
179241
tt := tests[i]
180242
t.Run(tt.name, func(t *testing.T) {
181-
spec := openStackMachineSpecToOpenStackServerSpec(tt.spec, identityRef, tags, "", userData, &openStackCluster.Status.WorkerSecurityGroup.ID, openStackCluster.Status.Network.ID)
243+
spec := openStackMachineSpecToOpenStackServerSpec(tt.spec, identityRef, tags, "", userData, &openStackCluster.Status.WorkerSecurityGroup.ID, tt.cluster)
182244
if !reflect.DeepEqual(spec, tt.want) {
183245
t.Errorf("openStackMachineSpecToOpenStackServerSpec() got = %+v, want %+v", spec, tt.want)
184246
}

0 commit comments

Comments
 (0)