Skip to content

Commit

Permalink
fix: allow LVMS for MultiNode >=4.15.0
Browse files Browse the repository at this point in the history
  • Loading branch information
jakobmoellerdev committed Dec 5, 2023
1 parent 215dafb commit 8fbf100
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 21 deletions.
7 changes: 4 additions & 3 deletions internal/operators/lvm/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ const (
)

type Config struct {
LvmCPUPerHost int64 `envconfig:"LVM_CPU_PER_HOST" default:"1"`
LvmMemoryPerHostMiB int64 `envconfig:"LVM_MEMORY_PER_HOST_MIB" default:"400"`
LvmMinOpenshiftVersion string `envconfig:"LVM_MIN_OPENSHIFT_VERSION" default:"4.11.0"`
LvmCPUPerHost int64 `envconfig:"LVM_CPU_PER_HOST" default:"1"`
LvmMemoryPerHostMiB int64 `envconfig:"LVM_MEMORY_PER_HOST_MIB" default:"400"`
LvmMinOpenshiftVersion string `envconfig:"LVM_MIN_OPENSHIFT_VERSION" default:"4.11.0"`
LvmMinMultiNodeSupportVersion string `envconfig:"LVM_MIN_MULTI_NODE_SUPPORT_VERSION" default:"4.15.0"`
}

// count all disks of drive type ssd or hdd
Expand Down
39 changes: 23 additions & 16 deletions internal/operators/lvm/lvm_operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,25 +74,32 @@ func (o *operator) GetHostValidationID() string {

// ValidateCluster always return "valid" result
func (o *operator) ValidateCluster(_ context.Context, cluster *common.Cluster) (api.ValidationResult, error) {
if !common.IsSingleNodeCluster(cluster) {
message := "Logical Volume Manager is only supported for Single Node Openshift"
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetClusterValidationID(), Reasons: []string{message}}, nil
}

var ocpVersion, minOpenshiftVersionForLvm *version.Version
var err error

ocpVersion, err = version.NewVersion(cluster.OpenshiftVersion)
if err != nil {
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetHostValidationID(), Reasons: []string{err.Error()}}, nil
}
minOpenshiftVersionForLvm, err = version.NewVersion(o.config.LvmMinOpenshiftVersion)
ocpVersion, err := version.NewVersion(cluster.OpenshiftVersion)
if err != nil {
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetHostValidationID(), Reasons: []string{err.Error()}}, nil
}
if ocpVersion.LessThan(minOpenshiftVersionForLvm) {
message := fmt.Sprintf("Logical Volume Manager is only supported for openshift versions %s and above", o.config.LvmMinOpenshiftVersion)
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetClusterValidationID(), Reasons: []string{message}}, nil

if common.IsSingleNodeCluster(cluster) {
minOpenshiftVersionForLvm, err := version.NewVersion(o.config.LvmMinOpenshiftVersion)
if err != nil {
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetHostValidationID(), Reasons: []string{err.Error()}}, nil
}
if ocpVersion.LessThan(minOpenshiftVersionForLvm) {
message := fmt.Sprintf("Logical Volume Manager is only supported for openshift versions %s and above", o.config.LvmMinOpenshiftVersion)
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetClusterValidationID(), Reasons: []string{message}}, nil
}
} else {
// HA support was introduced after LVM support in general, so we need to check for a different version
minOpenshiftVersionForMultiNodeSupport, err := version.NewVersion(o.config.LvmMinMultiNodeSupportVersion)
if err != nil {
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetHostValidationID(), Reasons: []string{err.Error()}}, nil
}
if ocpVersion.LessThan(minOpenshiftVersionForMultiNodeSupport) && !common.IsSingleNodeCluster(cluster) {
message := fmt.Sprintf("Logical Volume Manager is only supported for highly available openshift with version %s or above",
minOpenshiftVersionForMultiNodeSupport.String())
return api.ValidationResult{Status: api.Failure, ValidationId: o.GetClusterValidationID(), Reasons: []string{message}}, nil
}

}

return api.ValidationResult{Status: api.Success, ValidationId: o.GetClusterValidationID()}, nil
Expand Down
8 changes: 6 additions & 2 deletions internal/operators/lvm/lvm_operator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,12 @@ var _ = Describe("Lvm Operator", func() {
Expect(res).Should(Equal(expectedResult))
},
table.Entry("High Availability Mode Full",
&common.Cluster{Cluster: models.Cluster{HighAvailabilityMode: &fullHaMode, Hosts: []*models.Host{hostWithSufficientResources, hostWithSufficientResources}, OpenshiftVersion: operator.config.LvmMinOpenshiftVersion}},
api.ValidationResult{Status: api.Failure, ValidationId: operator.GetHostValidationID(), Reasons: []string{"Logical Volume Manager is only supported for Single Node Openshift"}},
&common.Cluster{Cluster: models.Cluster{HighAvailabilityMode: &fullHaMode, Hosts: []*models.Host{hostWithSufficientResources, hostWithSufficientResources}, OpenshiftVersion: operator.config.LvmMinMultiNodeSupportVersion}},
api.ValidationResult{Status: api.Success, ValidationId: operator.GetHostValidationID()},
),
table.Entry("High Availability Mode Full and Openshift version less than LvmMinMultiNodeSupportVersion",
&common.Cluster{Cluster: models.Cluster{HighAvailabilityMode: &fullHaMode, Hosts: []*models.Host{hostWithSufficientResources}, OpenshiftVersion: "4.14.0"}},
api.ValidationResult{Status: api.Failure, ValidationId: operator.GetHostValidationID(), Reasons: []string{"Logical Volume Manager is only supported for highly available openshift with version 4.15.0 or above"}},
),
table.Entry("High Availability Mode None and Openshift version less than minimal",
&common.Cluster{Cluster: models.Cluster{HighAvailabilityMode: &noneHaMode, Hosts: []*models.Host{hostWithSufficientResources}, OpenshiftVersion: "4.10.0"}},
Expand Down

0 comments on commit 8fbf100

Please sign in to comment.