Skip to content

Commit ed4154b

Browse files
rohanKanojiamanusa
authored andcommitted
fix (jkube-kit/enricher) : WellKnownLabelEnricher also considers labels added via resource configuration
While adding labels and selectors to a resource, WellKnownLabelEnricher and ProjectLabelEnricher would give precedence to label configured via resource label XML/Groovy DSL configuration. This precedence would depend on the type of resource label configuration used. If `all` has been provided in configuration, this means precedence would be given for all resources. However, if some specific resource label configuration is used; precedence would only be given for that specific resource Signed-off-by: Rohan Kumar <rohaan@redhat.com>
1 parent 51a80d3 commit ed4154b

File tree

10 files changed

+547
-56
lines changed

10 files changed

+547
-56
lines changed

gradle-plugin/it/src/it/well-known-labels/build.gradle

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,32 @@ repositories {
2525
mavenCentral()
2626
}
2727

28+
def allProperties = new Properties();
29+
allProperties.put("team","via-resource-groovy-dsl-labels-all")
30+
allProperties.put("language", "via-resource-groovy-dsl-labels-all")
31+
allProperties.put("provider", "via-resource-groovy-dsl-labels-all")
32+
allProperties.put("app", "via-resource-groovy-dsl-labels-all")
33+
allProperties.put("version", "via-resource-groovy-dsl-labels-all")
34+
allProperties.put("group", "via-resource-groovy-dsl-labels-all")
35+
allProperties.put("app.kubernetes.io/name", "via-resource-groovy-dsl-labels-all")
36+
allProperties.put("app.kubernetes.io/version", "via-resource-groovy-dsl-labels-all")
37+
allProperties.put("app.kubernetes.io/component", "via-resource-groovy-dsl-labels-all")
38+
allProperties.put("app.kubernetes.io/managed-by", "via-resource-groovy-dsl-labels-all")
39+
allProperties.put("app.kubernetes.io/part-of", "via-resource-groovy-dsl-labels-all")
40+
41+
def serviceProperties = new Properties();
42+
serviceProperties.put("team", "via-resource-groovy-dsl-labels-service")
43+
serviceProperties.put("language", "via-resource-groovy-dsl-labels-service")
44+
serviceProperties.put("provider", "via-resource-groovy-dsl-labels-service")
45+
serviceProperties.put("app", "via-resource-groovy-dsl-labels-service")
46+
serviceProperties.put("version", "via-resource-groovy-dsl-labels-service")
47+
serviceProperties.put("group", "via-resource-groovy-dsl-labels-service")
48+
serviceProperties.put("app.kubernetes.io/name", "via-resource-groovy-dsl-labels-service")
49+
serviceProperties.put("app.kubernetes.io/version", "via-resource-groovy-dsl-labels-service")
50+
serviceProperties.put("app.kubernetes.io/component", "via-resource-groovy-dsl-labels-service")
51+
serviceProperties.put("app.kubernetes.io/managed-by", "via-resource-groovy-dsl-labels-service")
52+
serviceProperties.put("app.kubernetes.io/part-of", "via-resource-groovy-dsl-labels-service")
53+
2854
def extensionConfig = {
2955
offline = true
3056
images {
@@ -36,6 +62,14 @@ def extensionConfig = {
3662
}
3763
}
3864
}
65+
if (project.hasProperty('labelsViaResourceConfig')) {
66+
resources {
67+
labels {
68+
all = allProperties
69+
service = serviceProperties
70+
}
71+
}
72+
}
3973
}
4074

