Skip to content

Commit

Permalink
MGMT-4066: Add operator CPU and memory requirements to cluster valida…
Browse files Browse the repository at this point in the history
…tion

Signed-off-by: Jordi Gil <jgil@redhat.com>
  • Loading branch information
jordigilh committed Feb 28, 2021
1 parent 23d0a32 commit b44b1c1
Show file tree
Hide file tree
Showing 21 changed files with 722 additions and 207 deletions.
2 changes: 2 additions & 0 deletions internal/cluster/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ type Manager struct {
rp *refreshPreprocessor
leaderElector leader.Leader
prevMonitorInvokedAt time.Time
operatorsManager operators.API
}

func NewManager(cfg Config, log logrus.FieldLogger, db *gorm.DB, eventsHandler events.Handler,
Expand All @@ -142,6 +143,7 @@ func NewManager(cfg Config, log logrus.FieldLogger, db *gorm.DB, eventsHandler e
hostAPI: hostAPI,
leaderElector: leaderElector,
prevMonitorInvokedAt: time.Now(),
operatorsManager: operatorsApi,
}
}

Expand Down
56 changes: 42 additions & 14 deletions internal/cluster/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,13 @@ var _ = Describe("stateMachine", func() {
refreshedCluster *common.Cluster
stateErr error
dbName = "state_machine"
ctrl *gomock.Controller
)

BeforeEach(func() {
db = common.PrepareTestDB(dbName, &events.Event{})
dummy := &leader.DummyElector{}
ctrl := gomock.NewController(GinkgoT())
ctrl = gomock.NewController(GinkgoT())
mockOperators := operators.NewMockAPI(ctrl)
state = NewManager(getDefaultConfig(), common.GetTestLog(), db, nil, nil, nil, nil, dummy, mockOperators)
id := strfmt.UUID(uuid.New().String())
Expand All @@ -68,6 +69,7 @@ var _ = Describe("stateMachine", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

Context("unknown_cluster_state", func() {
Expand All @@ -83,6 +85,7 @@ var _ = Describe("stateMachine", func() {
common.DeleteTestDB(db, dbName)
Expect(refreshedCluster).To(BeNil())
Expect(stateErr).Should(HaveOccurred())
ctrl.Finish()
})
})

Expand Down Expand Up @@ -132,6 +135,7 @@ var _ = Describe("TestClusterMonitoring", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})
Context("single cluster monitoring", func() {
Context("from installing state", func() {
Expand Down Expand Up @@ -558,6 +562,7 @@ var _ = Describe("lease timeout event", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})
tests := []struct {
name string
Expand Down Expand Up @@ -630,11 +635,11 @@ var _ = Describe("lease timeout event", func() {
mockEvents.EXPECT().AddEvent(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Times(t.eventCalllsExpected)
}
clusterApi.ClusterMonitoring()
ctrl.Finish()
})
}
AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -666,6 +671,7 @@ var _ = Describe("Auto assign machine CIDR", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})
tests := []struct {
name string
Expand Down Expand Up @@ -817,11 +823,11 @@ var _ = Describe("Auto assign machine CIDR", func() {
var cluster common.Cluster
Expect(db.Take(&cluster, "id = ?", id.String()).Error).ToNot(HaveOccurred())
Expect(cluster.MachineNetworkCidr).To(Equal(t.expectedMachineCIDR))
ctrl.Finish()
})
}
AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand All @@ -832,16 +838,18 @@ var _ = Describe("VerifyRegisterHost", func() {
clusterApi *Manager
errTemplate = "Cluster %s is in %s state, host can register only in one of [insufficient ready pending-for-input adding-hosts]"
dbName = "verify_register_host"
ctrl *gomock.Controller
)

BeforeEach(func() {
db = common.PrepareTestDB(dbName, &events.Event{})
id = strfmt.UUID(uuid.New().String())
ctrl := gomock.NewController(GinkgoT())
ctrl = gomock.NewController(GinkgoT())
mockOperators := operators.NewMockAPI(ctrl)
dummy := &leader.DummyElector{}
clusterApi = NewManager(getDefaultConfig(), common.GetTestLog().WithField("pkg", "cluster-monitor"), db,
nil, nil, nil, nil, dummy, mockOperators)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

checkVerifyRegisterHost := func(clusterStatus string, expectErr bool) {
Expand Down Expand Up @@ -876,6 +884,7 @@ var _ = Describe("VerifyRegisterHost", func() {
})
AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand All @@ -886,16 +895,18 @@ var _ = Describe("VerifyClusterUpdatability", func() {
clusterApi *Manager
errTemplate = "Cluster %s is in %s state, cluster can be updated only in one of [insufficient ready pending-for-input adding-hosts]"
dbName = "verify_cluster_updatability"
ctrl *gomock.Controller
)

BeforeEach(func() {
db = common.PrepareTestDB(dbName, &events.Event{})
id = strfmt.UUID(uuid.New().String())
ctrl := gomock.NewController(GinkgoT())
ctrl = gomock.NewController(GinkgoT())
mockOperators := operators.NewMockAPI(ctrl)
dummy := &leader.DummyElector{}
clusterApi = NewManager(getDefaultConfig(), common.GetTestLog().WithField("pkg", "cluster-monitor"), db,
nil, nil, nil, nil, dummy, mockOperators)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

checkVerifyClusterUpdatability := func(clusterStatus string, expectErr bool) {
Expand Down Expand Up @@ -927,6 +938,7 @@ var _ = Describe("VerifyClusterUpdatability", func() {

AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -955,6 +967,7 @@ var _ = Describe("CancelInstallation", func() {
ID: &id,
Status: swag.String(models.ClusterStatusInsufficient),
StatusInfo: swag.String(statusInfoInsufficient)}}
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

Context("cancel_installation", func() {
Expand Down Expand Up @@ -1004,6 +1017,7 @@ var _ = Describe("CancelInstallation", func() {

AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand All @@ -1015,15 +1029,17 @@ var _ = Describe("ResetCluster", func() {
c common.Cluster
eventsHandler events.Handler
dbName = "reset_cluster"
ctrl *gomock.Controller
)

BeforeEach(func() {
db = common.PrepareTestDB(dbName, &events.Event{})
eventsHandler = events.New(db, logrus.New())
dummy := &leader.DummyElector{}
ctrl := gomock.NewController(GinkgoT())
ctrl = gomock.NewController(GinkgoT())
mockOperators := operators.NewMockAPI(ctrl)
state = NewManager(getDefaultConfig(), common.GetTestLog(), db, eventsHandler, nil, nil, nil, dummy, mockOperators)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

It("reset_cluster", func() {
Expand Down Expand Up @@ -1066,6 +1082,7 @@ var _ = Describe("ResetCluster", func() {

AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -1380,6 +1397,7 @@ var _ = Describe("PrepareForInstallation", func() {
clusterId = strfmt.UUID(uuid.New().String())

mockMetric.EXPECT().ClusterHostsNTPFailures(gomock.Any(), gomock.Any(), gomock.Any())
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

// state changes to preparing-for-installation
Expand Down Expand Up @@ -1477,15 +1495,17 @@ var _ = Describe("HandlePreInstallationError", func() {
db *gorm.DB
clusterId strfmt.UUID
dbName = "handle_preInstallation_error"
ctrl *gomock.Controller
)

BeforeEach(func() {
db = common.PrepareTestDB(dbName, &events.Event{})
dummy := &leader.DummyElector{}
ctrl := gomock.NewController(GinkgoT())
ctrl = gomock.NewController(GinkgoT())
mockOperators := operators.NewMockAPI(ctrl)
capi = NewManager(getDefaultConfig(), common.GetTestLog(), db, nil, nil, nil, nil, dummy, mockOperators)
clusterId = strfmt.UUID(uuid.New().String())
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

// state changes to error
Expand Down Expand Up @@ -1551,6 +1571,7 @@ var _ = Describe("HandlePreInstallationError", func() {
}
AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -1597,6 +1618,7 @@ var _ = Describe("SetVipsData", func() {
mockOperators := operators.NewMockAPI(ctrl)
capi = NewManager(getDefaultConfig(), common.GetTestLog(), db, mockEvents, nil, nil, nil, dummy, mockOperators)
clusterId = strfmt.UUID(uuid.New().String())
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})
AfterEach(func() {
ctrl.Finish()
Expand Down Expand Up @@ -1742,9 +1764,6 @@ var _ = Describe("SetVipsData", func() {
Expect(swag.StringValue(c.Status)).To(Equal(t.expectedState))
})
}
AfterEach(func() {
common.DeleteTestDB(db, dbName)
})
})

var _ = Describe("Majority groups", func() {
Expand All @@ -1761,6 +1780,7 @@ var _ = Describe("Majority groups", func() {

AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})

BeforeEach(func() {
Expand Down Expand Up @@ -1789,6 +1809,7 @@ var _ = Describe("Majority groups", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

setup := func(ips []string) {
Expand Down Expand Up @@ -1895,6 +1916,7 @@ var _ = Describe("ready_state", func() {
{Status: api.Success, ValidationId: string(models.ClusterValidationIDOcsRequirementsSatisfied)},
{Status: api.Success, ValidationId: string(models.ClusterValidationIDLsoRequirementsSatisfied)},
}, nil)
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

Context("refresh_state", func() {
Expand All @@ -1917,6 +1939,7 @@ var _ = Describe("ready_state", func() {
})
AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -1960,6 +1983,10 @@ var _ = Describe("insufficient_state", func() {
Expect(swag.StringValue(cluster.Status)).Should(Equal(models.ClusterStatusInsufficient))
c := getClusterFromDB(*cluster.ID, db)
Expect(swag.StringValue(c.Status)).Should(Equal(models.ClusterStatusInsufficient))
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})
AfterEach(func() {
ctrl.Finish()
})
})

Expand Down Expand Up @@ -2013,10 +2040,8 @@ var _ = Describe("prepare-for-installation refresh status", func() {

AfterEach(func() {
db.Close()
})

AfterEach(func() {
common.DeleteTestDB(db, dbName)
ctrl.Finish()
})
})

Expand Down Expand Up @@ -2058,7 +2083,7 @@ var _ = Describe("Cluster tarred files", func() {
Expect(db.Create(&cl).Error).NotTo(HaveOccurred())
prefix = fmt.Sprintf("%s/logs/", cl.ID)
mockEvents.EXPECT().AddEvent(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

AfterEach(func() {
Expand Down Expand Up @@ -2128,6 +2153,7 @@ var _ = Describe("CompleteInstallation", func() {
Status: swag.String(models.ClusterStatusFinalizing),
}}
Expect(db.Create(&c).Error).ShouldNot(HaveOccurred())
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

It("complete installation successfully", func() {
Expand Down Expand Up @@ -2205,6 +2231,7 @@ var _ = Describe("Permanently delete clusters", func() {
c1 = registerCluster()
c2 = registerCluster()
c3 = registerCluster()
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

It("permanently delete clusters success", func() {
Expand Down Expand Up @@ -2284,6 +2311,7 @@ var _ = Describe("Get cluster by Kube key", func() {
Namespace: kubeKeyNamespace,
Name: kubeKeyName,
}
mockOperators.EXPECT().AnyOperatorEnabled(gomock.Any()).Return(false).AnyTimes()
})

It("cluster not exist", func() {
Expand Down

0 comments on commit b44b1c1

Please sign in to comment.