Skip to content

Commit 75ec913

Browse files
committed
chore: move bootstrap provider to our minimized controller template
This PR will move the bootstrap provider to use our controller code, getting rid of some of the headache of using kubebuilder directly. Signed-off-by: Spencer Smith <[email protected]>
1 parent bb92306 commit 75ec913

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+810
-481
lines changed

.drone.yml

Lines changed: 102 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,68 @@
1+
---
2+
kind: secret
3+
name: kubeconfig
4+
5+
get:
6+
path: buildx
7+
name: kubeconfig
8+
19
---
210
kind: pipeline
311
name: default
412

5-
workspace:
6-
base: /go
7-
path: src/github.com/talos-systems/cluster-api-bootstrap-provider-talos
8-
913
services:
1014
- name: docker
1115
image: docker:19.03-dind
1216
entrypoint:
13-
- dockerd
17+
- dockerd
1418
command:
15-
- --dns=8.8.8.8
16-
- --dns=8.8.4.4
17-
- --mtu=1440
18-
- --log-level=error
19+
- --dns=8.8.8.8
20+
- --dns=8.8.4.4
21+
- --log-level=error
1922
privileged: true
2023
volumes:
21-
- name: dockersock
22-
path: /var/run
23-
- name: manifests
24-
path: /tmp/manifests
24+
- name: docker-socket
25+
path: /var/run
2526

2627
steps:
27-
- name: fetch
28-
image: docker:git
29-
commands:
30-
- git fetch --tags
31-
when:
32-
event: tag
33-
34-
- name: test
28+
- name: setup-ci
3529
image: autonomy/build-container:latest
3630
commands:
37-
- sleep 5
38-
- make test
31+
- git fetch --tags
32+
- apk add coreutils
33+
- echo -e "$BUILDX_KUBECONFIG" > /root/.kube/config
34+
- docker buildx create --driver kubernetes --driver-opt replicas=2 --driver-opt namespace=ci --driver-opt image=moby/buildkit:v0.6.2 --name ci --buildkitd-flags="--allow-insecure-entitlement security.insecure" --use
35+
- docker buildx inspect --bootstrap
36+
environment:
37+
BUILDX_KUBECONFIG:
38+
from_secret: kubeconfig
39+
privileged: true
3940
volumes:
40-
- name: dockersock
41+
- name: docker-socket
4142
path: /var/run
42-
depends_on:
43-
- fetch
43+
- name: docker
44+
path: /root/.docker/buildx
45+
- name: kube
46+
path: /root/.kube
4447

45-
- name: build
48+
- name: build-pull-request
4649
image: autonomy/build-container:latest
4750
pull: always
4851
commands:
49-
- make docker-build
52+
- make
53+
when:
54+
event:
55+
include:
56+
- pull_request
5057
volumes:
51-
- name: dockersock
58+
- name: docker-socket
5259
path: /var/run
53-
depends_on:
54-
- test
60+
- name: docker
61+
path: /root/.docker/buildx
62+
- name: kube
63+
path: /root/.kube
5564

56-
- name: push
65+
- name: build-and-publish
5766
image: autonomy/build-container:latest
5867
pull: always
5968
environment:
@@ -62,39 +71,81 @@ steps:
6271
DOCKER_PASSWORD:
6372
from_secret: docker_password
6473
commands:
65-
- make login
66-
- make docker-push
67-
volumes:
68-
- name: dockersock
69-
path: /var/run
74+
- docker login --username "$${DOCKER_USERNAME}" --password "$${DOCKER_PASSWORD}"
75+
- make PUSH=true
7076
when:
7177
event:
7278
exclude:
7379
- pull_request
74-
depends_on:
75-
- build
80+
volumes:
81+
- name: docker-socket
82+
path: /var/run
83+
- name: docker
84+
path: /root/.docker/buildx
85+
- name: kube
86+
path: /root/.kube
87+
88+
- name: build-release
89+
image: autonomy/build-container:latest
90+
pull: always
91+
commands:
92+
- make release
93+
when:
94+
event:
95+
- tag
96+
volumes:
97+
- name: docker-socket
98+
path: /var/run
99+
- name: docker
100+
path: /root/.docker/buildx
101+
- name: kube
102+
path: /root/.kube
76103

