Skip to content

Commit cc2c0da

Browse files
authored
Merge pull request #371 from jmtd/OPENJDK-2048-imagestream-scripts
[OPENJDK-2048] imagestream scripts and updated imagestreams
2 parents 685e15e + 0e01427 commit cc2c0da

15 files changed

+2708
-372
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Validate ImageStream templates
2+
3+
on:
4+
push:
5+
branches:
6+
- release
7+
pull_request:
8+
branches:
9+
- release
10+
11+
jobs:
12+
verify:
13+
runs-on: ubuntu-latest
14+
strategy:
15+
matrix:
16+
template:
17+
- community-image-streams.json
18+
- image-streams.json
19+
- image-streams-aarch64.json
20+
- image-streams-ppc64le.json
21+
- image-streams-s390x.json
22+
- runtime-image-streams.json
23+
steps:
24+
- uses: actions/checkout@v2
25+
- name: run jq
26+
run: jq < templates/${{ matrix.template }}

templates/community-image-streams.json

Lines changed: 250 additions & 23 deletions
Large diffs are not rendered by default.

templates/data.yaml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# ImageStream template generator parameters
2+
# this data describes the version ranges for each container image and the various
3+
# exceptional circumstances, i.e., when a particular image version didn't ship, or
4+
# an image's name doesn't follow the naming convention, or an architecture
5+
# started shipping from a later version, etc.
6+
7+
rhel7:
8+
# for the rhel7 images, the default range of versions is 1.0-1.12
9+
# (these keys are numeric as the script uses them as inputs for range())
10+
from: 0
11+
to: 15
12+
builder:
13+
8:
14+
name: "redhat-openjdk-18/openjdk18-openshift"
15+
from: 3 # we stopped including the metadata for 1.0-1.2
16+
not: [ 9, 13 ] # and never shipped 1.9 or 1.13
17+
# architecture special-cases
18+
ppc64le:
19+
from: 5
20+
s390x:
21+
from: 5
22+
11:
23+
name: "openjdk/openjdk-11-rhel7"
24+
not: [ 2, 3, 4, 5, 6, 7, 8, 9, 13 ]
25+
ubi8:
26+
from: 3
27+
to: 16
28+
not: [ 4, 5, 6, 7, 8, 9 ]
29+
builder: # "ubi8/openjdk-X"
30+
8: {}
31+
11: {}
32+
17:
33+
from: 11
34+
runtime:
35+
from: 9
36+
not: []
37+
8:
38+
name: "ubi8/openjdk-8-runtime"
39+
11:
40+
name: "ubi8/openjdk-11-runtime"
41+
17:
42+
name: "ubi8/openjdk-17-runtime"
43+
from: 11
44+
ubi9:
45+
from: 13
46+
builder:
47+
11: {}
48+
17: {}
49+
runtime:
50+
11:
51+
name: "ubi9/openjdk-11-runtime"
52+
17:
53+
name: "ubi9/openjdk-17-runtime"
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
#!/usr/bin/python3
2+
3+
# generate ImageStream metadata
4+
5+
# inputs:
6+
# data.yaml: data on versions and exceptions
7+
# templates/*: Jinja-format template snippets
8+
9+
from jinja2 import Environment, FileSystemLoader, select_autoescape
10+
import yaml
11+
12+
# fetch a key from a nested dict
13+
def fetch(obj, path, k):
14+
# traverse the dicts to find the one nested at path
15+
o = obj
16+
for i in range(0, len(path)):
17+
o = o[path[i]]
18+
19+
# if they key isn't present at this level, try the parent
20+
if not k in o.keys() and path:
21+
return fetch(obj, path[:-1], k)
22+
return o.get(k)
23+
24+
def renderTags(os,
25+
jdkVersion,
26+
data,
27+
variant='builder', # or runtime
28+
imageTags=False,
29+
supports=False,
30+
arch=False,
31+
sampleRepo=True,
32+
description=False,
33+
displayName=False,
34+
):
35+
36+
path = [os, variant, jdkVersion]
37+
if fetch(data, path, arch):
38+
path.append(arch)
39+
40+
name = fetch(data, path, 'name') or "{}/openjdk-{}".format(os, jdkVersion)
41+
from_= fetch(data, path, 'from')
42+
to_ = fetch(data, path, 'to')
43+
not_ = fetch(data, path, 'not') or []
44+
45+
return ",\n".join([ tag.render(
46+
version="1.{}".format(v),
47+
tag="1.{}".format(v),
48+
rhel=os,
49+
openjdk=jdkVersion,
50+
containerName=name,
51+
tags=imageTags,
52+
supports=supports,
53+
sampleRepo=sampleRepo,
54+
description=description,
55+
displayName=displayName,
56+
)
57+
for v in range(from_, to_+1)
58+
if v not in not_
59+
])
60+
61+
def renderImageStream(os,
62+
nameFn=lambda os,v: "{}-openjdk-{}".format(os,v),
63+
variant='builder',
64+
displayNameFn=lambda v: False,
65+
66+
# the following flags are passed through to renderTags
67+
imageTags=False,
68+
sampleRepo=True,
69+
descriptionFn=lambda v: False,
70+
):
71+
return ",\n".join([ imagestream.render(
72+
rhel=os,
73+
name=nameFn(os,v),
74+
openjdk=v,
75+
displayName=displayNameFn(v),
76+
tags=renderTags(
77+
os,
78+
v,
79+
data,
80+
variant=variant,
81+
imageTags=imageTags,
82+
sampleRepo=sampleRepo,
83+
displayName=displayNameFn(v),
84+
description=descriptionFn(v),
85+
))
86+
for v in [8,11,17]
87+
])
88+
89+
##############################################################################
90+
91+
env = Environment(
92+
loader = FileSystemLoader("templates"),
93+
autoescape=select_autoescape()
94+
)
95+
96+
template = env.get_template("template.jinja")
97+
imagestream = env.get_template("imagestream.jinja")
98+
tag = env.get_template("tag.jinja")
99+
100+
data = yaml.safe_load(open("data.yaml"))
101+
ubi8 = data['ubi8']
102+
rhel7 = data['rhel7']
103+
104+
with open("community-image-streams.json","w") as fh:
105+
fh.write(template.render(
106+
rhel="ubi8",
107+
items=renderImageStream("ubi8")+","+
108+
env.get_template("community-javaImageStream.jinja").render()
109+
))
110+
111+
with open("image-streams.json","w") as fh:
112+
fh.write(template.render(
113+
rhel="",
114+
description="ImageStream definition for Red Hat OpenJDK.",
115+
name="openjdk18-image-stream",
116+
items=",".join([
117+
imagestream.render(
118+
rhel="rhel7",
119+
name="redhat-openjdk18-openshift",
120+
openjdk="8",
121+
tags=renderTags("rhel7", 8, data,
122+
imageTags="builder,java,openjdk,hidden",
123+
supports="java:8",),
124+
),
125+
imagestream.render(
126+
rhel="rhel7",
127+
name="openjdk-11-rhel7",
128+
openjdk="11",
129+
tags=renderTags("rhel7", 11, data,
130+
imageTags="builder,java,openjdk,hidden",
131+
supports="java:11",),
132+
),
133+
renderImageStream("ubi8", imageTags="builder,java,openjdk,ubi8,hidden"),
134+
env.get_template("javaImageStream.jinja").render()
135+
])
136+
))
137+
138+
with open("image-streams-aarch64.json", "w") as fh:
139+
fh.write(template.render(
140+
rhel="ubi8",
141+
name="openjdk18-image-stream",
142+
items=",".join([
143+
renderImageStream("ubi8", imageTags="builder,java,openjdk,ubi8,hidden"),
144+
env.get_template("community-javaImageStream.jinja").render()
145+
])
146+
))
147+
148+
with open("image-streams-ppc64le.json", "w") as fh:
149+
fh.write(template.render(
150+
rhel="",
151+
description="ImageStream definition for Red Hat OpenJDK.",
152+
name="openjdk18-image-stream",
153+
items=",".join([
154+
imagestream.render(
155+
rhel="rhel7",
156+
name="redhat-openjdk18-openshift",
157+
openjdk="8",
158+
tags=renderTags("rhel7", 8, data,
159+
imageTags="builder,java,openjdk,hidden",
160+
supports="java:8", arch="ppc64le"),
161+
),
162+
imagestream.render(
163+
rhel="rhel7",
164+
name="openjdk-11-rhel7",
165+
openjdk="11",
166+
tags=renderTags("rhel7", 11, data,
167+
imageTags="builder,java,openjdk,hidden",
168+
supports="java:11",),
169+
),
170+
renderImageStream("ubi8", imageTags="builder,java,openjdk,ubi8,hidden"),
171+
env.get_template("javaImageStream.jinja").render()
172+
])
173+
))
174+
175+
with open("image-streams-s390x.json", "w") as fh:
176+
fh.write(template.render(
177+
rhel="",
178+
description="ImageStream definition for Red Hat OpenJDK.",
179+
name="openjdk18-image-stream",
180+
items=",".join([
181+
imagestream.render(
182+
rhel="rhel7",
183+
name="redhat-openjdk18-openshift",
184+
openjdk="8",
185+
tags=renderTags("rhel7", 8, data,
186+
imageTags="builder,java,openjdk,hidden",
187+
supports="java:8", arch="s390x"),
188+
),
189+
imagestream.render(
190+
rhel="rhel7",
191+
name="openjdk-11-rhel7",
192+
openjdk="11",
193+
tags=renderTags("rhel7", 11, data,
194+
imageTags="builder,java,openjdk,hidden",
195+
supports="java:11",),
196+
),
197+
renderImageStream("ubi8", imageTags="builder,java,openjdk,ubi8,hidden"),
198+
env.get_template("javaImageStream.jinja").render()
199+
])
200+
))
201+
202+
with open("runtime-image-streams.json", "w") as fh:
203+
fh.write(template.render(
204+
rhel="ubi8",
205+
name="ubi8-openjdk-runtime-image-stream",
206+
description="ImageStream definition for Red Hat UBI8 OpenJDK Runtimes.",
207+
items=",".join([
208+
renderImageStream(
209+
"ubi8",
210+
variant="runtime",
211+
nameFn=lambda o,v: "{}-openjdk-{}-runtime".format(o,v),
212+
displayNameFn=lambda v: "Red Hat OpenJDK {} Runtime (UBI8)".format(v),
213+
imageTags="java,openjdk,ubi8",
214+
sampleRepo=False,
215+
descriptionFn=lambda v: "Run Java applications using OpenJDK {} upon UBI8.".format(v),
216+
),
217+
env.get_template("java-runtimeImageStream.jinja").render()
218+
])
219+
))

0 commit comments

Comments
 (0)