4175
kubernetes(extensionConfig)
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
apiVersion: v1
3+
kind: List
4+
items:
5+
- apiVersion: v1
6+
kind: Service
7+
metadata:
8+
annotations:
9+
jkube.eclipse.org/git-branch: "@ignore@"
10+
jkube.eclipse.org/git-commit: "@ignore@"
11+
jkube.eclipse.org/git-url: "@ignore@"
12+
labels:
13+
app: via-resource-groovy-dsl-labels-service
14+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-service
15+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-service
16+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-service
17+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-service
18+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-service
19+
group: via-resource-groovy-dsl-labels-service
20+
provider: via-resource-groovy-dsl-labels-service
21+
version: via-resource-groovy-dsl-labels-service
22+
name: well-known-labels
23+
spec:
24+
ports:
25+
- name: http
26+
port: 8080
27+
protocol: TCP
28+
targetPort: 8080
29+
selector:
30+
app: via-resource-groovy-dsl-labels-service
31+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-service
32+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-service
33+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-service
34+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-service
35+
group: via-resource-groovy-dsl-labels-service
36+
provider: via-resource-groovy-dsl-labels-service
37+
- apiVersion: apps/v1
38+
kind: Deployment
39+
metadata:
40+
annotations:
41+
jkube.eclipse.org/git-branch: "@ignore@"
42+
jkube.eclipse.org/git-commit: "@ignore@"
43+
jkube.eclipse.org/git-url: "@ignore@"
44+
labels:
45+
app: via-resource-groovy-dsl-labels-all
46+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
47+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
48+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
49+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
50+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-all
51+
group: via-resource-groovy-dsl-labels-all
52+
provider: via-resource-groovy-dsl-labels-all
53+
version: via-resource-groovy-dsl-labels-all
54+
name: well-known-labels
55+
spec:
56+
replicas: 1
57+
revisionHistoryLimit: 2
58+
selector:
59+
matchLabels:
60+
app: via-resource-groovy-dsl-labels-all
61+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
62+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
63+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
64+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
65+
group: via-resource-groovy-dsl-labels-all
66+
provider: via-resource-groovy-dsl-labels-all
67+
template:
68+
metadata:
69+
annotations:
70+
jkube.eclipse.org/git-branch: "@ignore@"
71+
jkube.eclipse.org/git-commit: "@ignore@"
72+
jkube.eclipse.org/git-url: "@ignore@"
73+
labels:
74+
app: via-resource-groovy-dsl-labels-all
75+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
76+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
77+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
78+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
79+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-all
80+
group: via-resource-groovy-dsl-labels-all
81+
provider: via-resource-groovy-dsl-labels-all
82+
version: via-resource-groovy-dsl-labels-all
83+
name: well-known-labels
84+
spec:
85+
containers:
86+
- env:
87+
- name: KUBERNETES_NAMESPACE
88+
valueFrom:
89+
fieldRef:
90+
fieldPath: metadata.namespace
91+
- name: HOSTNAME
92+
valueFrom:
93+
fieldRef:
94+
fieldPath: metadata.name
95+
image: repository/well-known-labels:latest
96+
imagePullPolicy: IfNotPresent
97+
name: repository-well-known-labels
98+
ports:
99+
- containerPort: 8080
100+
name: http
101+
protocol: TCP
102+
securityContext:
103+
privileged: false
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
---
2+
apiVersion: v1
3+
kind: List
4+
items:
5+
- apiVersion: v1
6+
kind: Service
7+
metadata:
8+
annotations:
9+
app.openshift.io/vcs-ref: "@ignore@"
10+
app.openshift.io/vcs-uri: "@ignore@"
11+
jkube.eclipse.org/git-branch: "@ignore@"
12+
jkube.eclipse.org/git-commit: "@ignore@"
13+
jkube.eclipse.org/git-url: "@ignore@"
14+
labels:
15+
app: via-resource-groovy-dsl-labels-service
16+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-service
17+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-service
18+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-service
19+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-service
20+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-service
21+
group: via-resource-groovy-dsl-labels-service
22+
provider: via-resource-groovy-dsl-labels-service
23+
version: via-resource-groovy-dsl-labels-service
24+
name: well-known-labels
25+
spec:
26+
ports:
27+
- name: http
28+
port: 8080
29+
protocol: TCP
30+
targetPort: 8080
31+
selector:
32+
app: via-resource-groovy-dsl-labels-service
33+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-service
34+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-service
35+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-service
36+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-service
37+
group: via-resource-groovy-dsl-labels-service
38+
provider: via-resource-groovy-dsl-labels-service
39+
- apiVersion: apps.openshift.io/v1
40+
kind: DeploymentConfig
41+
metadata:
42+
annotations:
43+
app.openshift.io/vcs-ref: "@ignore@"
44+
app.openshift.io/vcs-uri: "@ignore@"
45+
jkube.eclipse.org/git-branch: "@ignore@"
46+
jkube.eclipse.org/git-commit: "@ignore@"
47+
jkube.eclipse.org/git-url: "@ignore@"
48+
labels:
49+
app: via-resource-groovy-dsl-labels-all
50+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
51+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
52+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
53+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
54+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-all
55+
group: via-resource-groovy-dsl-labels-all
56+
provider: via-resource-groovy-dsl-labels-all
57+
version: via-resource-groovy-dsl-labels-all
58+
name: well-known-labels
59+
spec:
60+
replicas: 1
61+
revisionHistoryLimit: 2
62+
selector:
63+
app: via-resource-groovy-dsl-labels-all
64+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
65+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
66+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
67+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
68+
group: via-resource-groovy-dsl-labels-all
69+
provider: via-resource-groovy-dsl-labels-all
70+
strategy:
71+
rollingParams:
72+
timeoutSeconds: 3600
73+
type: Rolling
74+
template:
75+
metadata:
76+
annotations:
77+
app.openshift.io/vcs-ref: "@ignore@"
78+
app.openshift.io/vcs-uri: "@ignore@"
79+
jkube.eclipse.org/git-branch: "@ignore@"
80+
jkube.eclipse.org/git-commit: "@ignore@"
81+
jkube.eclipse.org/git-url: "@ignore@"
82+
labels:
83+
app: via-resource-groovy-dsl-labels-all
84+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
85+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
86+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
87+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
88+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-all
89+
group: via-resource-groovy-dsl-labels-all
90+
provider: via-resource-groovy-dsl-labels-all
91+
version: via-resource-groovy-dsl-labels-all
92+
name: well-known-labels
93+
spec:
94+
containers:
95+
- env:
96+
- name: KUBERNETES_NAMESPACE
97+
valueFrom:
98+
fieldRef:
99+
fieldPath: metadata.namespace
100+
image: repository/well-known-labels:latest
101+
imagePullPolicy: IfNotPresent
102+
name: repository-well-known-labels
103+
ports:
104+
- containerPort: 8080
105+
name: http
106+
protocol: TCP
107+
securityContext:
108+
privileged: false
109+
triggers:
110+
- type: ConfigChange
111+
- imageChangeParams:
112+
automatic: true
113+
containerNames:
114+
- repository-well-known-labels
115+
from:
116+
kind: ImageStreamTag
117+
name: well-known-labels:latest
118+
type: ImageChange
119+
- apiVersion: route.openshift.io/v1
120+
kind: Route
121+
metadata:
122+
annotations:
123+
app.openshift.io/vcs-ref: "@ignore@"
124+
app.openshift.io/vcs-uri: "@ignore@"
125+
jkube.eclipse.org/git-branch: "@ignore@"
126+
jkube.eclipse.org/git-commit: "@ignore@"
127+
jkube.eclipse.org/git-url: "@ignore@"
128+
labels:
129+
app: via-resource-groovy-dsl-labels-all
130+
app.kubernetes.io/component: via-resource-groovy-dsl-labels-all
131+
app.kubernetes.io/managed-by: via-resource-groovy-dsl-labels-all
132+
app.kubernetes.io/name: via-resource-groovy-dsl-labels-all
133+
app.kubernetes.io/part-of: via-resource-groovy-dsl-labels-all
134+
app.kubernetes.io/version: via-resource-groovy-dsl-labels-all
135+
group: via-resource-groovy-dsl-labels-all
136+
provider: via-resource-groovy-dsl-labels-all
137+
version: via-resource-groovy-dsl-labels-all
138+
name: well-known-labels
139+
spec:
140+
port:
141+
targetPort: 8080
142+
to:
143+
kind: Service
144+
name: well-known-labels

gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/WellKnownLabelsIT.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ static Stream<Arguments> data() {
4343
"-Pjkube.enricher.jkube-well-known-labels.component=custom-component",
4444
"-Pjkube.enricher.jkube-well-known-labels.partOf=custom-part-of",
4545
"-Pjkube.enricher.jkube-well-known-labels.managedBy=custom-managed-by",
46-
})
46+
}),
47+
arguments("labelsViaResourceConfig", new String[] {"-PlabelsViaResourceConfig=true"})
4748
);
4849
}
4950

jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/MapUtil.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,24 @@ public static void mergeIfAbsent(Map<String, String> map, Map<String, String> to
4242
}
4343

4444
/**
45-
* Returns a new map with all the entries of map1 and any from map2 which don't override map1.
45+
* Returns a new map with all the entries of first map with rest map entries which don't override map1.
4646
*
47-
* Can handle either maps being null. Always returns a new mutable map
47+
* Can handle either maps being null. Always returns a new mutable map.
4848
*
49-
* @param map1 first hash map
50-
* @param map2 second hash map
49+
* <b>Note:</b> Be careful about the ordering of maps passed here. First map passed in the var args
50+
* would always be given precedence over other maps in case there are colliding entries with same key values.
51+
*
52+
* @param maps var arg for maps
5153
* @param <K> first type
5254
* @param <V> second type
5355
* @return merged hash map
5456
*/
55-
public static <K,V> Map<K,V> mergeMaps(Map<K, V> map1, Map<K, V> map2) {
57+
public static <K,V> Map<K,V> mergeMaps(Map<K, V> ...maps) {
5658
Map<K, V> answer = new HashMap<>();
57-
if (map2 != null) {
58-
answer.putAll(map2);
59-
}
60-
if (map1 != null) {
61-
answer.putAll(map1);
59+
for (int i = maps.length-1; i >= 0; i--) {
60+
if (maps[i] != null) {
61+
answer.putAll(maps[i]);
62+
}
6263
}
6364
return answer;
6465

0 commit comments

Comments
 (0)