77104
- name: release
78105
image: plugins/github-release
79106
settings:
80107
api_key:
81108
from_secret: github_token
82-
draft: true
83-
files:
84-
- /tmp/manifests/*
85109
checksum:
86110
- sha256
87111
- sha512
88-
volumes:
89-
- name: manifests
90-
path: /tmp/manifests
91-
depends_on:
92-
- push
112+
draft: true
113+
files:
114+
- _out/*
93115
when:
94-
event: tag
116+
event:
117+
- tag
95118

96119
volumes:
97-
- name: dockersock
120+
- name: docker-socket
121+
temp: {}
122+
- name: docker
123+
temp: {}
124+
- name: kube
98125
temp: {}
99-
- name: manifests
100-
temp: {}
126+
---
127+
kind: pipeline
128+
name: notify
129+
130+
clone:
131+
disable: true
132+
133+
steps:
134+
- name: slack
135+
image: plugins/slack
136+
settings:
137+
webhook:
138+
from_secret: slack_webhook
139+
channel: proj-talos-maintainers
140+
when:
141+
status:
142+
- success
143+
- failure
144+
145+
trigger:
146+
status:
147+
- success
148+
- failure
149+
150+
depends_on:
151+
- default

Dockerfile

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,55 @@
1-
ARG KUBEBUILDER_VERSION=2.0.0
1+
# syntax = docker/dockerfile-upstream:1.1.4-experimental
22

3-
FROM golang:1.13-alpine as base
4-
RUN apk add --no-cache make curl git
5-
6-
FROM base AS modules
3+
FROM golang:1.13 AS build
74
ENV GO111MODULE on
85
ENV GOPROXY https://proxy.golang.org
96
ENV CGO_ENABLED 0
10-
WORKDIR /go/src/github.com/talos-systems/cluster-api-bootstrap-provider-talos
7+
WORKDIR /tmp
8+
RUN go get sigs.k8s.io/controller-tools/cmd/[email protected]
9+
WORKDIR /src
1110
COPY ./go.mod ./
1211
COPY ./go.sum ./
1312
RUN go mod download
1413
RUN go mod verify
15-
COPY ./api ./api
16-
COPY ./config ./config
17-
COPY ./controllers ./controllers
18-
COPY ./hack ./hack
19-
COPY main.go main.go
20-
COPY Makefile Makefile
21-
COPY PROJECT PROJECT
22-
RUN go mod vendor
14+
COPY ./ ./
2315
RUN go list -mod=readonly all >/dev/null
2416
RUN ! go mod tidy -v 2>&1 | grep .
2517

26-
FROM modules AS test
27-
RUN mkdir -p /usr/local/kubebuilder/bin
28-
ARG KUBEBUILDER_VERSION
29-
RUN curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/v${KUBEBUILDER_VERSION}/kubebuilder_${KUBEBUILDER_VERSION}_linux_amd64.tar.gz | tar -xvz --strip-components=2 -C /usr/local/kubebuilder/bin
30-
RUN make generate fmt vet manifests && go test ./... -coverprofile cover.out
18+
FROM build AS manifests-build
19+
ARG NAME
20+
RUN controller-gen rbac:roleName=manager-role crd paths="./..." output:rbac:artifacts:config=config/rbac output:crd:artifacts:config=config/crd/bases
21+
FROM scratch AS manifests
22+
COPY --from=manifests-build /src/config/crd /config/crd
23+
COPY --from=manifests-build /src/config/rbac /config/rbac
24+
25+
FROM build AS generate-build
26+
RUN controller-gen object:headerFile=./hack/boilerplate.go.txt paths="./..."
27+
FROM scratch AS generate
28+
COPY --from=generate-build /src/api /api
29+
30+
FROM k8s.gcr.io/hyperkube:v1.17.0 AS release-build
31+
RUN apt update -y \
32+
&& apt install -y curl \
33+
&& curl -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.4.0/kustomize_v3.4.0_linux_amd64.tar.gz \
34+
&& tar -xf kustomize_v3.4.0_linux_amd64.tar.gz -C /usr/local/bin \
35+
&& rm kustomize_v3.4.0_linux_amd64.tar.gz
36+
COPY ./config ./config
37+
ARG REGISTRY_AND_USERNAME
38+
ARG NAME
39+
ARG TAG
40+
RUN cd config/manager \
41+
&& kustomize edit set image controller=${REGISTRY_AND_USERNAME}/${NAME}:${TAG} \
42+
&& cd - \
43+
&& kubectl kustomize config >/release.yaml
44+
FROM scratch AS release
45+
COPY --from=release-build /release.yaml /release.yaml
3146

32-
# Build the manager binary
33-
FROM test AS build
34-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go
47+
FROM build AS binary
48+
RUN --mount=type=cache,target=/root/.cache/go-build GOOS=linux go build -ldflags "-s -w" -o /manager
49+
RUN chmod +x /manager
3550

36-
# Copy the controller-manager into a thin image
37-
FROM gcr.io/distroless/static:latest
38-
WORKDIR /
39-
COPY --from=build /go/src/github.com/talos-systems/cluster-api-bootstrap-provider-talos/manager .
40-
ENTRYPOINT ["/manager"]
51+
FROM scratch AS container
52+
COPY --from=docker.io/autonomy/ca-certificates:v0.1.0 / /
53+
COPY --from=docker.io/autonomy/fhs:v0.1.0 / /
54+
COPY --from=binary /manager /manager
55+
ENTRYPOINT [ "/manager" ]

0 commit comments

Comments
 (0)