Skip to content

Commit 066c718

Browse files
committed
Create APIService after API server deployment
This commit introduces a change so the APISerivce is created after the API Server is successfully deployed on the cluster.
1 parent b4b160d commit 066c718

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

pkg/controller/operators/olm/apiservices.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -298,29 +298,30 @@ func apiServiceDescriptionsForDeployment(descs []v1alpha1.APIServiceDescription,
298298
return result
299299
}
300300

301-
func (a *Operator) installOwnedAPIServiceRequirements(csv *v1alpha1.ClusterServiceVersion, strategy install.Strategy) (install.Strategy, error) {
301+
func (a *Operator) installOwnedAPIServiceRequirements(csv *v1alpha1.ClusterServiceVersion, strategy install.Strategy) (install.Strategy, map[string][]byte, error) {
302302
logger := log.WithFields(log.Fields{
303303
"csv": csv.GetName(),
304304
"namespace": csv.GetNamespace(),
305305
})
306306

307307
// Assume the strategy is for a deployment
308+
deploymentNameToCAPEM := map[string][]byte{}
308309
strategyDetailsDeployment, ok := strategy.(*v1alpha1.StrategyDetailsDeployment)
309310
if !ok {
310-
return nil, fmt.Errorf("unsupported InstallStrategy type")
311+
return nil, deploymentNameToCAPEM, fmt.Errorf("unsupported InstallStrategy type")
311312
}
312313

313314
// Return early if there are no owned APIServices
314315
if len(csv.Spec.APIServiceDefinitions.Owned) == 0 {
315-
return strategyDetailsDeployment, nil
316+
return strategyDetailsDeployment, deploymentNameToCAPEM, nil
316317
}
317318

318319
// Create the CA
319320
expiration := time.Now().Add(DefaultCertValidFor)
320321
ca, err := certs.GenerateCA(expiration, Organization)
321322
if err != nil {
322323
logger.Debug("failed to generate CA")
323-
return nil, err
324+
return nil, deploymentNameToCAPEM, err
324325
}
325326
rotateAt := expiration.Add(-1 * DefaultCertMinFresh)
326327

@@ -334,25 +335,22 @@ func (a *Operator) installOwnedAPIServiceRequirements(csv *v1alpha1.ClusterServi
334335
// Update the deployment for each api service desc
335336
newDepSpec, err := a.installAPIServiceRequirements(sddSpec.Name, ca, rotateAt, sddSpec.Spec, csv, getServicePorts(descs))
336337
if err != nil {
337-
return nil, err
338+
return nil, deploymentNameToCAPEM, err
338339
}
339340

340341
caPEM, _, err := ca.ToPEM()
341342
if err != nil {
342343
logger.Warnf("unable to convert CA certificate to PEM format for Deployment %s", sddSpec.Name)
343-
return nil, err
344+
return nil, deploymentNameToCAPEM, err
344345
}
345346

346-
for _, desc := range descs {
347-
err = a.createOrUpdateAPIService(caPEM, desc, csv)
348-
if err != nil {
349-
return nil, err
350-
}
347+
deploymentNameToCAPEM[sddSpec.Name] = caPEM
351348

349+
for _, desc := range descs {
352350
// Cleanup legacy resources
353351
err = a.deleteLegacyAPIServiceResources(csv, desc)
354352
if err != nil {
355-
return nil, err
353+
return nil, deploymentNameToCAPEM, err
356354
}
357355
}
358356
strategyDetailsDeployment.DeploymentSpecs[i].Spec = *newDepSpec
@@ -364,7 +362,7 @@ func (a *Operator) installOwnedAPIServiceRequirements(csv *v1alpha1.ClusterServi
364362
csv.Status.CertsLastUpdated = &now
365363
csv.Status.CertsRotateAt = &rotateTime
366364

367-
return strategyDetailsDeployment, nil
365+
return strategyDetailsDeployment, deploymentNameToCAPEM, nil
368366
}
369367

370368
// updateDeploymentSpecsWithApiServiceData transforms an install strategy to include information about apiservices

pkg/controller/operators/olm/operator.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1398,7 +1398,8 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
13981398
}
13991399

14001400
// Install owned APIServices and update strategy with serving cert data
1401-
strategy, syncError = a.installOwnedAPIServiceRequirements(out, strategy)
1401+
deploymentCAPEMs := map[string][]byte{}
1402+
strategy, deploymentCAPEMs, syncError = a.installOwnedAPIServiceRequirements(out, strategy)
14021403
if syncError != nil {
14031404
out.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonComponentFailed, fmt.Sprintf("install API services failed: %s", syncError), now, a.recorder)
14041405
return
@@ -1414,6 +1415,25 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
14141415
return
14151416
}
14161417

1418+
// Create APIService
1419+
for _, desc := range out.GetOwnedAPIServiceDescriptions() {
1420+
caPEM, ok := deploymentCAPEMs[desc.DeploymentName]
1421+
if !ok {
1422+
err = fmt.Errorf("Deployment not associated with APIService")
1423+
return
1424+
}
1425+
err = a.createOrUpdateAPIService(caPEM, desc, out)
1426+
if err != nil {
1427+
return
1428+
}
1429+
1430+
// Cleanup legacy resources
1431+
err = a.deleteLegacyAPIServiceResources(out, desc)
1432+
if err != nil {
1433+
return
1434+
}
1435+
}
1436+
14171437
out.SetPhaseWithEvent(v1alpha1.CSVPhaseInstalling, v1alpha1.CSVReasonInstallSuccessful, "waiting for install components to report healthy", now, a.recorder)
14181438
err := a.csvQueueSet.Requeue(out.GetNamespace(), out.GetName())
14191439
if err != nil {

0 commit comments

Comments
 (0)