Skip to content

Commit ba7839e

Browse files
Merge pull request #17091 from bparees/tag_merging
Automatic merge from submit-queue (batch tested with PRs 17149, 17091). merge imagestreamtag list on patch This will ensure we don't drop spec tags when applying a new set of imagestreams that is not a superset of the existing spec tags. related to https://bugzilla.redhat.com/show_bug.cgi?id=1507031
2 parents 4b31ba8 + 1b8086c commit ba7839e

File tree

7 files changed

+82
-5
lines changed

7 files changed

+82
-5
lines changed

api/protobuf-spec/github_com_openshift_origin_pkg_image_apis_image_v1.proto

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

api/swagger-spec/openshift-openapi-spec.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90326,7 +90326,9 @@
9032690326
"type": "array",
9032790327
"items": {
9032890328
"$ref": "#/definitions/com.github.openshift.origin.pkg.image.apis.image.v1.TagReference"
90329-
}
90329+
},
90330+
"x-kubernetes-patch-merge-key": "name",
90331+
"x-kubernetes-patch-strategy": "merge"
9033090332
}
9033190333
}
9033290334
},
@@ -90349,7 +90351,9 @@
9034990351
"type": "array",
9035090352
"items": {
9035190353
"$ref": "#/definitions/com.github.openshift.origin.pkg.image.apis.image.v1.NamedTagEventList"
90352-
}
90354+
},
90355+
"x-kubernetes-patch-merge-key": "tag",
90356+
"x-kubernetes-patch-strategy": "merge"
9035390357
}
9035490358
}
9035590359
},

pkg/image/apis/image/v1/generated.proto

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

pkg/image/apis/image/v1/types.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,9 @@ type ImageStreamSpec struct {
184184
// Specify the source for the tags to be imported in each tag via the spec.tags.from reference instead.
185185
DockerImageRepository string `json:"dockerImageRepository,omitempty" protobuf:"bytes,1,opt,name=dockerImageRepository"`
186186
// tags map arbitrary string values to specific image locators
187-
Tags []TagReference `json:"tags,omitempty" protobuf:"bytes,2,rep,name=tags"`
187+
// +patchMergeKey=name
188+
// +patchStrategy=merge
189+
Tags []TagReference `json:"tags,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=tags"`
188190
}
189191

190192
// ImageLookupPolicy describes how an image stream can be used to override the image references
@@ -274,7 +276,9 @@ type ImageStreamStatus struct {
274276
PublicDockerImageRepository string `json:"publicDockerImageRepository,omitempty" protobuf:"bytes,3,opt,name=publicDockerImageRepository"`
275277
// Tags are a historical record of images associated with each tag. The first entry in the
276278
// TagEvent array is the currently tagged image.
277-
Tags []NamedTagEventList `json:"tags,omitempty" protobuf:"bytes,2,rep,name=tags"`
279+
// +patchMergeKey=tag
280+
// +patchStrategy=merge
281+
Tags []NamedTagEventList `json:"tags,omitempty" patchStrategy:"merge" patchMergeKey:"tag" protobuf:"bytes,2,rep,name=tags"`
278282
}
279283

280284
// NamedTagEventList relates a tag to its image history.

pkg/openapi/zz_generated.openapi.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6135,6 +6135,12 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope
61356135
},
61366136
},
61376137
"tags": {
6138+
VendorExtensible: spec.VendorExtensible{
6139+
Extensions: spec.Extensions{
6140+
"x-kubernetes-patch-merge-key": "name",
6141+
"x-kubernetes-patch-strategy": "merge",
6142+
},
6143+
},
61386144
SchemaProps: spec.SchemaProps{
61396145
Description: "tags map arbitrary string values to specific image locators",
61406146
Type: []string{"array"},
@@ -6173,6 +6179,12 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope
61736179
},
61746180
},
61756181
"tags": {
6182+
VendorExtensible: spec.VendorExtensible{
6183+
Extensions: spec.Extensions{
6184+
"x-kubernetes-patch-merge-key": "tag",
6185+
"x-kubernetes-patch-strategy": "merge",
6186+
},
6187+
},
61766188
SchemaProps: spec.SchemaProps{
61776189
Description: "Tags are a historical record of images associated with each tag. The first entry in the TagEvent array is the currently tagged image.",
61786190
Type: []string{"array"},

test/cmd/images.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ trap os::test::junit::reconcile_output EXIT
99
os::cmd::expect_success 'oc login -u system:admin'
1010
cluster_admin_context="$( oc config current-context )"
1111
os::cmd::expect_success "oc config use-context '${original_context}'"
12-
oc delete project test-cmd-images-2 --context=${cluster_admin_context}
12+
oc delete project test-cmd-images-2 merge-tags --context=${cluster_admin_context}
1313
oc delete all,templates --all --context=${cluster_admin_context}
1414

1515
exit 0
@@ -292,4 +292,15 @@ os::cmd::expect_success 'oc delete all --all'
292292
echo "delete istag: ok"
293293
os::test::junit::declare_suite_end
294294

295+
os::test::junit::declare_suite_start "cmd/images${IMAGES_TESTS_POSTFIX:-}/merge-tags-on-apply"
296+
os::cmd::expect_success 'oc new-project merge-tags'
297+
os::cmd::expect_success 'oc create -f examples/image-streams/image-streams-centos7.json'
298+
os::cmd::expect_success_and_text 'oc get is ruby -o jsonpath={.spec.tags[*].name}' '2.0 2.2 2.3 2.4 latest'
299+
os::cmd::expect_success 'oc apply -f test/testdata/images/modified-ruby-imagestream.json'
300+
os::cmd::expect_success_and_text 'oc get is ruby -o jsonpath={.spec.tags[*].name}' '2.0 2.2 2.3 2.4 latest newtag'
301+
os::cmd::expect_success_and_text 'oc get is ruby -o jsonpath={.spec.tags[3].annotations.version}' '2.4 patched'
302+
os::cmd::expect_success 'oc delete project merge-tags'
303+
echo "apply new imagestream tags: ok"
304+
os::test::junit::declare_suite_end
305+
295306
os::test::junit::declare_suite_end
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"kind": "ImageStream",
3+
"apiVersion": "v1",
4+
"metadata": {
5+
"name": "ruby",
6+
"annotations": {
7+
"openshift.io/display-name": "Ruby"
8+
}
9+
},
10+
"spec": {
11+
"tags": [
12+
{
13+
"name": "2.4",
14+
"annotations": {
15+
"openshift.io/display-name": "Ruby Patched",
16+
"openshift.io/provider-display-name": "Red Hat, Inc.",
17+
"description": "Build and run Ruby 2.4 applications on CentOS 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.4/README.md.",
18+
"iconClass": "icon-ruby",
19+
"tags": "builder,ruby",
20+
"supports": "ruby:2.4,ruby",
21+
"version": "2.4 patched",
22+
"sampleRepo": "https://github.com/openshift/ruby-ex.git"
23+
},
24+
"from": {
25+
"kind": "DockerImage",
26+
"name": "centos/ruby-24-centos7:latest"
27+
}
28+
},
29+
{
30+
"name": "newtag",
31+
"from": {
32+
"kind": "DockerImage",
33+
"name": "centos/ruby-24-centos7:latest"
34+
}
35+
}
36+
]
37+
}
38+
}

0 commit comments

Comments
 (0)