Skip to content

Commit c4b8b3c

Browse files
Add support for SSHKey and Image names (VPC) (#989)
Signed-off-by: Prajyot-Parab <[email protected]> Signed-off-by: Prajyot-Parab <[email protected]>
1 parent 9195fba commit c4b8b3c

22 files changed

+734
-93
lines changed

api/v1beta1/ibmvpc_conversion.go

Lines changed: 126 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
apiconversion "k8s.io/apimachinery/pkg/conversion"
21+
2022
"sigs.k8s.io/controller-runtime/pkg/conversion"
2123

24+
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
25+
2226
infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
2327
)
2428

@@ -49,13 +53,58 @@ func (dst *IBMVPCClusterList) ConvertFrom(srcRaw conversion.Hub) error {
4953
func (src *IBMVPCMachine) ConvertTo(dstRaw conversion.Hub) error {
5054
dst := dstRaw.(*infrav1beta2.IBMVPCMachine)
5155

52-
return Convert_v1beta1_IBMVPCMachine_To_v1beta2_IBMVPCMachine(src, dst, nil)
56+
if err := Convert_v1beta1_IBMVPCMachine_To_v1beta2_IBMVPCMachine(src, dst, nil); err != nil {
57+
return err
58+
}
59+
60+
if src.Spec.Image != "" {
61+
dst.Spec.Image = &infrav1beta2.IBMVPCResourceReference{
62+
ID: &src.Spec.Image,
63+
}
64+
}
65+
66+
if src.Spec.ImageName != "" {
67+
dst.Spec.Image = &infrav1beta2.IBMVPCResourceReference{
68+
Name: &src.Spec.ImageName,
69+
}
70+
}
71+
72+
for _, sshKey := range src.Spec.SSHKeyNames {
73+
dst.Spec.SSHKeys = append(dst.Spec.SSHKeys, &infrav1beta2.IBMVPCResourceReference{
74+
Name: sshKey,
75+
})
76+
}
77+
78+
return nil
5379
}
5480

5581
func (dst *IBMVPCMachine) ConvertFrom(srcRaw conversion.Hub) error {
5682
src := srcRaw.(*infrav1beta2.IBMVPCMachine)
5783

58-
return Convert_v1beta2_IBMVPCMachine_To_v1beta1_IBMVPCMachine(src, dst, nil)
84+
if err := Convert_v1beta2_IBMVPCMachine_To_v1beta1_IBMVPCMachine(src, dst, nil); err != nil {
85+
return err
86+
}
87+
88+
// Preserve Hub data on down-conversion except for metadata
89+
if err := utilconversion.MarshalData(src, dst); err != nil {
90+
return err
91+
}
92+
93+
if src.Spec.Image != nil && src.Spec.Image.ID != nil {
94+
dst.Spec.Image = *src.Spec.Image.ID
95+
}
96+
97+
if src.Spec.Image != nil && src.Spec.Image.Name != nil {
98+
dst.Spec.ImageName = *src.Spec.Image.Name
99+
}
100+
101+
for _, sshKey := range src.Spec.SSHKeys {
102+
if sshKey.Name != nil {
103+
dst.Spec.SSHKeyNames = append(dst.Spec.SSHKeyNames, sshKey.Name)
104+
}
105+
}
106+
107+
return nil
59108
}
60109

61110
func (src *IBMVPCMachineList) ConvertTo(dstRaw conversion.Hub) error {
@@ -73,13 +122,58 @@ func (dst *IBMVPCMachineList) ConvertFrom(srcRaw conversion.Hub) error {
73122
func (src *IBMVPCMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
74123
dst := dstRaw.(*infrav1beta2.IBMVPCMachineTemplate)
75124

76-
return Convert_v1beta1_IBMVPCMachineTemplate_To_v1beta2_IBMVPCMachineTemplate(src, dst, nil)
125+
if err := Convert_v1beta1_IBMVPCMachineTemplate_To_v1beta2_IBMVPCMachineTemplate(src, dst, nil); err != nil {
126+
return err
127+
}
128+
129+
if src.Spec.Template.Spec.Image != "" {
130+
dst.Spec.Template.Spec.Image = &infrav1beta2.IBMVPCResourceReference{
131+
ID: &src.Spec.Template.Spec.Image,
132+
}
133+
}
134+
135+
if src.Spec.Template.Spec.ImageName != "" {
136+
dst.Spec.Template.Spec.Image = &infrav1beta2.IBMVPCResourceReference{
137+
Name: &src.Spec.Template.Spec.ImageName,
138+
}
139+
}
140+
141+
for _, sshKey := range src.Spec.Template.Spec.SSHKeyNames {
142+
dst.Spec.Template.Spec.SSHKeys = append(dst.Spec.Template.Spec.SSHKeys, &infrav1beta2.IBMVPCResourceReference{
143+
Name: sshKey,
144+
})
145+
}
146+
147+
return nil
77148
}
78149

79150
func (dst *IBMVPCMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
80151
src := srcRaw.(*infrav1beta2.IBMVPCMachineTemplate)
81152

82-
return Convert_v1beta2_IBMVPCMachineTemplate_To_v1beta1_IBMVPCMachineTemplate(src, dst, nil)
153+
if err := Convert_v1beta2_IBMVPCMachineTemplate_To_v1beta1_IBMVPCMachineTemplate(src, dst, nil); err != nil {
154+
return err
155+
}
156+
157+
// Preserve Hub data on down-conversion except for metadata
158+
if err := utilconversion.MarshalData(src, dst); err != nil {
159+
return err
160+
}
161+
162+
if src.Spec.Template.Spec.Image != nil && src.Spec.Template.Spec.Image.ID != nil {
163+
dst.Spec.Template.Spec.Image = *src.Spec.Template.Spec.Image.ID
164+
}
165+
166+
if src.Spec.Template.Spec.Image != nil && src.Spec.Template.Spec.Image.Name != nil {
167+
dst.Spec.Template.Spec.ImageName = *src.Spec.Template.Spec.Image.Name
168+
}
169+
170+
for _, sshKey := range src.Spec.Template.Spec.SSHKeys {
171+
if sshKey.Name != nil {
172+
dst.Spec.Template.Spec.SSHKeyNames = append(dst.Spec.Template.Spec.SSHKeyNames, sshKey.Name)
173+
}
174+
}
175+
176+
return nil
83177
}
84178

85179
func (src *IBMVPCMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error {
@@ -93,3 +187,31 @@ func (dst *IBMVPCMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
93187

94188
return Convert_v1beta2_IBMVPCMachineTemplateList_To_v1beta1_IBMVPCMachineTemplateList(src, dst, nil)
95189
}
190+
191+
func Convert_v1beta1_IBMVPCMachineSpec_To_v1beta2_IBMVPCMachineSpec(in *IBMVPCMachineSpec, out *infrav1beta2.IBMVPCMachineSpec, s apiconversion.Scope) error {
192+
return autoConvert_v1beta1_IBMVPCMachineSpec_To_v1beta2_IBMVPCMachineSpec(in, out, s)
193+
}
194+
195+
func Convert_v1beta2_IBMVPCMachineSpec_To_v1beta1_IBMVPCMachineSpec(in *infrav1beta2.IBMVPCMachineSpec, out *IBMVPCMachineSpec, s apiconversion.Scope) error {
196+
return autoConvert_v1beta2_IBMVPCMachineSpec_To_v1beta1_IBMVPCMachineSpec(in, out, s)
197+
}
198+
199+
func Convert_Slice_Pointer_string_To_Slice_Pointer_v1beta2_IBMVPCResourceReference(in *[]*string, out *[]*infrav1beta2.IBMVPCResourceReference, s apiconversion.Scope) error {
200+
for _, sshKey := range *in {
201+
*out = append(*out, &infrav1beta2.IBMVPCResourceReference{
202+
ID: sshKey,
203+
})
204+
}
205+
return nil
206+
}
207+
208+
func Convert_Slice_Pointer_v1beta2_IBMVPCResourceReference_To_Slice_Pointer_string(in *[]*infrav1beta2.IBMVPCResourceReference, out *[]*string, s apiconversion.Scope) error {
209+
if in != nil {
210+
for _, sshKey := range *in {
211+
if sshKey.ID != nil {
212+
*out = append(*out, sshKey.ID)
213+
}
214+
}
215+
}
216+
return nil
217+
}

api/v1beta1/ibmvpcmachine_types.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ type IBMVPCMachineSpec struct {
3737
Name string `json:"name,omitempty"`
3838

3939
// Image is the id of OS image which would be install on the instance.
40+
// +optional
4041
// Example: r134-ed3f775f-ad7e-4e37-ae62-7199b4988b00
41-
// TODO: allow user to specify a image name is much reasonable. Example: ibm-ubuntu-18-04-1-minimal-amd64-2
42-
Image string `json:"image"`
42+
Image string `json:"image,omitempty"`
43+
44+
// ImageName is the name of OS image which would be install on the instance.
45+
// +optional
46+
ImageName string `json:"imageName,omitempty"`
4347

4448
// Zone is the place where the instance should be created. Example: us-south-3
4549
// TODO: Actually zone is transparent to user. The field user can access is location. Example: Dallas 2
@@ -62,7 +66,12 @@ type IBMVPCMachineSpec struct {
6266
PrimaryNetworkInterface NetworkInterface `json:"primaryNetworkInterface,omitempty"`
6367

6468
// SSHKeys is the SSH pub keys that will be used to access VM.
69+
// +optional
6570
SSHKeys []*string `json:"sshKeys,omitempty"`
71+
72+
// SSHKeysNames is the SSH pub key names that will be used to access VM.
73+
// +optional
74+
SSHKeyNames []*string `json:"sshKeyNames,omitempty"`
6675
}
6776

6877
// VPCVolume defines the volume information for the instance.

api/v1beta1/zz_generated.conversion.go

Lines changed: 74 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)