Skip to content

Commit 66dddc6

Browse files
authored
Split up dockerfile with templates (#34)
1 parent a4a12cf commit 66dddc6

13 files changed

+146
-75
lines changed

.evergreen.yml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ functions:
8686
- quay_user_name
8787
- quay_password
8888
- image
89-
- dockerfile
89+
- image_type
9090
working_dir: mongodb-kubernetes-operator
9191
binary: scripts/ci/build_and_push_image.sh
9292

@@ -98,7 +98,7 @@ tasks:
9898
- func: clone
9999
- func: build_and_push_image
100100
vars:
101-
dockerfile: docker/Dockerfile.operator
101+
image_type: operator
102102
image: quay.io/mongodb/community-operator-dev:${version_id}
103103

104104
- name: build_e2e_image
@@ -108,8 +108,18 @@ tasks:
108108
- func: clone
109109
- func: build_and_push_image
110110
vars:
111-
dockerfile: docker/Dockerfile.e2e
112111
image: quay.io/mongodb/community-operator-e2e:${version_id}
112+
image_type: e2e
113+
114+
- name: build_testrunner_image
115+
priority: 60
116+
exec_timeout_secs: 600
117+
commands:
118+
- func: clone
119+
- func: build_and_push_image
120+
vars:
121+
image: quay.io/mongodb/community-operator-testrunner:${version_id}
122+
image_type: testrunner
113123

114124
- name: unit_tests
115125
commands:
@@ -157,6 +167,8 @@ buildvariants:
157167
variant: init_test_run
158168
- name: build_e2e_image
159169
variant: init_test_run
170+
- name: build_testrunner_image
171+
variant: init_test_run
160172
tasks:
161173
- name: e2e_test_replica_set
162174
- name: e2e_test_replica_set_readiness_probe
@@ -169,3 +181,4 @@ buildvariants:
169181
tasks:
170182
- name: build_operator_image
171183
- name: build_e2e_image
184+
- name: build_testrunner_image

docker/Dockerfile.e2e

Lines changed: 0 additions & 19 deletions
This file was deleted.

docker/Dockerfile.unittest

Lines changed: 0 additions & 19 deletions
This file was deleted.

docker/dockerfile_generator.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import jinja2
2+
import argparse
3+
4+
5+
def operator_params():
6+
return {
7+
"builder": True,
8+
"builder_image": "golang",
9+
"base_image": "registry.access.redhat.com/ubi8/ubi-minimal:latest",
10+
}
11+
12+
13+
def test_runner_params():
14+
return {
15+
"builder": True,
16+
"builder_image": "golang", # TODO: make this image smaller. There were errors using alpine
17+
"base_image": "registry.access.redhat.com/ubi8/ubi-minimal:latest",
18+
}
19+
20+
21+
def e2e_params():
22+
return {
23+
"base_image": "golang", # TODO: make this image smaller, error: 'exec: "gcc": executable file not found in $PATH' with golang:alpine
24+
}
25+
26+
27+
def unit_test_params():
28+
return {
29+
"base_image": "golang",
30+
}
31+
32+
33+
def render(image_name):
34+
param_dict = {
35+
"unittest": unit_test_params(),
36+
"e2e": e2e_params(),
37+
"testrunner": test_runner_params(),
38+
"operator": operator_params(),
39+
}
40+
41+
if image_name not in param_dict:
42+
raise ValueError(
43+
"Image name: {} is invalid. Valid values are {}".format(
44+
image_name, param_dict.keys()
45+
)
46+
)
47+
48+
env = jinja2.Environment()
49+
env.loader = jinja2.FileSystemLoader(searchpath="docker/templates")
50+
return env.get_template("Dockerfile.{}".format(image_name)).render(
51+
param_dict[image_name]
52+
)
53+
54+
55+
def parse_args():
56+
parser = argparse.ArgumentParser()
57+
parser.add_argument("image", help="Type of image for the Dockerfile")
58+
return parser.parse_args()
59+
60+
61+
def main():
62+
args = parse_args()
63+
print(render(args.image))
64+
65+
66+
if __name__ == "__main__":
67+
main()

docker/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jinja2==2.11.2

docker/templates/Dockerfile.e2e

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% extends "Dockerfile.template" %}
2+
3+
{% block command -%}
4+
CMD ["/bin/operator-sdk", "test", "local", "./test/e2e", "--namespace", "default", "--verbose", "--kubeconfig", "/etc/config/kubeconfig" ]
5+
{% endblock -%}
Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,17 @@
1-
FROM golang AS builder
2-
3-
ENV OPERATOR_SDK_VERSION v0.15.2
4-
ENV GO111MODULE=on
5-
ENV GOFLAGS="-mod=vendor"
6-
ENV GOPATH ""
7-
8-
RUN curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${OPERATOR_SDK_VERSION}/operator-sdk-${OPERATOR_SDK_VERSION}-x86_64-linux-gnu \
9-
&& mv operator-sdk-${OPERATOR_SDK_VERSION}-x86_64-linux-gnu /bin/operator-sdk \
10-
&& chmod +x /bin/operator-sdk
11-
12-
COPY go.mod go.sum ./
13-
RUN go mod download
14-
15-
ADD . .
16-
17-
RUN go mod vendor && /bin/operator-sdk generate k8s
1+
{% extends "Dockerfile.template" %}
182

