Skip to content

Commit 2820416

Browse files
committed
Ensure packages are installed on images
1 parent e53439b commit 2820416

File tree

2 files changed

+278
-0
lines changed

2 files changed

+278
-0
lines changed

tests/data/modules/data.json

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
{
2+
"images": [
3+
{
4+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-ingress:edge",
5+
"packages": [
6+
"nginx",
7+
"nginx-module-njs",
8+
"nginx-module-otel",
9+
"nginx-agent"
10+
],
11+
"cmd": "dpkg -l",
12+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
13+
"platform": "linux/arm64"
14+
},
15+
{
16+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-plus-ingress:edge",
17+
"packages": [
18+
"nginx-plus",
19+
"nginx-plus-module-njs",
20+
"nginx-plus-module-otel",
21+
"nginx-plus-module-fips-check",
22+
"nginx-agent"
23+
],
24+
"cmd": "dpkg -l",
25+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
26+
"platform": "linux/arm64"
27+
},
28+
{
29+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap/nginx-plus-ingress:edge",
30+
"packages": [
31+
"nginx-plus",
32+
"nginx-plus-module-njs",
33+
"nginx-plus-module-otel",
34+
"nginx-plus-module-fips-check",
35+
"nginx-plus-module-appprotect",
36+
"nginx-agent"
37+
],
38+
"cmd": "dpkg -l",
39+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
40+
"platform": "linux/amd64"
41+
},
42+
{
43+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap-v5/nginx-plus-ingress:edge",
44+
"packages": [
45+
"nginx-plus",
46+
"nginx-plus-module-njs",
47+
"nginx-plus-module-otel",
48+
"nginx-plus-module-fips-check",
49+
"nginx-plus-module-appprotect",
50+
"nginx-agent"
51+
],
52+
"cmd": "dpkg -l",
53+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
54+
"platform": "linux/amd64"
55+
},
56+
{
57+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-dos/nginx-plus-ingress:edge",
58+
"packages": [
59+
"nginx-plus",
60+
"nginx-plus-module-njs",
61+
"nginx-plus-module-otel",
62+
"nginx-plus-module-fips-check",
63+
"nginx-plus-module-appprotectdos"
64+
],
65+
"cmd": "dpkg -l",
66+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
67+
"platform": "linux/amd64"
68+
},
69+
{
70+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-dos-nap/nginx-plus-ingress:edge",
71+
"packages": [
72+
"nginx-plus",
73+
"nginx-plus-module-njs",
74+
"nginx-plus-module-otel",
75+
"nginx-plus-module-fips-check",
76+
"nginx-plus-module-appprotect",
77+
"nginx-plus-module-appprotectdos",
78+
"nginx-agent"
79+
],
80+
"cmd": "dpkg -l",
81+
"regex": "ii\\s+(.+?)\\s+(.+?)\\s+(\\w+?)\\s",
82+
"platform": "linux/amd64"
83+
},
84+
{
85+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-ingress:edge-alpine",
86+
"packages": [
87+
"nginx",
88+
"nginx-module-njs",
89+
"nginx-module-otel",
90+
"nginx-agent"
91+
],
92+
"cmd": "apk list",
93+
"regex": "^(.+?)-(\\d+.+?)\\s+(\\w+).*\\[installed\\]",
94+
"platform": "linux/arm64"
95+
},
96+
{
97+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-plus-ingress:edge-alpine",
98+
"packages": [
99+
"nginx-plus",
100+
"nginx-plus-module-njs",
101+
"nginx-plus-module-otel",
102+
"nginx-plus-module-fips-check",
103+
"nginx-agent"
104+
],
105+
"cmd": "apk list",
106+
"regex": "^(.+?)-(\\d+.+?)\\s+(\\w+).*\\[installed\\]",
107+
"platform": "linux/arm64"
108+
},
109+
{
110+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-plus-ingress:edge-alpine-fips",
111+
"packages": [
112+
"nginx-plus",
113+
"nginx-plus-module-njs",
114+
"nginx-plus-module-otel",
115+
"nginx-plus-module-fips-check",
116+
"nginx-agent"
117+
],
118+
"cmd": "apk list",
119+
"regex": "^(.+?)-(\\d+.+?)\\s+(\\w+).*\\[installed\\]",
120+
"platform": "linux/arm64"
121+
},
122+
{
123+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap/nginx-plus-ingress:edge-alpine-fips",
124+
"packages": [
125+
"nginx-plus",
126+
"nginx-plus-module-njs",
127+
"nginx-plus-module-otel",
128+
"nginx-plus-module-fips-check",
129+
"nginx-agent",
130+
"nginx-plus-module-appprotect"
131+
],
132+
"cmd": "apk list",
133+
"regex": "^(.+?)-(\\d+.+?)\\s+(\\w+).*\\[installed\\]",
134+
"platform": "linux/amd64"
135+
},
136+
{
137+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap-v5/nginx-plus-ingress:edge-alpine-fips",
138+
"packages": [
139+
"nginx-plus",
140+
"nginx-plus-module-njs",
141+
"nginx-plus-module-otel",
142+
"nginx-plus-module-fips-check",
143+
"nginx-agent",
144+
"nginx-plus-module-appprotect"
145+
],
146+
"cmd": "apk list",
147+
"regex": "^(.+?)-(\\d+.+?)\\s+(\\w+).*\\[installed\\]",
148+
"platform": "linux/amd64"
149+
},
150+
{
151+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-ingress:edge-ubi",
152+
"packages": [
153+
"nginx",
154+
"nginx-module-njs",
155+
"nginx-module-otel",
156+
"nginx-agent"
157+
],
158+
"cmd": "rpm -q",
159+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
160+
"platform": "linux/arm64"
161+
},
162+
{
163+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic/nginx-plus-ingress:edge-ubi",
164+
"packages": [
165+
"nginx-plus",
166+
"nginx-plus-module-njs",
167+
"nginx-plus-module-otel",
168+
"nginx-plus-module-fips-check",
169+
"nginx-agent"
170+
],
171+
"cmd": "rpm -q",
172+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
173+
"platform": "linux/arm64"
174+
},
175+
{
176+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap/nginx-plus-ingress:edge-ubi",
177+
"packages": [
178+
"nginx-plus",
179+
"nginx-plus-module-njs",
180+
"nginx-plus-module-otel",
181+
"nginx-plus-module-fips-check",
182+
"nginx-agent",
183+
"nginx-plus-module-appprotect"
184+
],
185+
"cmd": "rpm -q",
186+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
187+
"platform": "linux/amd64"
188+
},
189+
{
190+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap-v5/nginx-plus-ingress:edge-ubi",
191+
"packages": [
192+
"nginx-plus",
193+
"nginx-plus-module-njs",
194+
"nginx-plus-module-otel",
195+
"nginx-plus-module-fips-check",
196+
"nginx-agent",
197+
"nginx-plus-module-appprotect"
198+
],
199+
"cmd": "rpm -q",
200+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
201+
"platform": "linux/amd64"
202+
},
203+
{
204+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap/nginx-plus-ingress:edge-ubi8",
205+
"packages": [
206+
"nginx-plus",
207+
"nginx-plus-module-njs",
208+
"nginx-plus-module-otel",
209+
"nginx-plus-module-fips-check",
210+
"nginx-agent",
211+
"nginx-plus-module-appprotect"
212+
],
213+
"cmd": "rpm -q",
214+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
215+
"platform": "linux/amd64"
216+
},
217+
{
218+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-nap-v5/nginx-plus-ingress:edge-ubi8",
219+
"packages": [
220+
"nginx-plus",
221+
"nginx-plus-module-njs",
222+
"nginx-plus-module-otel",
223+
"nginx-plus-module-fips-check",
224+
"nginx-agent",
225+
"nginx-plus-module-appprotect"
226+
],
227+
"cmd": "rpm -q",
228+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
229+
"platform": "linux/amd64"
230+
},
231+
{
232+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-dos/nginx-plus-ingress:edge-ubi",
233+
"packages": [
234+
"nginx-plus",
235+
"nginx-plus-module-njs",
236+
"nginx-plus-module-otel",
237+
"nginx-plus-module-fips-check",
238+
"nginx-plus-module-appprotectdos"
239+
],
240+
"cmd": "rpm -q",
241+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
242+
"platform": "linux/amd64"
243+
},
244+
{
245+
"image": "gcr.io/f5-gcs-7899-ptg-ingrss-ctlr/dev/nginx-ic-dos-nap/nginx-plus-ingress:edge-ubi",
246+
"packages": [
247+
"nginx-plus",
248+
"nginx-plus-module-njs",
249+
"nginx-plus-module-otel",
250+
"nginx-plus-module-fips-check",
251+
"nginx-plus-module-appprotect",
252+
"nginx-plus-module-appprotectdos",
253+
"nginx-agent"
254+
],
255+
"cmd": "rpm -q",
256+
"regex": "(.+?)-(\\d+.+)(?:\\.ngx)?\\.(\\w+)",
257+
"platform": "linux/amd64"
258+
}
259+
]
260+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import json
2+
import re
3+
4+
import docker
5+
6+
client = docker.from_env()
7+
images = json.loads(open("tests/data/modules/data.json").read())
8+
9+
for image in images["images"]:
10+
regexInstalled = image["regex"]
11+
for package in image["packages"]:
12+
command = f"{image['cmd']} {package}"
13+
output = client.containers.run(
14+
image["image"], command, entrypoint="", platform=image["platform"], auto_remove=True, detach=False
15+
)
16+
result = re.search(regexInstalled, output.decode("utf-8").strip())
17+
assert result, f"{package} not found in {image['image']}, output: {output.decode('utf-8').strip()}"
18+
print(image["image"], result.group(1, 2, 3))

0 commit comments

Comments
 (0)