|
6 | 6 | "strconv" |
7 | 7 | "time" |
8 | 8 |
|
| 9 | + "github.com/openshift/release-controller/pkg/apis/release/v1alpha1" |
9 | 10 | releasecontroller "github.com/openshift/release-controller/pkg/release-controller" |
10 | 11 |
|
11 | 12 | batchv1 "k8s.io/api/batch/v1" |
@@ -417,3 +418,44 @@ func (c *Controller) ensureReleaseMirrorJob(release *releasecontroller.Release, |
417 | 418 | func releaseMirrorJobName(tagName string) string { |
418 | 419 | return fmt.Sprintf("%s-alternate-mirror", tagName) |
419 | 420 | } |
| 421 | + |
| 422 | +// ensureRemoveTagJob creates a job to copy rc_payload__{version} to remove__rc_payload__{version} in quay.io |
| 423 | +func (c *Controller) ensureRemoveTagJob(payload *v1alpha1.ReleasePayload, release *releasecontroller.Release) (*batchv1.Job, error) { |
| 424 | + if len(release.Config.AlternateImageRepository) == 0 || len(release.Config.AlternateImageRepositorySecretName) == 0 { |
| 425 | + return nil, fmt.Errorf("alternate repository or secret not configured") |
| 426 | + } |
| 427 | + |
| 428 | + jobName := fmt.Sprintf("%s-remove-tag", payload.Name) |
| 429 | + return c.ensureJob(jobName, nil, func() (*batchv1.Job, error) { |
| 430 | + // Get cli image from mirror or config |
| 431 | + cliImage := "registry.ci.openshift.org/ocp/4.16:cli" |
| 432 | + if mirror, err := c.releaseLister.ImageStreams(release.Target.Namespace).Get(release.Target.Name); err == nil { |
| 433 | + cliImage = fmt.Sprintf("%s:cli", mirror.Status.DockerImageRepository) |
| 434 | + } |
| 435 | + if len(release.Config.OverrideCLIImage) > 0 { |
| 436 | + cliImage = release.Config.OverrideCLIImage |
| 437 | + } |
| 438 | + |
| 439 | + job, prefix := newReleaseJobBase(jobName, cliImage, release.Config.AlternateImageRepositorySecretName) |
| 440 | + |
| 441 | + rcPayloadTag := fmt.Sprintf("rc_payload__%s", payload.Name) |
| 442 | + removeTag := fmt.Sprintf("remove__rc_payload__%s", payload.Name) |
| 443 | + fromImage := fmt.Sprintf("%s:%s", release.Config.AlternateImageRepository, rcPayloadTag) |
| 444 | + toImage := fmt.Sprintf("%s:%s", release.Config.AlternateImageRepository, removeTag) |
| 445 | + |
| 446 | + job.Spec.Template.Spec.Containers[0].Command = []string{ |
| 447 | + "/bin/bash", "-c", |
| 448 | + prefix + ` |
| 449 | + oc image mirror --keep-manifest-list=true $1 $2 |
| 450 | + `, |
| 451 | + "", |
| 452 | + fromImage, toImage, |
| 453 | + } |
| 454 | + |
| 455 | + job.Annotations[releasecontroller.ReleaseAnnotationReleaseTag] = payload.Name |
| 456 | + job.Annotations[releasecontroller.ReleaseAnnotationTarget] = fmt.Sprintf("%s/%s", payload.Spec.PayloadCoordinates.Namespace, payload.Spec.PayloadCoordinates.ImagestreamName) |
| 457 | + |
| 458 | + klog.V(2).Infof("Creating remove tag job %s/%s to copy %s to %s", c.jobNamespace, job.Name, fromImage, toImage) |
| 459 | + return job, nil |
| 460 | + }) |
| 461 | +} |
0 commit comments