@@ -39,6 +39,7 @@ import (
39
39
"github.com/openshift/assisted-installer/src/k8s_client"
40
40
"github.com/openshift/assisted-installer/src/ops"
41
41
"github.com/openshift/assisted-service/models"
42
+ yaml "gopkg.in/yaml.v3"
42
43
)
43
44
44
45
func TestValidator (t * testing.T ) {
@@ -106,6 +107,15 @@ var (
106
107
testIngressConfigMap = map [string ]string {
107
108
"ca-bundle.crt" : "CA" ,
108
109
}
110
+
111
+ testOperatorManifests = map [string ]string {
112
+ "kube-descheduler" : "LS0tCmFwaVZlcnNpb246IG9wZXJhdG9yLm9wZW5zaGlmdC5pby92MQpraW5kOiBLdWJlRGVzY2hlZHVsZXIKbWV0YWRhdGE6CiAgbmFtZTogY2x1c3RlcgogIG5hbWVzcGFjZTogb3BlbnNoaWZ0LWt1YmUtZGVzY2hlZHVsZXItb3BlcmF0b3IKc3BlYzoKICBsb2dMZXZlbDogTm9ybWFsCiAgbW9kZTogUHJlZGljdGl2ZQogIG9wZXJhdG9yTG9nTGV2ZWw6IE5vcm1hbAogIHByb2ZpbGVzOgogICAgLSBBZmZpbml0eUFuZFRhaW50cwogIGRlc2NoZWR1bGluZ0ludGVydmFsU2Vjb25kczogMzYwMAogIG1hbmFnZW1lbnRTdGF0ZTogTWFuYWdlZAo=" ,
113
+ "nmstate" : "CmFwaVZlcnNpb246IG5tc3RhdGUuaW8vdjEKa2luZDogTk1TdGF0ZQptZXRhZGF0YToKICBuYW1lOiBubXN0YXRlCg==" ,
114
+ }
115
+
116
+ testMonitoredOperators = []models.MonitoredOperator {
117
+ {Name : "kube-descheduler" , Namespace : "openshift-kube-descheduler-operator" , OperatorType : "olm" , SubscriptionName : "cluster-kube-descheduler-operator" },
118
+ {Name : "nmstate" , Namespace : "openshift-nmstate" , OperatorType : "olm" , SubscriptionName : "kubernetes-nmstate-operator" }}
109
119
)
110
120
111
121
var _ = Describe ("installer HostRoleMaster role" , func () {
@@ -494,9 +504,9 @@ var _ = Describe("installer HostRoleMaster role", func() {
494
504
mockk8sclient .EXPECT ().ListNodes ().Return (nodes , nil ).Times (1 )
495
505
updateProgressSuccess (done , hosts )
496
506
configuringSuccess ()
497
- for name , v := range inventoryNamesIds {
498
- value := v
499
- mockRebootsNotifier .EXPECT ().Start (gomock .Any (), name , value .Host .ID , & value .Host .InfraEnvID , gomock .Any ()).Times (1 )
507
+ for name , value := range inventoryNamesIds {
508
+ valueCopy := value
509
+ mockRebootsNotifier .EXPECT ().Start (gomock .Any (), name , valueCopy .Host .ID , & valueCopy .Host .InfraEnvID , gomock .Any ()).Times (1 )
500
510
}
501
511
exit := assistedController .waitAndUpdateNodesStatus (false )
502
512
Expect (exit ).Should (Equal (false ))
@@ -1436,6 +1446,58 @@ var _ = Describe("installer HostRoleMaster role", func() {
1436
1446
})
1437
1447
})
1438
1448
1449
+ Context ("PostInstallConfigsK8sClient" , func () {
1450
+ Context ("operator manifests" , func () {
1451
+ BeforeEach (func () {
1452
+ GeneralWaitInterval = 1 * time .Millisecond
1453
+ })
1454
+
1455
+ It ("success" , func () {
1456
+ mockAllCapabilitiesEnabled ()
1457
+
1458
+ operatorConfigMap := createConfigMap ()
1459
+
1460
+ mockk8sclient .EXPECT ().GetConfigMap ("assisted-installer" , "olm-operator-manifests" ).Return (operatorConfigMap , nil ).Times (1 )
1461
+ mockk8sclient .EXPECT ().ListJobs (gomock .Any ()).Return (& batchV1.JobList {}, nil ).AnyTimes ()
1462
+ mockk8sclient .EXPECT ().GetAllInstallPlansOfSubscription (gomock .Any ()).Return ([]olmv1alpha1.InstallPlan {}, nil ).Times (2 )
1463
+ mockRebootsNotifier .EXPECT ().GetKubeconfigPath (gomock .Any ()).Return ("" , nil ).Times (1 )
1464
+ randomCSV := uuid .New ().String ()
1465
+ mockk8sclient .EXPECT ().GetCSVFromSubscription ("openshift-kube-descheduler-operator" , "cluster-kube-descheduler-operator" ).Return (randomCSV , nil ).Times (1 )
1466
+ mockk8sclient .EXPECT ().GetCSV ("openshift-kube-descheduler-operator" , gomock .Any ()).Return (& olmv1alpha1.ClusterServiceVersion {Status : olmv1alpha1.ClusterServiceVersionStatus {Phase : olmv1alpha1 .CSVPhaseNone }}, nil ).Times (1 )
1467
+ mockk8sclient .EXPECT ().GetCSVFromSubscription ("openshift-nmstate" , "kubernetes-nmstate-operator" ).Return (randomCSV , nil ).Times (1 )
1468
+ mockk8sclient .EXPECT ().GetCSV ("openshift-nmstate" , gomock .Any ()).Return (& olmv1alpha1.ClusterServiceVersion {Status : olmv1alpha1.ClusterServiceVersionStatus {Phase : olmv1alpha1 .CSVPhaseNone }}, nil ).Times (1 )
1469
+ mockops .EXPECT ().CreateManifests (gomock .Any (), gomock .Any ()).Times (2 )
1470
+
1471
+ wg .Add (1 )
1472
+ assistedController .PostInstallConfigsK8sClient (context .TODO (), & wg , "" )
1473
+ wg .Wait ()
1474
+ })
1475
+
1476
+ It ("failure on CSVs" , func () {
1477
+ GeneralProgressUpdateInt = 1 * time .Millisecond
1478
+ mockAllCapabilitiesEnabled ()
1479
+
1480
+ operatorConfigMap := createConfigMap ()
1481
+
1482
+ mockk8sclient .EXPECT ().GetConfigMap ("assisted-installer" , "olm-operator-manifests" ).Return (operatorConfigMap , nil ).AnyTimes ()
1483
+ mockk8sclient .EXPECT ().ListJobs (gomock .Any ()).Return (& batchV1.JobList {}, nil ).AnyTimes ()
1484
+ mockk8sclient .EXPECT ().GetAllInstallPlansOfSubscription (gomock .Any ()).Return ([]olmv1alpha1.InstallPlan {}, nil ).AnyTimes ()
1485
+ mockRebootsNotifier .EXPECT ().GetKubeconfigPath (gomock .Any ()).Return ("" , nil ).AnyTimes ()
1486
+ mockk8sclient .EXPECT ().GetCSVFromSubscription ("openshift-kube-descheduler-operator" , "cluster-kube-descheduler-operator" ).Return ("" , fmt .Errorf ("dummy" )).AnyTimes ()
1487
+ mockk8sclient .EXPECT ().GetCSVFromSubscription ("openshift-nmstate" , "kubernetes-nmstate-operator" ).Return ("" , fmt .Errorf ("dummy" )).AnyTimes ()
1488
+
1489
+ wg .Add (1 )
1490
+ go func () {
1491
+ defer GinkgoRecover ()
1492
+ ctx , cancel := context .WithTimeout (context .TODO (), 10 * time .Millisecond )
1493
+ defer cancel ()
1494
+ assistedController .PostInstallConfigsK8sClient (ctx , & wg , "" )
1495
+ }()
1496
+ wg .Wait ()
1497
+ })
1498
+ })
1499
+ })
1500
+
1439
1501
Context ("update BMHs" , func () {
1440
1502
t := metav1 .Unix (98754 , 0 )
1441
1503
bmhStatus := metal3v1alpha1.BareMetalHostStatus {
@@ -2252,3 +2314,45 @@ func create3Hosts(currentStatus string, stage models.HostStage, nodeLabels strin
2252
2314
"node1" : {Host : & models.Host {InfraEnvID : infraEnvId , ID : & node1Id , NodeLabels : nodeLabels , Progress : & currentState , Status : & currentStatus }},
2253
2315
"node2" : {Host : & models.Host {InfraEnvID : infraEnvId , ID : & node2Id , NodeLabels : nodeLabels , Progress : & currentState , Status : & currentStatus }}}
2254
2316
}
2317
+
2318
+ func createConfigMap () * v1.ConfigMap {
2319
+ type operatorMetadata struct {
2320
+ Namespace string `yaml:"namespace"`
2321
+ SubscriptionName string `yaml:"subscriptionName"`
2322
+ Manifests []string `yaml:"manifests"`
2323
+ }
2324
+
2325
+ configMap := v1.ConfigMap {
2326
+ TypeMeta : metav1.TypeMeta {
2327
+ APIVersion : "v1" ,
2328
+ Kind : "ConfigMap" ,
2329
+ },
2330
+ ObjectMeta : metav1.ObjectMeta {
2331
+ Name : "olm-operator-manifests" ,
2332
+ Namespace : "assisted-installer" ,
2333
+ },
2334
+ Data : map [string ]string {},
2335
+ }
2336
+
2337
+ for _ , operator := range testMonitoredOperators {
2338
+ var manifestFileNames []string
2339
+ manifestContent := testOperatorManifests [operator .Name ]
2340
+
2341
+ fileName := fmt .Sprintf ("%s-1.yaml" , operator .Name )
2342
+ configMap .Data [fileName ] = manifestContent
2343
+ manifestFileNames = append (manifestFileNames , fileName )
2344
+
2345
+ metadata := operatorMetadata {
2346
+ Namespace : operator .Namespace ,
2347
+ SubscriptionName : operator .SubscriptionName ,
2348
+ Manifests : manifestFileNames ,
2349
+ }
2350
+
2351
+ metadataYAML , _ := yaml .Marshal (metadata )
2352
+
2353
+ metadataKey := fmt .Sprintf ("%s.metadata.yaml" , operator .Name )
2354
+ configMap .Data [metadataKey ] = string (metadataYAML )
2355
+ }
2356
+
2357
+ return & configMap
2358
+ }
0 commit comments