Skip to content

Commit 0dcc046

Browse files
committed
🐛 correction of issue #2617 selected fixed subnet not applied
1 parent b3412b5 commit 0dcc046

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
@@ -586,7 +586,7 @@ func bastionToOpenStackServerSpec(openStackCluster *infrav1.OpenStackCluster) *i
586586
if bastion.AvailabilityZone != nil {
587587
az = *bastion.AvailabilityZone
588588
}
589-
openStackServerSpec := openStackMachineSpecToOpenStackServerSpec(bastion.Spec, openStackCluster.Spec.IdentityRef, compute.InstanceTags(bastion.Spec, openStackCluster), az, nil, getBastionSecurityGroupID(openStackCluster), openStackCluster.Status.Network.ID)
589+
openStackServerSpec := openStackMachineSpecToOpenStackServerSpec(bastion.Spec, openStackCluster.Spec.IdentityRef, compute.InstanceTags(bastion.Spec, openStackCluster), az, nil, getBastionSecurityGroupID(openStackCluster), openStackCluster)
590590

591591
return openStackServerSpec
592592
}

controllers/openstackmachine_controller.go

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

480480
// openStackMachineSpecToOpenStackServerSpec converts an OpenStackMachineSpec to an OpenStackServerSpec.
481481
// It returns the OpenStackServerSpec object and an error if there is any.
482-
func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.OpenStackMachineSpec, identityRef infrav1.OpenStackIdentityReference, tags []string, failureDomain string, userDataRef *corev1.LocalObjectReference, defaultSecGroup *string, defaultNetworkID string) *infrav1alpha1.OpenStackServerSpec {
482+
func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.OpenStackMachineSpec, identityRef infrav1.OpenStackIdentityReference, tags []string, failureDomain string, userDataRef *corev1.LocalObjectReference, defaultSecGroup *string, openStackCluster *infrav1.OpenStackCluster) *infrav1alpha1.OpenStackServerSpec {
483483
openStackServerSpec := &infrav1alpha1.OpenStackServerSpec{
484484
AdditionalBlockDevices: openStackMachineSpec.AdditionalBlockDevices,
485485
ConfigDrive: openStackMachineSpec.ConfigDrive,
@@ -520,21 +520,39 @@ func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.Ope
520520
if len(openStackMachineSpec.Ports) == 0 {
521521
serverPorts = make([]infrav1.PortOpts, 1)
522522
}
523+
524+
var fixedIPs []infrav1.FixedIP
525+
if len(openStackCluster.Spec.Subnets) > 0 {
526+
fixedIPs = make([]infrav1.FixedIP, len(openStackCluster.Spec.Subnets))
527+
for idx, sn := range openStackCluster.Spec.Subnets {
528+
fixedIPs[idx] = infrav1.FixedIP{
529+
Subnet: &sn,
530+
}
531+
}
532+
}
533+
523534
for i := range serverPorts {
524-
if serverPorts[i].Network == nil {
525-
serverPorts[i].Network = &infrav1.NetworkParam{
526-
ID: &defaultNetworkID,
535+
serverPort := &serverPorts[i]
536+
if serverPort.Network == nil {
537+
if openStackCluster.Status.Network.ID != "" {
538+
serverPort.Network = &infrav1.NetworkParam{
539+
ID: &openStackCluster.Status.Network.ID,
540+
}
541+
if len(fixedIPs) > 0 {
542+
serverPort.FixedIPs = fixedIPs
543+
}
544+
527545
}
528546
}
529-
if len(serverPorts[i].SecurityGroups) == 0 && defaultSecGroup != nil {
530-
serverPorts[i].SecurityGroups = []infrav1.SecurityGroupParam{
547+
if len(serverPort.SecurityGroups) == 0 && defaultSecGroup != nil {
548+
serverPort.SecurityGroups = []infrav1.SecurityGroupParam{
531549
{
532550
ID: defaultSecGroup,
533551
},
534552
}
535553
}
536554
if len(openStackMachineSpec.SecurityGroups) > 0 {
537-
serverPorts[i].SecurityGroups = append(serverPorts[i].SecurityGroups, openStackMachineSpec.SecurityGroups...)
555+
serverPort.SecurityGroups = append(serverPort.SecurityGroups, openStackMachineSpec.SecurityGroups...)
538556
}
539557
}
540558
openStackServerSpec.Ports = serverPorts
@@ -588,7 +606,7 @@ func (r *OpenStackMachineReconciler) getOrCreateMachineServer(ctx context.Contex
588606
}
589607
return openStackCluster.Spec.IdentityRef
590608
}()
591-
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
609+
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster)
592610
machineServer = &infrav1alpha1.OpenStackServer{
593611
ObjectMeta: metav1.ObjectMeta{
594612
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)