Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MGMT-4079 Deploy cnv #1176

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions internal/cluster/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ var _ = Describe("stateMachine", func() {
mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
}, nil)
})

Expand Down Expand Up @@ -131,6 +132,7 @@ var _ = Describe("TestClusterMonitoring", func() {
mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
}, nil)
})
Context("single cluster monitoring", func() {
Expand Down Expand Up @@ -555,6 +557,7 @@ var _ = Describe("lease timeout event", func() {
mockEvents, mockHostAPI, mockMetric, nil, dummy, mockOperators)

mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
Expand Down Expand Up @@ -663,6 +666,7 @@ var _ = Describe("Auto assign machine CIDR", func() {
mockEvents, mockHostAPI, mockMetric, nil, dummy, mockOperators)

mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
Expand Down Expand Up @@ -1771,6 +1775,7 @@ var _ = Describe("Majority groups", func() {
Expect(db.Create(&cluster).Error).ShouldNot(HaveOccurred())

mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
Expand Down Expand Up @@ -1877,6 +1882,7 @@ var _ = Describe("ready_state", func() {
mockEvents.EXPECT().AddEvent(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

mockOperators.EXPECT().ValidateCluster(gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.ClusterValidationIDCnvRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
Expand Down
2 changes: 1 addition & 1 deletion internal/cluster/statemachine.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func NewClusterStateMachine(th *transitionHandler) stateswitch.StateMachine {
var pendingConditions = stateswitch.And(If(IsMachineCidrDefined), If(isClusterCidrDefined), If(isServiceCidrDefined), If(IsDNSDomainDefined), If(IsPullSecretSet))
var vipsDefinedConditions = stateswitch.And(If(isApiVipDefined), If(isIngressVipDefined))
var requiredForInstall = stateswitch.And(If(isMachineCidrEqualsToCalculatedCidr), If(isApiVipValid), If(isIngressVipValid), If(AllHostsAreReadyToInstall),
If(SufficientMastersCount), If(networkPrefixValid), If(noCidrOverlapping), If(IsNtpServerConfigured), If(IsOcsRequirementsSatisfied), If(IsLsoRequirementsSatisfied))
If(SufficientMastersCount), If(networkPrefixValid), If(noCidrOverlapping), If(IsNtpServerConfigured), If(IsOcsRequirementsSatisfied), If(IsLsoRequirementsSatisfied), If(IsCnvRequirementsSatisfied))

// Refresh cluster status conditions - Non DHCP
var requiredInputFieldsExistNonDhcp = stateswitch.And(vipsDefinedConditions, pendingConditions)
Expand Down
1 change: 1 addition & 0 deletions internal/cluster/transition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3655,6 +3655,7 @@ var _ = Describe("Ocs Operator use-cases", func() {
operatorsManager := operators.NewManager(common.GetTestLog())
clusterApi = NewManager(getDefaultConfig(), common.GetTestLog().WithField("pkg", "cluster-monitor"), db,
mockEvents, mockHostAPI, mockMetric, nil, nil, operatorsManager)

hid1 = strfmt.UUID("054e0100-f50e-4be7-874d-73861179e40d")
hid2 = strfmt.UUID("514c8480-cda5-46e5-afce-e146def2066f")
hid3 = strfmt.UUID(uuid.New().String())
Expand Down
3 changes: 2 additions & 1 deletion internal/cluster/validation_id.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const (
IsNtpServerConfigured = validationID(models.ClusterValidationIDNtpServerConfigured)
IsOcsRequirementsSatisfied = validationID(models.ClusterValidationIDOcsRequirementsSatisfied)
IsLsoRequirementsSatisfied = validationID(models.ClusterValidationIDLsoRequirementsSatisfied)
IsCnvRequirementsSatisfied = validationID(models.ClusterValidationIDCnvRequirementsSatisfied)
)

func (v validationID) category() (string, error) {
Expand All @@ -39,7 +40,7 @@ func (v validationID) category() (string, error) {
return "hosts-data", nil
case IsPullSecretSet:
return "configuration", nil
case IsOcsRequirementsSatisfied, IsLsoRequirementsSatisfied:
case IsOcsRequirementsSatisfied, IsLsoRequirementsSatisfied, IsCnvRequirementsSatisfied:
return "operators", nil
}
return "", common.NewApiError(http.StatusInternalServerError, errors.Errorf("Unexpected cluster validation id %s", string(v)))
Expand Down
8 changes: 8 additions & 0 deletions internal/hardware/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ func BytesToGiB(bytes int64) int64 {
return bytes / int64(units.GiB)
}

func MibToBytes(mib int64) int64 {
return mib * int64(units.MiB)
}

func BytesToMib(bytes int64) int64 {
return bytes / int64(units.MiB)
}

func isNvme(name string) bool {
return strings.HasPrefix(name, "nvme")
}
Expand Down
2 changes: 2 additions & 0 deletions internal/host/host_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1870,6 +1870,7 @@ var _ = Describe("AutoAssignRole", func() {
mockOperators.EXPECT().ValidateHost(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.HostValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDCnvRequirementsSatisfied)},
}, nil)
})

Expand Down Expand Up @@ -1989,6 +1990,7 @@ var _ = Describe("IsValidMasterCandidate", func() {
mockOperators.EXPECT().ValidateHost(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.HostValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDCnvRequirementsSatisfied)},
}, nil)
})

Expand Down
27 changes: 27 additions & 0 deletions internal/host/hostutil/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,30 @@ func GenerateMasterInventoryWithHostnameV6(hostname string) string {
Expect(err).To(Not(HaveOccurred()))
return string(b)
}

func GenerateInventoryWithResourcesWithBytes(cpu, memory int64, hostname string) string {
inventory := models.Inventory{
CPU: &models.CPU{Count: cpu},
Disks: []*models.Disk{
{
SizeBytes: 128849018880,
DriveType: "HDD",
},
},
Interfaces: []*models.Interface{
{
Name: "eth0",
IPV4Addresses: []string{
"1.2.3.4/24",
},
},
},
Memory: &models.Memory{PhysicalBytes: memory, UsableBytes: memory},
Hostname: hostname,
SystemVendor: &models.SystemVendor{Manufacturer: "Red Hat", ProductName: "RHEL", SerialNumber: "3534"},
Timestamp: 1601835002,
}
b, err := json.Marshal(&inventory)
Expect(err).To(Not(HaveOccurred()))
return string(b)
}
2 changes: 2 additions & 0 deletions internal/host/monitor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ var _ = Describe("monitor_disconnection", func() {
mockOperators.EXPECT().ValidateHost(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.HostValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDCnvRequirementsSatisfied)},
}, nil)
})

Expand Down Expand Up @@ -148,6 +149,7 @@ var _ = Describe("TestHostMonitoring", func() {
mockOperators.EXPECT().ValidateHost(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return([]api.ValidationResult{
{Status: api.Success, ValidationId: string(models.HostValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDLsoRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.HostValidationIDCnvRequirementsSatisfied)},
}, nil)
})

Expand Down
2 changes: 1 addition & 1 deletion internal/host/statemachine.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ func NewHostStateMachine(th *transitionHandler) stateswitch.StateMachine {

var isSufficientForInstall = stateswitch.And(If(HasMemoryForRole), If(HasCPUCoresForRole), If(BelongsToMachineCidr),
If(IsHostnameUnique), If(IsHostnameValid), If(IsAPIVipConnected), If(BelongsToMajorityGroup),
If(AreOcsRequirementsSatisfied), If(AreLsoRequirementsSatisfied))
If(AreOcsRequirementsSatisfied), If(AreLsoRequirementsSatisfied), If(AreCnvRequirementsSatisfied))

// In order for this transition to be fired at least one of the validations in minRequiredHardwareValidations must fail.
// This transition handles the case that a host does not pass minimum hardware requirements for any of the roles
Expand Down