From 3aafbda34645727df5b9283e5ae5c13ad4af8aaf Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 11:35:21 +0530 Subject: [PATCH 01/14] Add support for image lookup --- api/v1beta1/ocimachine_conversion.go | 2 +- api/v1beta2/types.go | 7 +++++++ cloud/scope/machine.go | 22 +++++++++++++++++++++- cloud/services/compute/client.go | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index df787a175..3eeb9619e 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -34,7 +34,7 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } - + dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup return nil } diff --git a/api/v1beta2/types.go b/api/v1beta2/types.go index 5544f530a..0343f8d0f 100644 --- a/api/v1beta2/types.go +++ b/api/v1beta2/types.go @@ -180,6 +180,13 @@ type InstanceSourceViaImageConfig struct { // * `30`-`120`: Represents the Ultra High Performance option. // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` + + ImageLookup *ImageLookup `json:"imageLookup,omitempty"` +} + +type ImageLookup struct { + OperatingSystem *string `json:"operatingSystem,omitempty"` + OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` } // LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum Enum with underlying type: string diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index a43ea0a0c..4924571b2 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -159,8 +159,28 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, shapeConfig.BaselineOcpuUtilization = value } } + imageId := m.OCIMachine.Spec.ImageId + if imageId == "" && m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup != nil { + lookupSpec := m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup + response, err := m.ComputeClient.ListImages(ctx, core.ListImagesRequest{ + CompartmentId: common.String(m.getCompartmentId()), + OperatingSystem: lookupSpec.OperatingSystem, + OperatingSystemVersion: lookupSpec.OperatingSystemVersion, + Limit: common.Int(1), + SortBy: core.ListImagesSortByTimecreated, + }) + if err != nil { + return nil, err + } + if len(response.Items) == 0 { + return nil, errors.New(fmt.Sprintf("could not lookup image from lookup parameters")) + } + imageId = *response.Items[0].Id + } else { + return nil, errors.New(fmt.Sprintf("image id and image lookup not provided")) + } sourceDetails := core.InstanceSourceViaImageDetails{ - ImageId: common.String(m.OCIMachine.Spec.ImageId), + ImageId: common.String(imageId), } if m.OCIMachine.Spec.BootVolumeSizeInGBs != "" { bootVolumeSizeInGBsString := m.OCIMachine.Spec.BootVolumeSizeInGBs diff --git a/cloud/services/compute/client.go b/cloud/services/compute/client.go index 58fda1581..e907f4531 100644 --- a/cloud/services/compute/client.go +++ b/cloud/services/compute/client.go @@ -29,4 +29,5 @@ type ComputeClient interface { ListInstances(ctx context.Context, request core.ListInstancesRequest) (response core.ListInstancesResponse, err error) AttachVnic(ctx context.Context, request core.AttachVnicRequest) (response core.AttachVnicResponse, err error) ListVnicAttachments(ctx context.Context, request core.ListVnicAttachmentsRequest) (response core.ListVnicAttachmentsResponse, err error) + ListImages(ctx context.Context, request core.ListImagesRequest) (response core.ListImagesResponse, err error) } From a3bedeb94fa7c317b2617779009870513af0bfc3 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 11:41:25 +0530 Subject: [PATCH 02/14] Add support for image lookup --- .../bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml | 7 +++++++ ...nfrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml | 7 +++++++ go.mod | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml index 0ae23184f..1b8fef7e3 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml @@ -949,6 +949,13 @@ spec: default (minimum) VPUs/GB.' format: int64 type: integer + imageLookup: + properties: + operatingSystem: + type: string + operatingSystemVersion: + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot volume. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml index 0a542241b..284d76baf 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml @@ -946,6 +946,13 @@ spec: VPUs/GB.' format: int64 type: integer + imageLookup: + properties: + operatingSystem: + type: string + operatingSystemVersion: + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot diff --git a/go.mod b/go.mod index e3ed2341d..be15d2bdd 100644 --- a/go.mod +++ b/go.mod @@ -88,7 +88,6 @@ require ( github.com/opencontainers/image-spec v1.0.2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/prometheus/client_golang v1.15.1 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect From 19c109da3c3d974bbf7f5a4865739c14adcb39c6 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 13:28:36 +0530 Subject: [PATCH 03/14] Add support for image lookup --- cloud/scope/subnet_reconciler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cloud/scope/subnet_reconciler.go b/cloud/scope/subnet_reconciler.go index 83a8cbbc0..683f1f754 100644 --- a/cloud/scope/subnet_reconciler.go +++ b/cloud/scope/subnet_reconciler.go @@ -49,6 +49,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { s.Logger.Info("Created the security list", "ocid", seclistId) desiredSubnet.SecurityList.ID = seclistId } else { + desiredSubnet.SecurityList.ID = securityList.Id if s.IsSecurityListEqual(*securityList, *desiredSubnet.SecurityList) { s.Logger.Info("No Reconciliation Required for Security List", "securitylist", securityList.Id) } else { From c0ed6b736b940a19472a909ef221fd3b65c83419 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 13:38:21 +0530 Subject: [PATCH 04/14] Add support for image lookup --- api/v1beta1/ocimachine_conversion.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index 3eeb9619e..42153fd31 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -34,7 +34,9 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } - dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup + if dst.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.InstanceSourceViaImageDetails != nil { + dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup + } return nil } From 609551b520700a891fc25161173d72bac96601c4 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 13:40:23 +0530 Subject: [PATCH 05/14] Add support for image lookup --- cloud/scope/machine.go | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 4924571b2..cfdb2b762 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -160,24 +160,26 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, } } imageId := m.OCIMachine.Spec.ImageId - if imageId == "" && m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup != nil { + if imageId == "" { lookupSpec := m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup - response, err := m.ComputeClient.ListImages(ctx, core.ListImagesRequest{ - CompartmentId: common.String(m.getCompartmentId()), - OperatingSystem: lookupSpec.OperatingSystem, - OperatingSystemVersion: lookupSpec.OperatingSystemVersion, - Limit: common.Int(1), - SortBy: core.ListImagesSortByTimecreated, - }) - if err != nil { - return nil, err - } - if len(response.Items) == 0 { - return nil, errors.New(fmt.Sprintf("could not lookup image from lookup parameters")) + if lookupSpec != nil { + response, err := m.ComputeClient.ListImages(ctx, core.ListImagesRequest{ + CompartmentId: common.String(m.getCompartmentId()), + OperatingSystem: lookupSpec.OperatingSystem, + OperatingSystemVersion: lookupSpec.OperatingSystemVersion, + Limit: common.Int(1), + SortBy: core.ListImagesSortByTimecreated, + }) + if err != nil { + return nil, err + } + if len(response.Items) == 0 { + return nil, errors.New(fmt.Sprintf("could not lookup image from lookup parameters")) + } + imageId = *response.Items[0].Id + } else { + return nil, errors.New(fmt.Sprintf("image id and image lookup not provided")) } - imageId = *response.Items[0].Id - } else { - return nil, errors.New(fmt.Sprintf("image id and image lookup not provided")) } sourceDetails := core.InstanceSourceViaImageDetails{ ImageId: common.String(imageId), From 2b1cc08db57aa645faff449a8d393493a145647f Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 15:55:42 +0530 Subject: [PATCH 06/14] Add support for image lookup --- api/v1beta1/conversion.go | 4 +++ api/v1beta1/ocimachine_conversion.go | 4 ++- api/v1beta1/zz_generated.conversion.go | 36 +++++++++++++++++--------- api/v1beta2/zz_generated.deepcopy.go | 30 +++++++++++++++++++++ 4 files changed, 61 insertions(+), 13 deletions(-) diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 9b981d24d..26ea45818 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -132,3 +132,7 @@ func Convert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachineSpec func Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in *v1beta2.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { return autoConvert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in, out, s) } + +func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { + return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) +} diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index 42153fd31..cc5f7547c 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -76,7 +76,9 @@ func (r *OCIMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(r, restored); err != nil || !ok { return err } - + if dst.Spec.Template.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.Template.Spec.InstanceSourceViaImageDetails != nil { + dst.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup + } return nil } diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index 7c6b2869b..f76a1844c 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -165,11 +165,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*IntelIcelakeBmPlatformConfig)(nil), (*v1beta2.IntelIcelakeBmPlatformConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(a.(*IntelIcelakeBmPlatformConfig), b.(*v1beta2.IntelIcelakeBmPlatformConfig), scope) }); err != nil { @@ -615,6 +610,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(a.(*v1beta2.LoadBalancer), b.(*LoadBalancer), scope) }); err != nil { @@ -1005,14 +1005,10 @@ func Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaIm func autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) + // WARNING: in.ImageLookup requires manual conversion: does not exist in peer-type return nil } -// Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig is an autogenerated conversion function. -func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { - return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) -} - func autoConvert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(in *IntelIcelakeBmPlatformConfig, out *v1beta2.IntelIcelakeBmPlatformConfig, s conversion.Scope) error { out.IsSecureBootEnabled = (*bool)(unsafe.Pointer(in.IsSecureBootEnabled)) out.IsTrustedPlatformModuleEnabled = (*bool)(unsafe.Pointer(in.IsTrustedPlatformModuleEnabled)) @@ -1782,7 +1778,15 @@ func autoConvert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachine out.AvailabilityConfig = (*v1beta2.LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*v1beta2.PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*v1beta2.LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - out.InstanceSourceViaImageDetails = (*v1beta2.InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) + if in.InstanceSourceViaImageDetails != nil { + in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails + *out = new(v1beta2.InstanceSourceViaImageConfig) + if err := Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.InstanceSourceViaImageDetails = nil + } out.PlatformConfig = (*v1beta2.PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) @@ -1815,7 +1819,15 @@ func autoConvert_v1beta2_OCIMachineSpec_To_v1beta1_OCIMachineSpec(in *v1beta2.OC out.AvailabilityConfig = (*LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - out.InstanceSourceViaImageDetails = (*InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) + if in.InstanceSourceViaImageDetails != nil { + in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails + *out = new(InstanceSourceViaImageConfig) + if err := Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.InstanceSourceViaImageDetails = nil + } out.PlatformConfig = (*PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) diff --git a/api/v1beta2/zz_generated.deepcopy.go b/api/v1beta2/zz_generated.deepcopy.go index 25e07349e..32539b027 100644 --- a/api/v1beta2/zz_generated.deepcopy.go +++ b/api/v1beta2/zz_generated.deepcopy.go @@ -435,6 +435,31 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { + *out = *in + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.OperatingSystemVersion != nil { + in, out := &in.OperatingSystemVersion, &out.OperatingSystemVersion + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLookup. +func (in *ImageLookup) DeepCopy() *ImageLookup { + if in == nil { + return nil + } + out := new(ImageLookup) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressSecurityRule) DeepCopyInto(out *IngressSecurityRule) { *out = *in @@ -554,6 +579,11 @@ func (in *InstanceSourceViaImageConfig) DeepCopyInto(out *InstanceSourceViaImage *out = new(int64) **out = **in } + if in.ImageLookup != nil { + in, out := &in.ImageLookup, &out.ImageLookup + *out = new(ImageLookup) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceSourceViaImageConfig. From c38f681a2fbd3db464d84871637a5f4d516913e8 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 16:41:05 +0530 Subject: [PATCH 07/14] Add support for image lookup --- api/v1beta1/conversion.go | 4 -- api/v1beta1/ocimachine_conversion.go | 6 -- api/v1beta1/types.go | 7 ++ api/v1beta1/zz_generated.conversion.go | 70 ++++++++++++------- api/v1beta1/zz_generated.deepcopy.go | 30 ++++++++ ...tructure.cluster.x-k8s.io_ocimachines.yaml | 7 ++ ....cluster.x-k8s.io_ocimachinetemplates.yaml | 7 ++ 7 files changed, 97 insertions(+), 34 deletions(-) diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 26ea45818..9b981d24d 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -132,7 +132,3 @@ func Convert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachineSpec func Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in *v1beta2.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { return autoConvert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in, out, s) } - -func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { - return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) -} diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index cc5f7547c..caa1b9608 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -34,9 +34,6 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } - if dst.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.InstanceSourceViaImageDetails != nil { - dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup - } return nil } @@ -76,9 +73,6 @@ func (r *OCIMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(r, restored); err != nil || !ok { return err } - if dst.Spec.Template.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.Template.Spec.InstanceSourceViaImageDetails != nil { - dst.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup - } return nil } diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go index 36a7c8f26..ee02b0fd9 100644 --- a/api/v1beta1/types.go +++ b/api/v1beta1/types.go @@ -187,6 +187,13 @@ type InstanceSourceViaImageConfig struct { // * `30`-`120`: Represents the Ultra High Performance option. // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` + + ImageLookup *ImageLookup `json:"imageLookup,omitempty"` +} + +type ImageLookup struct { + OperatingSystem *string `json:"operatingSystem,omitempty"` + OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` } // LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum Enum with underlying type: string diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index f76a1844c..4e5d91e09 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -125,6 +125,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ImageLookup)(nil), (*v1beta2.ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(a.(*ImageLookup), b.(*v1beta2.ImageLookup), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta2.ImageLookup)(nil), (*ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(a.(*v1beta2.ImageLookup), b.(*ImageLookup), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*IngressSecurityRule)(nil), (*v1beta2.IngressSecurityRule)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(a.(*IngressSecurityRule), b.(*v1beta2.IngressSecurityRule), scope) }); err != nil { @@ -165,6 +175,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*IntelIcelakeBmPlatformConfig)(nil), (*v1beta2.IntelIcelakeBmPlatformConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(a.(*IntelIcelakeBmPlatformConfig), b.(*v1beta2.IntelIcelakeBmPlatformConfig), scope) }); err != nil { @@ -610,11 +625,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) - }); err != nil { - return err - } if err := s.AddConversionFunc((*v1beta2.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(a.(*v1beta2.LoadBalancer), b.(*LoadBalancer), scope) }); err != nil { @@ -895,6 +905,28 @@ func Convert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in *v1beta2.IcmpOptions, return autoConvert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in, out, s) } +func autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { + out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) + out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) + return nil +} + +// Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup is an autogenerated conversion function. +func Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { + return autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in, out, s) +} + +func autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { + out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) + out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) + return nil +} + +// Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup is an autogenerated conversion function. +func Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { + return autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in, out, s) +} + func autoConvert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(in *IngressSecurityRule, out *v1beta2.IngressSecurityRule, s conversion.Scope) error { out.Protocol = (*string)(unsafe.Pointer(in.Protocol)) out.Source = (*string)(unsafe.Pointer(in.Source)) @@ -994,6 +1026,7 @@ func Convert_v1beta2_InstanceOptions_To_v1beta1_InstanceOptions(in *v1beta2.Inst func autoConvert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(in *InstanceSourceViaImageConfig, out *v1beta2.InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) + out.ImageLookup = (*v1beta2.ImageLookup)(unsafe.Pointer(in.ImageLookup)) return nil } @@ -1005,10 +1038,15 @@ func Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaIm func autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) - // WARNING: in.ImageLookup requires manual conversion: does not exist in peer-type + out.ImageLookup = (*ImageLookup)(unsafe.Pointer(in.ImageLookup)) return nil } +// Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig is an autogenerated conversion function. +func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { + return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) +} + func autoConvert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(in *IntelIcelakeBmPlatformConfig, out *v1beta2.IntelIcelakeBmPlatformConfig, s conversion.Scope) error { out.IsSecureBootEnabled = (*bool)(unsafe.Pointer(in.IsSecureBootEnabled)) out.IsTrustedPlatformModuleEnabled = (*bool)(unsafe.Pointer(in.IsTrustedPlatformModuleEnabled)) @@ -1778,15 +1816,7 @@ func autoConvert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachine out.AvailabilityConfig = (*v1beta2.LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*v1beta2.PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*v1beta2.LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - if in.InstanceSourceViaImageDetails != nil { - in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails - *out = new(v1beta2.InstanceSourceViaImageConfig) - if err := Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.InstanceSourceViaImageDetails = nil - } + out.InstanceSourceViaImageDetails = (*v1beta2.InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) out.PlatformConfig = (*v1beta2.PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) @@ -1819,15 +1849,7 @@ func autoConvert_v1beta2_OCIMachineSpec_To_v1beta1_OCIMachineSpec(in *v1beta2.OC out.AvailabilityConfig = (*LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - if in.InstanceSourceViaImageDetails != nil { - in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails - *out = new(InstanceSourceViaImageConfig) - if err := Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.InstanceSourceViaImageDetails = nil - } + out.InstanceSourceViaImageDetails = (*InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) out.PlatformConfig = (*PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index 8f0aea450..652f1265e 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -385,6 +385,31 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { + *out = *in + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.OperatingSystemVersion != nil { + in, out := &in.OperatingSystemVersion, &out.OperatingSystemVersion + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLookup. +func (in *ImageLookup) DeepCopy() *ImageLookup { + if in == nil { + return nil + } + out := new(ImageLookup) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressSecurityRule) DeepCopyInto(out *IngressSecurityRule) { *out = *in @@ -509,6 +534,11 @@ func (in *InstanceSourceViaImageConfig) DeepCopyInto(out *InstanceSourceViaImage *out = new(int64) **out = **in } + if in.ImageLookup != nil { + in, out := &in.ImageLookup, &out.ImageLookup + *out = new(ImageLookup) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceSourceViaImageConfig. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml index 1b8fef7e3..8c4d373c7 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml @@ -188,6 +188,13 @@ spec: default (minimum) VPUs/GB.' format: int64 type: integer + imageLookup: + properties: + operatingSystem: + type: string + operatingSystemVersion: + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot volume. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml index 284d76baf..67f70b6eb 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml @@ -206,6 +206,13 @@ spec: VPUs/GB.' format: int64 type: integer + imageLookup: + properties: + operatingSystem: + type: string + operatingSystemVersion: + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot From a9aff2b9420c93b84c9534d8e76b8707a03970ac Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 17:01:19 +0530 Subject: [PATCH 08/14] Add support for image lookup --- cloud/scope/machine.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index cfdb2b762..7e254d01f 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -167,6 +167,7 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, CompartmentId: common.String(m.getCompartmentId()), OperatingSystem: lookupSpec.OperatingSystem, OperatingSystemVersion: lookupSpec.OperatingSystemVersion, + Shape: common.String(m.OCIMachine.Spec.Shape), Limit: common.Int(1), SortBy: core.ListImagesSortByTimecreated, }) From e64ebe5e4f376be7d8301e9dbbfb482a5f6e1a13 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 17:35:50 +0530 Subject: [PATCH 09/14] Add support for image lookup --- cloud/scope/subnet_reconciler.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cloud/scope/subnet_reconciler.go b/cloud/scope/subnet_reconciler.go index 683f1f754..9c6c6deb2 100644 --- a/cloud/scope/subnet_reconciler.go +++ b/cloud/scope/subnet_reconciler.go @@ -35,7 +35,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { } if subnet != nil { subnetOCID := subnet.Id - desiredSubnet.ID = subnetOCID + //desiredSubnet.ID = subnetOCID if desiredSubnet.SecurityList != nil { securityList, err := s.GetSecurityList(ctx, *desiredSubnet.SecurityList) if err != nil { @@ -49,7 +49,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { s.Logger.Info("Created the security list", "ocid", seclistId) desiredSubnet.SecurityList.ID = seclistId } else { - desiredSubnet.SecurityList.ID = securityList.Id + //desiredSubnet.SecurityList.ID = securityList.Id if s.IsSecurityListEqual(*securityList, *desiredSubnet.SecurityList) { s.Logger.Info("No Reconciliation Required for Security List", "securitylist", securityList.Id) } else { @@ -88,6 +88,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { } s.Logger.Info("Created the subnet", "ocid", subnetId) desiredSubnet.ID = subnetId + s.Logger.Info("subnet", "s", desiredSubnet) } return nil } @@ -252,9 +253,9 @@ func (s *ClusterScope) IsSubnetsEqual(actual *core.Subnet, desired infrastructur return false } if desired.SecurityList != nil { - if *desired.SecurityList.ID != actual.SecurityListIds[0] { - return false - } + //if *desired.SecurityList.ID != actual.SecurityListIds[0] { + // return false + //} } return true } From 6b46285b98635e2eb194b68f2995dfff58859308 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Tue, 6 Jun 2023 17:52:22 +0530 Subject: [PATCH 10/14] Add support for image lookup --- cloud/scope/subnet_reconciler.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cloud/scope/subnet_reconciler.go b/cloud/scope/subnet_reconciler.go index 9c6c6deb2..a8ff891fb 100644 --- a/cloud/scope/subnet_reconciler.go +++ b/cloud/scope/subnet_reconciler.go @@ -88,7 +88,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { } s.Logger.Info("Created the subnet", "ocid", subnetId) desiredSubnet.ID = subnetId - s.Logger.Info("subnet", "s", desiredSubnet) + //s.Logger.Info("subnet", "s", desiredSubnet) } return nil } @@ -253,9 +253,9 @@ func (s *ClusterScope) IsSubnetsEqual(actual *core.Subnet, desired infrastructur return false } if desired.SecurityList != nil { - //if *desired.SecurityList.ID != actual.SecurityListIds[0] { - // return false - //} + if *desired.SecurityList.ID != actual.SecurityListIds[0] { + return false + } } return true } From 16558f2d18c32acc3c59b70f0d0b5a80488100fc Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Fri, 9 Jun 2023 09:19:10 +0530 Subject: [PATCH 11/14] Add support for image lookup --- api/v1beta1/ocimachine_conversion.go | 1 + api/v1beta1/types.go | 7 +- cloud/scope/machine.go | 5 +- cloud/scope/machine_test.go | 96 ++++++++++++++++++- cloud/scope/subnet_reconciler.go | 5 +- .../compute/mock_compute/client_mock.go | 21 +++- 6 files changed, 123 insertions(+), 12 deletions(-) diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index caa1b9608..1d0c78cb5 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -34,6 +34,7 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } + return nil } diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go index ee02b0fd9..aeaa706b5 100644 --- a/api/v1beta1/types.go +++ b/api/v1beta1/types.go @@ -188,11 +188,16 @@ type InstanceSourceViaImageConfig struct { // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` + // ImageLookup defines the parameters for looking up images as worker image. ImageLookup *ImageLookup `json:"imageLookup,omitempty"` } +// ImageLookup defines the parameters for looking up images as worker image. type ImageLookup struct { - OperatingSystem *string `json:"operatingSystem,omitempty"` + // OperatingSystem defined the operating system of the image. + OperatingSystem *string `json:"operatingSystem,omitempty"` + + // OperatingSystemVersion defined the version operating system. OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` } diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 7e254d01f..8d4533f54 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -161,8 +161,9 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, } imageId := m.OCIMachine.Spec.ImageId if imageId == "" { - lookupSpec := m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup - if lookupSpec != nil { + if m.OCIMachine.Spec.InstanceSourceViaImageDetails != nil && + m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup != nil { + lookupSpec := m.OCIMachine.Spec.InstanceSourceViaImageDetails.ImageLookup response, err := m.ComputeClient.ListImages(ctx, core.ListImagesRequest{ CompartmentId: common.String(m.getCompartmentId()), OperatingSystem: lookupSpec.OperatingSystem, diff --git a/cloud/scope/machine_test.go b/cloud/scope/machine_test.go index a53477f14..cf47e7f98 100644 --- a/cloud/scope/machine_test.go +++ b/cloud/scope/machine_test.go @@ -218,9 +218,10 @@ func TestInstanceReconciliation(t *testing.T) { matchError: errors.New(fmt.Sprintf("bootVolumeSizeInGBs provided %s is not a valid floating point", "invalid")), testSpecificSetup: func(machineScope *MachineScope, computeClient *mock_compute.MockComputeClient) { + setupAllParams(ms) ms.OCIMachine.Spec.BootVolumeSizeInGBs = "invalid" computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ - DisplayName: common.String("test"), + DisplayName: common.String("name"), CompartmentId: common.String("test"), })).Return(core.ListInstancesResponse{}, nil) }, @@ -231,6 +232,7 @@ func TestInstanceReconciliation(t *testing.T) { matchError: errors.New(fmt.Sprintf("bootVolumeSizeInGBs provided %s is not a valid floating point", "invalid")), testSpecificSetup: func(machineScope *MachineScope, computeClient *mock_compute.MockComputeClient) { + setupAllParams(ms) ms.OCIMachine.Spec.InstanceId = nil ms.OCIMachine.Name = "test" ms.OCIMachine.Spec.BootVolumeSizeInGBs = "invalid" @@ -246,9 +248,10 @@ func TestInstanceReconciliation(t *testing.T) { errorSubStringMatch: true, matchError: errors.New("invalid failure domain parameter, must be a valid integer"), testSpecificSetup: func(machineScope *MachineScope, computeClient *mock_compute.MockComputeClient) { + setupAllParams(ms) ms.Machine.Spec.FailureDomain = common.String("invalid") computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ - DisplayName: common.String("test"), + DisplayName: common.String("name"), CompartmentId: common.String("test"), })).Return(core.ListInstancesResponse{}, nil) }, @@ -258,9 +261,10 @@ func TestInstanceReconciliation(t *testing.T) { errorExpected: true, matchError: errors.New("failure domain should be a value between 1 and 3"), testSpecificSetup: func(machineScope *MachineScope, computeClient *mock_compute.MockComputeClient) { + setupAllParams(ms) ms.Machine.Spec.FailureDomain = common.String("4") computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ - DisplayName: common.String("test"), + DisplayName: common.String("name"), CompartmentId: common.String("test"), })).Return(core.ListInstancesResponse{}, nil) }, @@ -381,6 +385,92 @@ func TestInstanceReconciliation(t *testing.T) { OpcRetryToken: ociutil.GetOPCRetryToken("machineuid")})).Return(core.LaunchInstanceResponse{}, nil) }, }, + { + name: "image lookup", + errorExpected: false, + testSpecificSetup: func(machineScope *MachineScope, computeClient *mock_compute.MockComputeClient) { + setupAllParams(ms) + ms.OCIMachine.Spec.ImageId = "" + ms.OCIMachine.Spec.CapacityReservationId = common.String("cap-id") + ms.OCIMachine.Spec.DedicatedVmHostId = common.String("dedicated-host-id") + ms.OCIMachine.Spec.NetworkDetails.HostnameLabel = common.String("hostname-label") + ms.OCIMachine.Spec.NetworkDetails.SkipSourceDestCheck = common.Bool(true) + ms.OCIMachine.Spec.NetworkDetails.AssignPrivateDnsRecord = common.Bool(true) + ms.OCIMachine.Spec.NetworkDetails.DisplayName = common.String("display-name") + ms.OCIMachine.Spec.InstanceSourceViaImageDetails = &infrastructurev1beta2.InstanceSourceViaImageConfig{ + KmsKeyId: common.String("kms-key-id"), + BootVolumeVpusPerGB: common.Int64(32), + ImageLookup: &infrastructurev1beta2.ImageLookup{ + OperatingSystem: common.String("Oracle Linux"), + OperatingSystemVersion: common.String("8"), + }, + } + computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ + DisplayName: common.String("name"), + CompartmentId: common.String("test"), + })).Return(core.ListInstancesResponse{}, nil) + + computeClient.EXPECT().ListImages(gomock.Any(), gomock.Eq(core.ListImagesRequest{ + CompartmentId: common.String("test"), + OperatingSystem: common.String("Oracle Linux"), + OperatingSystemVersion: common.String("8"), + Limit: common.Int(1), + Shape: common.String("shape"), + SortBy: core.ListImagesSortByTimecreated, + })).Return(core.ListImagesResponse{ + Items: []core.Image{ + { + Id: common.String("test-lookup-image"), + }, + }, + }, nil) + + launchDetails := core.LaunchInstanceDetails{DisplayName: common.String("name"), + CapacityReservationId: common.String("cap-id"), + DedicatedVmHostId: common.String("dedicated-host-id"), + SourceDetails: core.InstanceSourceViaImageDetails{ + ImageId: common.String("test-lookup-image"), + BootVolumeSizeInGBs: common.Int64(120), + KmsKeyId: common.String("kms-key-id"), + BootVolumeVpusPerGB: common.Int64(32), + }, + CreateVnicDetails: &core.CreateVnicDetails{ + SubnetId: common.String("nodesubnet"), + AssignPublicIp: common.Bool(false), + DefinedTags: map[string]map[string]interface{}{}, + FreeformTags: map[string]string{ + ociutil.CreatedBy: ociutil.OCIClusterAPIProvider, + ociutil.ClusterResourceIdentifier: "resource_uid", + }, + NsgIds: make([]string, 0), + HostnameLabel: common.String("hostname-label"), + SkipSourceDestCheck: common.Bool(true), + AssignPrivateDnsRecord: common.Bool(true), + DisplayName: common.String("display-name"), + }, + Metadata: map[string]string{ + "user_data": base64.StdEncoding.EncodeToString([]byte("test")), + }, + Shape: common.String("shape"), + ShapeConfig: &core.LaunchInstanceShapeConfigDetails{ + Ocpus: common.Float32(2), + MemoryInGBs: common.Float32(100), + BaselineOcpuUtilization: core.LaunchInstanceShapeConfigDetailsBaselineOcpuUtilization8, + }, + AvailabilityDomain: common.String("ad2"), + CompartmentId: common.String("test"), + IsPvEncryptionInTransitEnabled: common.Bool(true), + DefinedTags: map[string]map[string]interface{}{}, + FreeformTags: map[string]string{ + ociutil.CreatedBy: ociutil.OCIClusterAPIProvider, + ociutil.ClusterResourceIdentifier: "resource_uid", + }, + } + computeClient.EXPECT().LaunchInstance(gomock.Any(), gomock.Eq(core.LaunchInstanceRequest{ + LaunchInstanceDetails: launchDetails, + OpcRetryToken: ociutil.GetOPCRetryToken("machineuid")})).Return(core.LaunchInstanceResponse{}, nil) + }, + }, { name: "shape config is empty", errorExpected: false, diff --git a/cloud/scope/subnet_reconciler.go b/cloud/scope/subnet_reconciler.go index a8ff891fb..683f1f754 100644 --- a/cloud/scope/subnet_reconciler.go +++ b/cloud/scope/subnet_reconciler.go @@ -35,7 +35,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { } if subnet != nil { subnetOCID := subnet.Id - //desiredSubnet.ID = subnetOCID + desiredSubnet.ID = subnetOCID if desiredSubnet.SecurityList != nil { securityList, err := s.GetSecurityList(ctx, *desiredSubnet.SecurityList) if err != nil { @@ -49,7 +49,7 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { s.Logger.Info("Created the security list", "ocid", seclistId) desiredSubnet.SecurityList.ID = seclistId } else { - //desiredSubnet.SecurityList.ID = securityList.Id + desiredSubnet.SecurityList.ID = securityList.Id if s.IsSecurityListEqual(*securityList, *desiredSubnet.SecurityList) { s.Logger.Info("No Reconciliation Required for Security List", "securitylist", securityList.Id) } else { @@ -88,7 +88,6 @@ func (s *ClusterScope) ReconcileSubnet(ctx context.Context) error { } s.Logger.Info("Created the subnet", "ocid", subnetId) desiredSubnet.ID = subnetId - //s.Logger.Info("subnet", "s", desiredSubnet) } return nil } diff --git a/cloud/services/compute/mock_compute/client_mock.go b/cloud/services/compute/mock_compute/client_mock.go index 56ad89dfa..9a329c5e6 100644 --- a/cloud/services/compute/mock_compute/client_mock.go +++ b/cloud/services/compute/mock_compute/client_mock.go @@ -12,18 +12,18 @@ import ( core "github.com/oracle/oci-go-sdk/v65/core" ) -// MockComputeClient is a mock_computemanagement of ComputeClient interface. +// MockComputeClient is a mock of ComputeClient interface. type MockComputeClient struct { ctrl *gomock.Controller recorder *MockComputeClientMockRecorder } -// MockComputeClientMockRecorder is the mock_computemanagement recorder for MockComputeClient. +// MockComputeClientMockRecorder is the mock recorder for MockComputeClient. type MockComputeClientMockRecorder struct { mock *MockComputeClient } -// NewMockComputeClient creates a new mock_computemanagement instance. +// NewMockComputeClient creates a new mock instance. func NewMockComputeClient(ctrl *gomock.Controller) *MockComputeClient { mock := &MockComputeClient{ctrl: ctrl} mock.recorder = &MockComputeClientMockRecorder{mock} @@ -80,6 +80,21 @@ func (mr *MockComputeClientMockRecorder) LaunchInstance(ctx, request interface{} return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LaunchInstance", reflect.TypeOf((*MockComputeClient)(nil).LaunchInstance), ctx, request) } +// ListImages mocks base method. +func (m *MockComputeClient) ListImages(ctx context.Context, request core.ListImagesRequest) (core.ListImagesResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListImages", ctx, request) + ret0, _ := ret[0].(core.ListImagesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListImages indicates an expected call of ListImages. +func (mr *MockComputeClientMockRecorder) ListImages(ctx, request interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListImages", reflect.TypeOf((*MockComputeClient)(nil).ListImages), ctx, request) +} + // ListInstances mocks base method. func (m *MockComputeClient) ListInstances(ctx context.Context, request core.ListInstancesRequest) (core.ListInstancesResponse, error) { m.ctrl.T.Helper() From 60426a2427906edf622fa2a1d32a3585be3e4d73 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Mon, 26 Jun 2023 11:37:03 +0530 Subject: [PATCH 12/14] Add support for image lookup --- api/v1beta1/conversion.go | 4 ++ api/v1beta1/ocimachine_conversion.go | 7 ++ api/v1beta1/types.go | 12 ---- api/v1beta1/zz_generated.conversion.go | 70 +++++++------------ api/v1beta1/zz_generated.deepcopy.go | 30 -------- api/v1beta2/types.go | 15 +++- api/v1beta2/zz_generated.deepcopy.go | 5 ++ cloud/scope/machine.go | 1 + cloud/scope/machine_test.go | 2 + ...tructure.cluster.x-k8s.io_ocimachines.yaml | 16 +++-- ....cluster.x-k8s.io_ocimachinetemplates.yaml | 17 +++-- exp/api/v1beta1/zz_generated.conversion.go | 8 +-- 12 files changed, 79 insertions(+), 108 deletions(-) diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 9b981d24d..26ea45818 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -132,3 +132,7 @@ func Convert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachineSpec func Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in *v1beta2.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { return autoConvert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in, out, s) } + +func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { + return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) +} diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index 1d0c78cb5..29d4f79f6 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -35,6 +35,9 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { return err } + if dst.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.InstanceSourceViaImageDetails != nil { + dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup + } return nil } @@ -74,6 +77,10 @@ func (r *OCIMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { if ok, err := utilconversion.UnmarshalData(r, restored); err != nil || !ok { return err } + + if dst.Spec.Template.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.Template.Spec.InstanceSourceViaImageDetails != nil { + dst.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup + } return nil } diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go index aeaa706b5..36a7c8f26 100644 --- a/api/v1beta1/types.go +++ b/api/v1beta1/types.go @@ -187,18 +187,6 @@ type InstanceSourceViaImageConfig struct { // * `30`-`120`: Represents the Ultra High Performance option. // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` - - // ImageLookup defines the parameters for looking up images as worker image. - ImageLookup *ImageLookup `json:"imageLookup,omitempty"` -} - -// ImageLookup defines the parameters for looking up images as worker image. -type ImageLookup struct { - // OperatingSystem defined the operating system of the image. - OperatingSystem *string `json:"operatingSystem,omitempty"` - - // OperatingSystemVersion defined the version operating system. - OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` } // LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum Enum with underlying type: string diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index 4e5d91e09..f76a1844c 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -125,16 +125,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ImageLookup)(nil), (*v1beta2.ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(a.(*ImageLookup), b.(*v1beta2.ImageLookup), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.ImageLookup)(nil), (*ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(a.(*v1beta2.ImageLookup), b.(*ImageLookup), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*IngressSecurityRule)(nil), (*v1beta2.IngressSecurityRule)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(a.(*IngressSecurityRule), b.(*v1beta2.IngressSecurityRule), scope) }); err != nil { @@ -175,11 +165,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*IntelIcelakeBmPlatformConfig)(nil), (*v1beta2.IntelIcelakeBmPlatformConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(a.(*IntelIcelakeBmPlatformConfig), b.(*v1beta2.IntelIcelakeBmPlatformConfig), scope) }); err != nil { @@ -625,6 +610,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(a.(*v1beta2.LoadBalancer), b.(*LoadBalancer), scope) }); err != nil { @@ -905,28 +895,6 @@ func Convert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in *v1beta2.IcmpOptions, return autoConvert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in, out, s) } -func autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { - out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) - out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) - return nil -} - -// Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup is an autogenerated conversion function. -func Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { - return autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in, out, s) -} - -func autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { - out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) - out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) - return nil -} - -// Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup is an autogenerated conversion function. -func Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { - return autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in, out, s) -} - func autoConvert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(in *IngressSecurityRule, out *v1beta2.IngressSecurityRule, s conversion.Scope) error { out.Protocol = (*string)(unsafe.Pointer(in.Protocol)) out.Source = (*string)(unsafe.Pointer(in.Source)) @@ -1026,7 +994,6 @@ func Convert_v1beta2_InstanceOptions_To_v1beta1_InstanceOptions(in *v1beta2.Inst func autoConvert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(in *InstanceSourceViaImageConfig, out *v1beta2.InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) - out.ImageLookup = (*v1beta2.ImageLookup)(unsafe.Pointer(in.ImageLookup)) return nil } @@ -1038,15 +1005,10 @@ func Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaIm func autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) - out.ImageLookup = (*ImageLookup)(unsafe.Pointer(in.ImageLookup)) + // WARNING: in.ImageLookup requires manual conversion: does not exist in peer-type return nil } -// Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig is an autogenerated conversion function. -func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { - return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) -} - func autoConvert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(in *IntelIcelakeBmPlatformConfig, out *v1beta2.IntelIcelakeBmPlatformConfig, s conversion.Scope) error { out.IsSecureBootEnabled = (*bool)(unsafe.Pointer(in.IsSecureBootEnabled)) out.IsTrustedPlatformModuleEnabled = (*bool)(unsafe.Pointer(in.IsTrustedPlatformModuleEnabled)) @@ -1816,7 +1778,15 @@ func autoConvert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachine out.AvailabilityConfig = (*v1beta2.LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*v1beta2.PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*v1beta2.LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - out.InstanceSourceViaImageDetails = (*v1beta2.InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) + if in.InstanceSourceViaImageDetails != nil { + in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails + *out = new(v1beta2.InstanceSourceViaImageConfig) + if err := Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.InstanceSourceViaImageDetails = nil + } out.PlatformConfig = (*v1beta2.PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) @@ -1849,7 +1819,15 @@ func autoConvert_v1beta2_OCIMachineSpec_To_v1beta1_OCIMachineSpec(in *v1beta2.OC out.AvailabilityConfig = (*LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - out.InstanceSourceViaImageDetails = (*InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) + if in.InstanceSourceViaImageDetails != nil { + in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails + *out = new(InstanceSourceViaImageConfig) + if err := Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.InstanceSourceViaImageDetails = nil + } out.PlatformConfig = (*PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index 652f1265e..8f0aea450 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -385,31 +385,6 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { - *out = *in - if in.OperatingSystem != nil { - in, out := &in.OperatingSystem, &out.OperatingSystem - *out = new(string) - **out = **in - } - if in.OperatingSystemVersion != nil { - in, out := &in.OperatingSystemVersion, &out.OperatingSystemVersion - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLookup. -func (in *ImageLookup) DeepCopy() *ImageLookup { - if in == nil { - return nil - } - out := new(ImageLookup) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressSecurityRule) DeepCopyInto(out *IngressSecurityRule) { *out = *in @@ -534,11 +509,6 @@ func (in *InstanceSourceViaImageConfig) DeepCopyInto(out *InstanceSourceViaImage *out = new(int64) **out = **in } - if in.ImageLookup != nil { - in, out := &in.ImageLookup, &out.ImageLookup - *out = new(ImageLookup) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceSourceViaImageConfig. diff --git a/api/v1beta2/types.go b/api/v1beta2/types.go index 0343f8d0f..a0289b537 100644 --- a/api/v1beta2/types.go +++ b/api/v1beta2/types.go @@ -181,15 +181,26 @@ type InstanceSourceViaImageConfig struct { // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` + // ImageLookup defines the image lookup parameters for the node image. ImageLookup *ImageLookup `json:"imageLookup,omitempty"` } +// ImageLookup defines the image lookup parameters for the node image. type ImageLookup struct { - OperatingSystem *string `json:"operatingSystem,omitempty"` + + // DisplayName defines display name of the image. + // +optional + DisplayName *string `json:"displayName,omitempty"` + + // OperatingSystem defines operating system of the image. + // +optional + OperatingSystem *string `json:"operatingSystem,omitempty"` + + // OperatingSystemVersion defines operating system version of the image. OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` } -// LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum Enum with underlying type: string +// PlatformConfigTypeEnum Enum with underlying type: string type PlatformConfigTypeEnum string // Set of constants representing the allowable values for LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum diff --git a/api/v1beta2/zz_generated.deepcopy.go b/api/v1beta2/zz_generated.deepcopy.go index 32539b027..81efe9927 100644 --- a/api/v1beta2/zz_generated.deepcopy.go +++ b/api/v1beta2/zz_generated.deepcopy.go @@ -438,6 +438,11 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { *out = *in + if in.DisplayName != nil { + in, out := &in.DisplayName, &out.DisplayName + *out = new(string) + **out = **in + } if in.OperatingSystem != nil { in, out := &in.OperatingSystem, &out.OperatingSystem *out = new(string) diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 8d4533f54..9ca021b49 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -168,6 +168,7 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, CompartmentId: common.String(m.getCompartmentId()), OperatingSystem: lookupSpec.OperatingSystem, OperatingSystemVersion: lookupSpec.OperatingSystemVersion, + DisplayName: lookupSpec.DisplayName, Shape: common.String(m.OCIMachine.Spec.Shape), Limit: common.Int(1), SortBy: core.ListImagesSortByTimecreated, diff --git a/cloud/scope/machine_test.go b/cloud/scope/machine_test.go index cf47e7f98..61db51f7f 100644 --- a/cloud/scope/machine_test.go +++ b/cloud/scope/machine_test.go @@ -403,6 +403,7 @@ func TestInstanceReconciliation(t *testing.T) { ImageLookup: &infrastructurev1beta2.ImageLookup{ OperatingSystem: common.String("Oracle Linux"), OperatingSystemVersion: common.String("8"), + DisplayName: common.String("test-image"), }, } computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ @@ -414,6 +415,7 @@ func TestInstanceReconciliation(t *testing.T) { CompartmentId: common.String("test"), OperatingSystem: common.String("Oracle Linux"), OperatingSystemVersion: common.String("8"), + DisplayName: common.String("test-image"), Limit: common.Int(1), Shape: common.String("shape"), SortBy: core.ListImagesSortByTimecreated, diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml index 8c4d373c7..2b4f9a44b 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml @@ -188,13 +188,6 @@ spec: default (minimum) VPUs/GB.' format: int64 type: integer - imageLookup: - properties: - operatingSystem: - type: string - operatingSystemVersion: - type: string - type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot volume. @@ -957,10 +950,19 @@ spec: format: int64 type: integer imageLookup: + description: ImageLookup defines the image lookup parameters for + the node image. properties: + displayName: + description: DisplayName defines display name of the image. + type: string operatingSystem: + description: OperatingSystem defines operating system of + the image. type: string operatingSystemVersion: + description: OperatingSystemVersion defines operating system + version of the image. type: string type: object kmsKeyId: diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml index 67f70b6eb..46e2d0baa 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml @@ -206,13 +206,6 @@ spec: VPUs/GB.' format: int64 type: integer - imageLookup: - properties: - operatingSystem: - type: string - operatingSystemVersion: - type: string - type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot @@ -954,10 +947,20 @@ spec: format: int64 type: integer imageLookup: + description: ImageLookup defines the image lookup parameters + for the node image. properties: + displayName: + description: DisplayName defines display name of the + image. + type: string operatingSystem: + description: OperatingSystem defines operating system of + the image. type: string operatingSystemVersion: + description: OperatingSystemVersion defines operating + system version of the image. type: string type: object kmsKeyId: diff --git a/exp/api/v1beta1/zz_generated.conversion.go b/exp/api/v1beta1/zz_generated.conversion.go index 314cfa850..060a497b2 100644 --- a/exp/api/v1beta1/zz_generated.conversion.go +++ b/exp/api/v1beta1/zz_generated.conversion.go @@ -616,13 +616,13 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddConversionFunc((*v1beta2.OCIManagedMachinePoolSpec)(nil), (*OCIManagedMachinePoolSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_OCIManagedMachinePoolSpec_To_v1beta1_OCIManagedMachinePoolSpec(a.(*v1beta2.OCIManagedMachinePoolSpec), b.(*OCIManagedMachinePoolSpec), scope) + if err := s.AddConversionFunc((*v1beta2.OCIManagedControlPlaneStatus)(nil), (*OCIManagedControlPlaneStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_OCIManagedControlPlaneStatus_To_v1beta1_OCIManagedControlPlaneStatus(a.(*v1beta2.OCIManagedControlPlaneStatus), b.(*OCIManagedControlPlaneStatus), scope) }); err != nil { return err } - if err := s.AddConversionFunc((*v1beta2.OCIManagedControlPlaneStatus)(nil), (*OCIManagedControlPlaneStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_OCIManagedControlPlaneStatus_To_v1beta1_OCIManagedControlPlaneStatus(a.(*v1beta2.OCIManagedControlPlaneStatus), b.(*OCIManagedControlPlaneStatus), scope) + if err := s.AddConversionFunc((*v1beta2.OCIManagedMachinePoolSpec)(nil), (*OCIManagedMachinePoolSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_OCIManagedMachinePoolSpec_To_v1beta1_OCIManagedMachinePoolSpec(a.(*v1beta2.OCIManagedMachinePoolSpec), b.(*OCIManagedMachinePoolSpec), scope) }); err != nil { return err } From dfb0f21dc2f434e3f3cd4a5277acad6170021427 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Mon, 26 Jun 2023 12:08:02 +0530 Subject: [PATCH 13/14] Add support for image lookup --- api/v1beta2/types.go | 5 ----- api/v1beta2/zz_generated.deepcopy.go | 5 ----- cloud/scope/machine.go | 1 - cloud/scope/machine_test.go | 2 -- .../bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml | 3 --- .../infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml | 4 ---- 6 files changed, 20 deletions(-) diff --git a/api/v1beta2/types.go b/api/v1beta2/types.go index a0289b537..aa77044da 100644 --- a/api/v1beta2/types.go +++ b/api/v1beta2/types.go @@ -187,11 +187,6 @@ type InstanceSourceViaImageConfig struct { // ImageLookup defines the image lookup parameters for the node image. type ImageLookup struct { - - // DisplayName defines display name of the image. - // +optional - DisplayName *string `json:"displayName,omitempty"` - // OperatingSystem defines operating system of the image. // +optional OperatingSystem *string `json:"operatingSystem,omitempty"` diff --git a/api/v1beta2/zz_generated.deepcopy.go b/api/v1beta2/zz_generated.deepcopy.go index 81efe9927..32539b027 100644 --- a/api/v1beta2/zz_generated.deepcopy.go +++ b/api/v1beta2/zz_generated.deepcopy.go @@ -438,11 +438,6 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { *out = *in - if in.DisplayName != nil { - in, out := &in.DisplayName, &out.DisplayName - *out = new(string) - **out = **in - } if in.OperatingSystem != nil { in, out := &in.OperatingSystem, &out.OperatingSystem *out = new(string) diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 9ca021b49..8d4533f54 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -168,7 +168,6 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, CompartmentId: common.String(m.getCompartmentId()), OperatingSystem: lookupSpec.OperatingSystem, OperatingSystemVersion: lookupSpec.OperatingSystemVersion, - DisplayName: lookupSpec.DisplayName, Shape: common.String(m.OCIMachine.Spec.Shape), Limit: common.Int(1), SortBy: core.ListImagesSortByTimecreated, diff --git a/cloud/scope/machine_test.go b/cloud/scope/machine_test.go index 61db51f7f..cf47e7f98 100644 --- a/cloud/scope/machine_test.go +++ b/cloud/scope/machine_test.go @@ -403,7 +403,6 @@ func TestInstanceReconciliation(t *testing.T) { ImageLookup: &infrastructurev1beta2.ImageLookup{ OperatingSystem: common.String("Oracle Linux"), OperatingSystemVersion: common.String("8"), - DisplayName: common.String("test-image"), }, } computeClient.EXPECT().ListInstances(gomock.Any(), gomock.Eq(core.ListInstancesRequest{ @@ -415,7 +414,6 @@ func TestInstanceReconciliation(t *testing.T) { CompartmentId: common.String("test"), OperatingSystem: common.String("Oracle Linux"), OperatingSystemVersion: common.String("8"), - DisplayName: common.String("test-image"), Limit: common.Int(1), Shape: common.String("shape"), SortBy: core.ListImagesSortByTimecreated, diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml index 2b4f9a44b..bb79661d5 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml @@ -953,9 +953,6 @@ spec: description: ImageLookup defines the image lookup parameters for the node image. properties: - displayName: - description: DisplayName defines display name of the image. - type: string operatingSystem: description: OperatingSystem defines operating system of the image. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml index 46e2d0baa..bff924a59 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml @@ -950,10 +950,6 @@ spec: description: ImageLookup defines the image lookup parameters for the node image. properties: - displayName: - description: DisplayName defines display name of the - image. - type: string operatingSystem: description: OperatingSystem defines operating system of the image. From 7ee6805c0c4bb529cb87d635241b2f6f6df89c27 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Mon, 26 Jun 2023 12:34:12 +0530 Subject: [PATCH 14/14] Add support for image lookup --- api/v1beta1/conversion.go | 4 -- api/v1beta1/ocimachine_conversion.go | 6 -- api/v1beta1/types.go | 15 +++- api/v1beta1/zz_generated.conversion.go | 70 ++++++++++++------- api/v1beta1/zz_generated.deepcopy.go | 30 ++++++++ ...tructure.cluster.x-k8s.io_ocimachines.yaml | 13 ++++ ....cluster.x-k8s.io_ocimachinetemplates.yaml | 13 ++++ 7 files changed, 116 insertions(+), 35 deletions(-) diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 26ea45818..9b981d24d 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -132,7 +132,3 @@ func Convert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachineSpec func Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in *v1beta2.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { return autoConvert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(in, out, s) } - -func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { - return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) -} diff --git a/api/v1beta1/ocimachine_conversion.go b/api/v1beta1/ocimachine_conversion.go index 29d4f79f6..df787a175 100644 --- a/api/v1beta1/ocimachine_conversion.go +++ b/api/v1beta1/ocimachine_conversion.go @@ -35,9 +35,6 @@ func (src *OCIMachine) ConvertTo(dstRaw conversion.Hub) error { return err } - if dst.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.InstanceSourceViaImageDetails != nil { - dst.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.InstanceSourceViaImageDetails.ImageLookup - } return nil } @@ -78,9 +75,6 @@ func (r *OCIMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { return err } - if dst.Spec.Template.Spec.InstanceSourceViaImageDetails != nil && restored.Spec.Template.Spec.InstanceSourceViaImageDetails != nil { - dst.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup = restored.Spec.Template.Spec.InstanceSourceViaImageDetails.ImageLookup - } return nil } diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go index 36a7c8f26..90c866d34 100644 --- a/api/v1beta1/types.go +++ b/api/v1beta1/types.go @@ -187,9 +187,22 @@ type InstanceSourceViaImageConfig struct { // * `30`-`120`: Represents the Ultra High Performance option. // For volumes with the auto-tuned performance feature enabled, this is set to the default (minimum) VPUs/GB. BootVolumeVpusPerGB *int64 `json:"bootVolumeVpusPerGB,omitempty"` + + // ImageLookup defines the image lookup parameters for the node image. + ImageLookup *ImageLookup `json:"imageLookup,omitempty"` } -// LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum Enum with underlying type: string +// ImageLookup defines the image lookup parameters for the node image. +type ImageLookup struct { + // OperatingSystem defines operating system of the image. + // +optional + OperatingSystem *string `json:"operatingSystem,omitempty"` + + // OperatingSystemVersion defines operating system version of the image. + OperatingSystemVersion *string `json:"operatingSystemVersion,omitempty"` +} + +// PlatformConfigTypeEnum Enum with underlying type: string type PlatformConfigTypeEnum string // Set of constants representing the allowable values for LaunchInstanceAvailabilityConfigDetailsRecoveryActionEnum diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index f76a1844c..4e5d91e09 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -125,6 +125,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ImageLookup)(nil), (*v1beta2.ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(a.(*ImageLookup), b.(*v1beta2.ImageLookup), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta2.ImageLookup)(nil), (*ImageLookup)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(a.(*v1beta2.ImageLookup), b.(*ImageLookup), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*IngressSecurityRule)(nil), (*v1beta2.IngressSecurityRule)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(a.(*IngressSecurityRule), b.(*v1beta2.IngressSecurityRule), scope) }); err != nil { @@ -165,6 +175,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*IntelIcelakeBmPlatformConfig)(nil), (*v1beta2.IntelIcelakeBmPlatformConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(a.(*IntelIcelakeBmPlatformConfig), b.(*v1beta2.IntelIcelakeBmPlatformConfig), scope) }); err != nil { @@ -610,11 +625,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddConversionFunc((*v1beta2.InstanceSourceViaImageConfig)(nil), (*InstanceSourceViaImageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(a.(*v1beta2.InstanceSourceViaImageConfig), b.(*InstanceSourceViaImageConfig), scope) - }); err != nil { - return err - } if err := s.AddConversionFunc((*v1beta2.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_LoadBalancer_To_v1beta1_LoadBalancer(a.(*v1beta2.LoadBalancer), b.(*LoadBalancer), scope) }); err != nil { @@ -895,6 +905,28 @@ func Convert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in *v1beta2.IcmpOptions, return autoConvert_v1beta2_IcmpOptions_To_v1beta1_IcmpOptions(in, out, s) } +func autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { + out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) + out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) + return nil +} + +// Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup is an autogenerated conversion function. +func Convert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in *ImageLookup, out *v1beta2.ImageLookup, s conversion.Scope) error { + return autoConvert_v1beta1_ImageLookup_To_v1beta2_ImageLookup(in, out, s) +} + +func autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { + out.OperatingSystem = (*string)(unsafe.Pointer(in.OperatingSystem)) + out.OperatingSystemVersion = (*string)(unsafe.Pointer(in.OperatingSystemVersion)) + return nil +} + +// Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup is an autogenerated conversion function. +func Convert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in *v1beta2.ImageLookup, out *ImageLookup, s conversion.Scope) error { + return autoConvert_v1beta2_ImageLookup_To_v1beta1_ImageLookup(in, out, s) +} + func autoConvert_v1beta1_IngressSecurityRule_To_v1beta2_IngressSecurityRule(in *IngressSecurityRule, out *v1beta2.IngressSecurityRule, s conversion.Scope) error { out.Protocol = (*string)(unsafe.Pointer(in.Protocol)) out.Source = (*string)(unsafe.Pointer(in.Source)) @@ -994,6 +1026,7 @@ func Convert_v1beta2_InstanceOptions_To_v1beta1_InstanceOptions(in *v1beta2.Inst func autoConvert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(in *InstanceSourceViaImageConfig, out *v1beta2.InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) + out.ImageLookup = (*v1beta2.ImageLookup)(unsafe.Pointer(in.ImageLookup)) return nil } @@ -1005,10 +1038,15 @@ func Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaIm func autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { out.KmsKeyId = (*string)(unsafe.Pointer(in.KmsKeyId)) out.BootVolumeVpusPerGB = (*int64)(unsafe.Pointer(in.BootVolumeVpusPerGB)) - // WARNING: in.ImageLookup requires manual conversion: does not exist in peer-type + out.ImageLookup = (*ImageLookup)(unsafe.Pointer(in.ImageLookup)) return nil } +// Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig is an autogenerated conversion function. +func Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in *v1beta2.InstanceSourceViaImageConfig, out *InstanceSourceViaImageConfig, s conversion.Scope) error { + return autoConvert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(in, out, s) +} + func autoConvert_v1beta1_IntelIcelakeBmPlatformConfig_To_v1beta2_IntelIcelakeBmPlatformConfig(in *IntelIcelakeBmPlatformConfig, out *v1beta2.IntelIcelakeBmPlatformConfig, s conversion.Scope) error { out.IsSecureBootEnabled = (*bool)(unsafe.Pointer(in.IsSecureBootEnabled)) out.IsTrustedPlatformModuleEnabled = (*bool)(unsafe.Pointer(in.IsTrustedPlatformModuleEnabled)) @@ -1778,15 +1816,7 @@ func autoConvert_v1beta1_OCIMachineSpec_To_v1beta2_OCIMachineSpec(in *OCIMachine out.AvailabilityConfig = (*v1beta2.LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*v1beta2.PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*v1beta2.LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - if in.InstanceSourceViaImageDetails != nil { - in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails - *out = new(v1beta2.InstanceSourceViaImageConfig) - if err := Convert_v1beta1_InstanceSourceViaImageConfig_To_v1beta2_InstanceSourceViaImageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.InstanceSourceViaImageDetails = nil - } + out.InstanceSourceViaImageDetails = (*v1beta2.InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) out.PlatformConfig = (*v1beta2.PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) @@ -1819,15 +1849,7 @@ func autoConvert_v1beta2_OCIMachineSpec_To_v1beta1_OCIMachineSpec(in *v1beta2.OC out.AvailabilityConfig = (*LaunchInstanceAvailabilityConfig)(unsafe.Pointer(in.AvailabilityConfig)) out.PreemptibleInstanceConfig = (*PreemptibleInstanceConfig)(unsafe.Pointer(in.PreemptibleInstanceConfig)) out.AgentConfig = (*LaunchInstanceAgentConfig)(unsafe.Pointer(in.AgentConfig)) - if in.InstanceSourceViaImageDetails != nil { - in, out := &in.InstanceSourceViaImageDetails, &out.InstanceSourceViaImageDetails - *out = new(InstanceSourceViaImageConfig) - if err := Convert_v1beta2_InstanceSourceViaImageConfig_To_v1beta1_InstanceSourceViaImageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.InstanceSourceViaImageDetails = nil - } + out.InstanceSourceViaImageDetails = (*InstanceSourceViaImageConfig)(unsafe.Pointer(in.InstanceSourceViaImageDetails)) out.PlatformConfig = (*PlatformConfig)(unsafe.Pointer(in.PlatformConfig)) out.DedicatedVmHostId = (*string)(unsafe.Pointer(in.DedicatedVmHostId)) out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index 8f0aea450..652f1265e 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -385,6 +385,31 @@ func (in *IcmpOptions) DeepCopy() *IcmpOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLookup) DeepCopyInto(out *ImageLookup) { + *out = *in + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.OperatingSystemVersion != nil { + in, out := &in.OperatingSystemVersion, &out.OperatingSystemVersion + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLookup. +func (in *ImageLookup) DeepCopy() *ImageLookup { + if in == nil { + return nil + } + out := new(ImageLookup) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressSecurityRule) DeepCopyInto(out *IngressSecurityRule) { *out = *in @@ -509,6 +534,11 @@ func (in *InstanceSourceViaImageConfig) DeepCopyInto(out *InstanceSourceViaImage *out = new(int64) **out = **in } + if in.ImageLookup != nil { + in, out := &in.ImageLookup, &out.ImageLookup + *out = new(ImageLookup) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceSourceViaImageConfig. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml index bb79661d5..f4de960e2 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachines.yaml @@ -188,6 +188,19 @@ spec: default (minimum) VPUs/GB.' format: int64 type: integer + imageLookup: + description: ImageLookup defines the image lookup parameters for + the node image. + properties: + operatingSystem: + description: OperatingSystem defines operating system of + the image. + type: string + operatingSystemVersion: + description: OperatingSystemVersion defines operating system + version of the image. + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot volume. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml index bff924a59..0412bcaec 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_ocimachinetemplates.yaml @@ -206,6 +206,19 @@ spec: VPUs/GB.' format: int64 type: integer + imageLookup: + description: ImageLookup defines the image lookup parameters + for the node image. + properties: + operatingSystem: + description: OperatingSystem defines operating system of + the image. + type: string + operatingSystemVersion: + description: OperatingSystemVersion defines operating + system version of the image. + type: string + type: object kmsKeyId: description: KmsKeyId defines the OCID of the Key Management key to assign as the master encryption key for the boot