From 642b19926fdf73c62f3fcb9d345056fcfb264fd8 Mon Sep 17 00:00:00 2001 From: Shyam Radhakrishnan Date: Fri, 1 Mar 2024 11:03:56 +0530 Subject: [PATCH] Do not sent fault domain if faiulre domain is set as empty --- cloud/scope/machine.go | 40 ++++++++++++++++++++++------------------ metadata.yaml | 3 +++ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index de33178c..aa0c890c 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -200,27 +200,33 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, } failureDomain := m.Machine.Spec.FailureDomain - if failureDomain == nil { - m.Logger.Info("Failure Domain is not set in the machine spec, setting it to a random value from 1 to 3") - randomFaultDomain, err := rand.Int(rand.Reader, big.NewInt(3)) + var faultDomain string + var availabilityDomain string + if failureDomain != nil { + failureDomainIndex, err := strconv.Atoi(*failureDomain) if err != nil { - m.Logger.Error(err, "Failed to generate random fault domain") + m.Logger.Error(err, "Failure Domain is not a valid integer") + return nil, errors.Wrap(err, "invalid failure domain parameter, must be a valid integer") + } + m.Logger.Info("Failure Domain being used", "failure-domain", failureDomainIndex) + if failureDomainIndex < 1 || failureDomainIndex > 3 { + err = errors.New("failure domain should be a value between 1 and 3") + m.Logger.Error(err, "Failure domain should be a value between 1 and 3") + return nil, err + } + faultDomain = m.OCIClusterAccessor.GetFailureDomains()[*failureDomain].Attributes[FaultDomain] + availabilityDomain = m.OCIClusterAccessor.GetFailureDomains()[*failureDomain].Attributes[AvailabilityDomain] + } else { + randomFailureDomain, err := rand.Int(rand.Reader, big.NewInt(3)) + if err != nil { + m.Logger.Error(err, "Failed to generate random failure domain") return nil, err } // the random number generated is between zero and two, whereas we need a number between one and three - failureDomain = common.String(strconv.Itoa(int(randomFaultDomain.Int64()) + 1)) - } - failureDomainIndex, err := strconv.Atoi(*failureDomain) - if err != nil { - m.Logger.Error(err, "Failure Domain is not a valid integer") - return nil, errors.Wrap(err, "invalid failure domain parameter, must be a valid integer") - } - m.Logger.Info("Failure Domain being used", "failure-domain", failureDomainIndex) - if failureDomainIndex < 1 || failureDomainIndex > 3 { - err = errors.New("failure domain should be a value between 1 and 3") - m.Logger.Error(err, "Failure domain should be a value between 1 and 3") - return nil, err + failureDomain = common.String(strconv.Itoa(int(randomFailureDomain.Int64()) + 1)) + availabilityDomain = m.OCIClusterAccessor.GetFailureDomains()[*failureDomain].Attributes[AvailabilityDomain] } + metadata := m.OCIMachine.Spec.Metadata if metadata == nil { metadata = make(map[string]string) @@ -231,8 +237,6 @@ func (m *MachineScope) GetOrCreateMachine(ctx context.Context) (*core.Instance, definedTags := ConvertMachineDefinedTags(m.OCIMachine.Spec.DefinedTags) - availabilityDomain := m.OCIClusterAccessor.GetFailureDomains()[*failureDomain].Attributes[AvailabilityDomain] - faultDomain := m.OCIClusterAccessor.GetFailureDomains()[*failureDomain].Attributes[FaultDomain] launchDetails := core.LaunchInstanceDetails{DisplayName: common.String(m.OCIMachine.Name), SourceDetails: sourceDetails, CreateVnicDetails: &core.CreateVnicDetails{ diff --git a/metadata.yaml b/metadata.yaml index cbc340fe..03effec3 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -46,4 +46,7 @@ releaseSeries: contract: v1beta1 - major: 0 minor: 14 + contract: v1beta1 + - major: 0 + minor: 15 contract: v1beta1 \ No newline at end of file