Skip to content

Commit a9b43a3

Browse files
committed
Support for referencePolicy Source while importing release payload & Update reference-mode=source for creating new payloads
1 parent 8d9f864 commit a9b43a3

File tree

12 files changed

+182
-31
lines changed

12 files changed

+182
-31
lines changed

pkg/api/ephemeralcluster/v1/ci.openshift.io_ephemeralclusters.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ spec:
9696
description: Namespace is the namespace in which the
9797
integration stream lives.
9898
type: string
99+
reference_policy:
100+
description: ReferencePolicy is the policy to use when
101+
resolving references (Local or Source)
102+
type: string
99103
required:
100104
- name
101105
- namespace

pkg/api/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
prowv1 "sigs.k8s.io/prow/pkg/apis/prowjobs/v1"
99
prowconfig "sigs.k8s.io/prow/pkg/config"
1010
"sigs.k8s.io/prow/pkg/repoowners"
11+
12+
imagev1 "github.com/openshift/api/image/v1"
1113
)
1214

1315
const (
@@ -335,6 +337,8 @@ type Integration struct {
335337
// IncludeBuiltImages determines if the release we assemble will include
336338
// images built during the test itself.
337339
IncludeBuiltImages bool `json:"include_built_images,omitempty"`
340+
// ReferencePolicy is the policy to use when resolving references (Local or Source)
341+
ReferencePolicy *imagev1.TagReferencePolicyType `json:"reference_policy,omitempty"`
338342
}
339343

340344
// ReleaseDescriptor holds common data for different types of release payloads
@@ -511,6 +515,9 @@ type ReleaseTagConfiguration struct {
511515
// IncludeBuiltImages determines if the release we assemble will include
512516
// images built during the test itself.
513517
IncludeBuiltImages bool `json:"include_built_images,omitempty"`
518+
519+
// ReferencePolicy is the policy to use when resolving references (Local or Source)
520+
ReferencePolicy *imagev1.TagReferencePolicyType `json:"reference_policy,omitempty"`
514521
}
515522

516523
func (config ReleaseTagConfiguration) InputsName() string {

pkg/api/zz_generated.deepcopy.go

Lines changed: 22 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/defaults/defaults.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ func fromConfig(
187187
// factor release steps into something more reusable
188188
hasReleaseStep = true
189189
var value string
190+
var err error
190191
var overrideCLIReleaseExtractImage *coreapi.ObjectReference
191192
var overrideCLIResolveErr error
192193
switch {
@@ -214,12 +215,22 @@ func fromConfig(
214215
switch {
215216
case resolveConfig.Integration != nil:
216217
logrus.Infof("Building release %s from a snapshot of %s/%s", resolveConfig.Name, resolveConfig.Integration.Namespace, resolveConfig.Integration.Name)
217-
// this is the one case where we're not importing a payload, we need to get the images and build one
218-
snapshot := releasesteps.ReleaseSnapshotStep(resolveConfig.Name, *resolveConfig.Integration, podClient, jobSpec, integratedStreams[fmt.Sprintf("%s/%s", resolveConfig.Integration.Namespace, resolveConfig.Integration.Name)])
218+
219+
var snapshot api.Step
220+
var key string
221+
222+
if resolveConfig.Integration.ReferencePolicy != nil {
223+
key = fmt.Sprintf("%s/%s/%s", resolveConfig.Integration.Namespace, resolveConfig.Integration.Name, *resolveConfig.Integration.ReferencePolicy)
224+
} else {
225+
key = fmt.Sprintf("%s/%s", resolveConfig.Integration.Namespace, resolveConfig.Integration.Name)
226+
}
227+
228+
snapshot = releasesteps.ReleaseSnapshotStep(resolveConfig.Name, *resolveConfig.Integration, podClient, jobSpec, integratedStreams[key])
219229
assemble := releasesteps.AssembleReleaseStep(resolveConfig.Name, nodeName, &api.ReleaseTagConfiguration{
220230
Namespace: resolveConfig.Integration.Namespace,
221231
Name: resolveConfig.Integration.Name,
222232
IncludeBuiltImages: resolveConfig.Integration.IncludeBuiltImages,
233+
ReferencePolicy: resolveConfig.Integration.ReferencePolicy,
223234
}, config.Resources, podClient, jobSpec)
224235
for _, s := range []api.Step{snapshot, assemble} {
225236
buildSteps = append(buildSteps, s)
@@ -231,7 +242,13 @@ func fromConfig(
231242
source = releasesteps.NewReleaseSourceFromConfig(resolveConfig, httpClient)
232243
}
233244
}
234-
step := releasesteps.ImportReleaseStep(resolveConfig.Name, nodeName, resolveConfig.TargetName(), source, false, config.Resources, podClient, jobSpec, pullSecret, overrideCLIReleaseExtractImage)
245+
var referencePolicy imagev1.TagReferencePolicyType
246+
if resolveConfig.Integration != nil && resolveConfig.Integration.ReferencePolicy != nil {
247+
referencePolicy = *resolveConfig.Integration.ReferencePolicy
248+
} else {
249+
referencePolicy = imagev1.LocalTagReferencePolicy // Provide a default value or handle appropriately
250+
}
251+
step := releasesteps.ImportReleaseStep(resolveConfig.Name, nodeName, resolveConfig.TargetName(), referencePolicy, source, false, config.Resources, podClient, jobSpec, pullSecret, overrideCLIReleaseExtractImage)
235252
buildSteps = append(buildSteps, step)
236253
addProvidesForStep(step, params)
237254
continue
@@ -283,6 +300,12 @@ func fromConfig(
283300
for _, name := range []string{api.InitialReleaseName, api.LatestReleaseName} {
284301
var releaseStep api.Step
285302
envVar := utils.ReleaseImageEnv(name)
303+
var referencePolicy imagev1.TagReferencePolicyType
304+
if rawStep.ReleaseImagesTagStepConfiguration.ReferencePolicy != nil {
305+
referencePolicy = *rawStep.ReleaseImagesTagStepConfiguration.ReferencePolicy
306+
} else {
307+
referencePolicy = imagev1.LocalTagReferencePolicy // Provide a default value or handle appropriately
308+
}
286309
if params.HasInput(envVar) {
287310
pullSpec, err := params.Get(envVar)
288311
if err != nil {
@@ -291,10 +314,11 @@ func fromConfig(
291314
logrus.Infof("Using explicitly provided pull-spec for release %s (%s)", name, pullSpec)
292315
target := rawStep.ReleaseImagesTagStepConfiguration.TargetName(name)
293316
source := releasesteps.NewReleaseSourceFromPullSpec(pullSpec)
294-
releaseStep = releasesteps.ImportReleaseStep(name, nodeName, target, source, true, config.Resources, podClient, jobSpec, pullSecret, nil)
317+
releaseStep = releasesteps.ImportReleaseStep(name, nodeName, target, referencePolicy, source, true, config.Resources, podClient, jobSpec, pullSecret, nil)
295318
} else {
296319
// for backwards compatibility, users get inclusion for free with tag_spec
297320
cfg := *rawStep.ReleaseImagesTagStepConfiguration
321+
cfg.ReferencePolicy = &referencePolicy
298322
cfg.IncludeBuiltImages = name == api.LatestReleaseName
299323
releaseStep = releasesteps.AssembleReleaseStep(name, nodeName, &cfg, config.Resources, podClient, jobSpec)
300324
}
@@ -449,8 +473,9 @@ func stepForTest(
449473
step = steps.ClusterClaimStep(c.As, c.ClusterClaim, hiveClient, client, jobSpec, step, censor)
450474
name := c.ClusterClaim.ClaimRelease(c.As).ReleaseName
451475
target := api.ReleaseConfiguration{Name: name}.TargetName()
476+
referencePolicy := imagev1.LocalTagReferencePolicy
452477
source := releasesteps.NewReleaseSourceFromClusterClaim(c.As, c.ClusterClaim, hiveClient)
453-
ret = append(ret, releasesteps.ImportReleaseStep(name, nodeName, target, source, false, config.Resources, podClient, jobSpec, pullSecret, nil))
478+
ret = append(ret, releasesteps.ImportReleaseStep(name, nodeName, target, referencePolicy, source, false, config.Resources, podClient, jobSpec, pullSecret, nil))
454479
}
455480
addProvidesForStep(step, params)
456481
ret = append(ret, step)

pkg/steps/clusterinstall/template.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ objects:
440440
mkdir /tmp/.docker && cp /etc/openshift-installer/pull-secret /tmp/.docker/config.json
441441
oc registry login --to /tmp/.docker/config.json
442442
MIRROR_BASE=$( oc get is release -o 'jsonpath={.status.publicDockerImageRepository}' )
443-
oc adm release new --from-release ${RELEASE_IMAGE_LATEST} --to-image ${MIRROR_BASE}-scratch:release --mirror ${MIRROR_BASE}-scratch || echo 'ignore: the release could not be reproduced from its inputs'
443+
oc adm release new --reference-mode="" --from-release ${RELEASE_IMAGE_LATEST} --to-image ${MIRROR_BASE}-scratch:release --mirror ${MIRROR_BASE}-scratch || echo 'ignore: the release could not be reproduced from its inputs'
444444
oc adm release mirror --from ${MIRROR_BASE}-scratch:release --to ${MIRROR_BASE} --to-release-image ${MIRROR_BASE}:mirrored
445445
RELEASE_PAYLOAD_IMAGE_SHA=$(oc get istag ${MIRROR_BASE##*/}:mirrored -o=jsonpath="{.image.metadata.name}")
446446
oc delete imagestream "$(basename "${MIRROR_BASE}-scratch")"

pkg/steps/release/create_release.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package release
33
import (
44
"context"
55
"fmt"
6+
"strings"
67
"time"
78

89
"github.com/sirupsen/logrus"
@@ -172,6 +173,12 @@ func (s *assembleReleaseStep) run(ctx context.Context) error {
172173
now := time.Now().UTC().Truncate(time.Second)
173174
version := fmt.Sprintf("%s-%s-test-%s-%s", prefix, now.Format("2006-01-02-150405"), s.jobSpec.Namespace(), s.name)
174175

176+
referencePolicy := ""
177+
if s.config.ReferencePolicy != nil && *s.config.ReferencePolicy == imagev1.SourceTagReferencePolicy {
178+
// we need to set the reference policy to Source
179+
referencePolicy = strings.ToLower(string(*s.config.ReferencePolicy))
180+
}
181+
175182
destination := fmt.Sprintf("%s:%s", releaseImageStreamRepo, s.name)
176183
logrus.Infof("Creating release image %s.", destination)
177184
podConfig := steps.PodStepConfiguration{
@@ -192,7 +199,7 @@ mkdir -p "${XDG_RUNTIME_DIR}"
192199
oc registry login
193200
exit_code="0"
194201
for ((i=1; i<=5; i++)); do
195-
if oc adm release new --max-per-registry=32 -n %q --from-image-stream %q --to-image-base %q --to-image %q --name %q; then
202+
if oc adm release new --reference-mode=%q --max-per-registry=32 -n %q --from-image-stream %q --to-image-base %q --to-image %q --name %q; then
196203
echo "Payload creation success."
197204
exit_code="0"
198205
break
@@ -226,7 +233,7 @@ done
226233
if [[ "$exit_code" != "0" ]]; then
227234
exit $exit_code
228235
fi
229-
`, s.jobSpec.Namespace(), streamName, cvo, destination, version, s.name, destination, s.name),
236+
`, referencePolicy, s.jobSpec.Namespace(), streamName, cvo, destination, version, s.name, destination, s.name),
230237
}
231238

232239
// set an explicit default for release-latest resources, but allow customization if necessary

0 commit comments

Comments
 (0)