3+
{% block build_binary -%}
194
# TODO: This build takes longer than it needs to and can still be optimized
205
RUN go build -o build/_output/bin/mongodb-kubernetes-operator -mod=vendor github.com/mongodb/mongodb-kubernetes-operator/cmd/manager
216

227
ENV manifest_version=4.2
238
RUN mkdir -p /content/ \
249
&& chmod -R +r /content/ \
2510
&& curl --fail --retry 3 -o /content/version_manifest.json "https://opsmanager.mongodb.com/static/version_manifest/${manifest_version}.json"
11+
{% endblock -%}
2612

27-
FROM registry.access.redhat.com/ubi8/ubi-minimal:latest
13+
{% block build_second_stage -%}
14+
FROM {{base_image}}
2815

2916
ENV OPERATOR=/usr/local/bin/mongodb-kubernetes-operator \
3017
USER_UID=1001 \
@@ -37,6 +24,9 @@ COPY --from=builder /content/version_manifest.json /usr/local/version_manifest.j
3724

3825
RUN /usr/local/bin/user_setup
3926

40-
ENTRYPOINT ["/usr/local/bin/entrypoint"]
41-
4227
USER ${USER_UID}
28+
{% endblock -%}
29+
30+
{% block command -%}
31+
ENTRYPOINT ["/usr/local/bin/entrypoint"]
32+
{% endblock -%}
Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
FROM golang AS builder
1+
{% if builder %}
2+
FROM {{builder_image}} AS builder
3+
4+
{% else %}
5+
FROM {{base_image}}
6+
{% endif %}
7+
8+
{% block packages -%}
9+
{% endblock -%}
210

311
ENV OPERATOR_SDK_VERSION v0.15.2
412
ENV GO111MODULE=on
@@ -16,15 +24,13 @@ ADD . .
1624

1725
RUN go mod vendor && /bin/operator-sdk generate k8s
1826

19-
RUN go build cmd/testrunner/main.go
20-
21-
FROM registry.access.redhat.com/ubi8/ubi-minimal:latest
22-
23-
# copy the testrunner binary
24-
COPY --from=builder /go/main runner
27+
# build the binary
28+
{% block build_binary -%}
29+
{% endblock -%}
2530

26-
# add yaml files required by the test runner
27-
ADD deploy/ deploy/
28-
ADD test/ test/
31+
# build and second stage image if necessary
32+
{% block build_second_stage -%}
33+
{% endblock -%}
2934

30-
CMD ["./runner"]
35+
{% block command -%}
36+
{% endblock -%}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{% extends "Dockerfile.template" %}
2+
3+
{% block build_binary -%}
4+
RUN go build cmd/testrunner/main.go
5+
{% endblock -%}
6+
7+
{% block build_second_stage -%}
8+
FROM {{base_image}}
9+
10+
# copy the testrunner binary
11+
COPY --from=builder /go/main runner
12+
13+
# add yaml files required by the test runner
14+
ADD deploy/ deploy/
15+
ADD test/ test/
16+
{% endblock -%}
17+
18+
{% block command -%}
19+
CMD ["./runner"]
20+
{% endblock -%}

docker/templates/Dockerfile.unittest

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% extends "Dockerfile.template" %}
2+
3+
{% block command -%}
4+
CMD ["go", "test", "./pkg/..."]
5+
{% endblock -%}

0 commit comments

Comments
 (0)