Skip to content

Commit b7cb1e8

Browse files
committed
cmd/scaleway: run instance checker on Kubernetes regularly
Fixes golang/go#21238 Change-Id: Ie3b3f240acb8f7578143f2594f4aaac94baeb0c3 Reviewed-on: https://go-review.googlesource.com/c/build/+/170441 Reviewed-by: Dmitri Shuralyov <[email protected]>
1 parent 37c2838 commit b7cb1e8

File tree

8 files changed

+58
-62
lines changed

8 files changed

+58
-62
lines changed

cmd/scaleway/Dockerfile

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,32 @@
11
# Copyright 2017 The Go Authors. All rights reserved.
22
# Use of this source code is governed by a BSD-style
33
# license that can be found in the LICENSE file.
4-
FROM scratch
4+
5+
FROM golang:1.12-stretch AS build
56
LABEL maintainer "[email protected]"
67

7-
COPY ca-certificates.crt /etc/ssl/certs/
8-
COPY scaleway /
9-
ENTRYPOINT ["/scaleway"]
8+
# BEGIN deps (run `make update-deps` to update)
9+
10+
# Repo go4.org at ce4c26f (2019-02-17)
11+
ENV REV=ce4c26f7be8eb27dc77f996b08d286dd80bc4a01
12+
RUN go get -d go4.org/types &&\
13+
(cd /go/src/go4.org && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV)
14+
15+
# Optimization to speed up iterative development, not necessary for correctness:
16+
RUN go install go4.org/types
17+
# END deps.
18+
19+
COPY . /go/src/golang.org/x/build/
20+
21+
RUN go install -ldflags "-X 'main.Version=$version'" golang.org/x/build/cmd/scaleway
22+
23+
24+
FROM debian:stretch
25+
26+
RUN apt-get update && apt-get install -y --no-install-recommends \
27+
ca-certificates \
28+
netbase \
29+
curl \
30+
&& rm -rf /var/lib/apt/lists/*
31+
32+
COPY --from=build /go/bin/scaleway /scaleway

cmd/scaleway/Dockerfile.0

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

cmd/scaleway/Makefile

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,24 @@
33
# license that can be found in the LICENSE file.
44

55
VERSION=latest
6-
DOCKER_IMAGE_build0=build0/scaleway:latest
7-
DOCKER_CTR_build0=scaleway-build0
8-
9-
build0: *.go Dockerfile.0
10-
docker build --force-rm -f Dockerfile.0 --tag=$(DOCKER_IMAGE_build0) ../..
11-
12-
scaleway: build0
13-
docker create --name $(DOCKER_CTR_build0) $(DOCKER_IMAGE_build0)
14-
docker cp $(DOCKER_CTR_build0):/go/bin/$@ $@
15-
docker rm $(DOCKER_CTR_build0)
16-
17-
ca-certificates.crt:
18-
docker create --name $(DOCKER_CTR_build0) $(DOCKER_IMAGE_build0)
19-
docker cp $(DOCKER_CTR_build0):/etc/ssl/certs/$@ $@
20-
docker rm $(DOCKER_CTR_build0)
216

227
update-deps:
238
go install golang.org/x/build/cmd/gitlock
24-
gitlock --update=Dockerfile.0 golang.org/x/build/cmd/scaleway
9+
gitlock --update=Dockerfile golang.org/x/build/cmd/scaleway
2510

26-
docker-prod: Dockerfile scaleway ca-certificates.crt
27-
docker build --force-rm --tag=gcr.io/symbolic-datum-552/scaleway:$(VERSION) .
28-
docker-dev: Dockerfile scaleway ca-certificates.crt
29-
docker build --force-rm --tag=gcr.io/go-dashboard-dev/scaleway:latest .
11+
docker: Dockerfile *.go
12+
xb docker build -f Dockerfile --force-rm --tag=golang/scaleway:$(VERSION) ../..
3013

31-
push-prod: docker-prod
14+
push-prod: docker
15+
docker tag golang/scaleway:$(VERSION) gcr.io/symbolic-datum-552/scaleway:$(VERSION)
3216
docker push gcr.io/symbolic-datum-552/scaleway:$(VERSION)
33-
push-dev: docker-dev
34-
docker push gcr.io/go-dashboard-dev/scaleway:latest
3517

36-
.PHONY: clean
37-
clean:
38-
$(RM) scaleway
39-
$(RM) ca-certificates.crt
18+
stop-prod:
19+
xb --prod kubectl delete -f deployment-prod.yaml
20+
21+
start-prod:
22+
xb --prod kubectl create -f deployment-prod.yaml
23+
24+
restart-prod:
25+
xb --prod kubectl delete -f deployment-prod.yaml || true
26+
xb --prod kubectl create -f deployment-prod.yaml

cmd/scaleway/README

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

cmd/scaleway/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@
55
# golang.org/x/build/cmd/scaleway
66

77
The scaleway command creates ARM servers on Scaleway.com.
8+
9+
The Makefile, Dockerfiles, and kubernetes deployment file
10+
are for running the command in daemon mode for server repair.
11+
This will check on Scaleway and restart down or wedged instances.

cmd/scaleway/deployment-prod.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ spec:
1212
container.seccomp.security.alpha.kubernetes.io/scaleway: docker/default
1313
container.apparmor.security.beta.kubernetes.io/scaleway: runtime/default
1414
spec:
15+
restartPolicy: Always
1516
volumes:
1617
- name: secrets-volume
1718
secret:
@@ -25,7 +26,7 @@ spec:
2526
- name: scaleway
2627
image: gcr.io/symbolic-datum-552/scaleway:latest
2728
imagePullPolicy: Always
28-
command: ["/scaleway", "-daemon"]
29+
command: ["/scaleway", "-daemon", "-token-dir=/keys"]
2930
volumeMounts:
3031
- name: secrets-volume
3132
mountPath: /keys

cmd/scaleway/scaleway.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ import (
2626
)
2727

2828
var (
29-
token = flag.String("token", "", "API token. If empty, the file is read from $HOME/keys/go-scaleway.token. Googlers on the Go team can get the value from http://go/golang-scaleway-token")
29+
tokenDir = flag.String("token-dir", filepath.Join(os.Getenv("HOME"), "keys"), "directory to read gobuilder-staging.key, gobuilder-master.key and go-scaleway.token from.")
30+
token = flag.String("token", "", "API token. If empty, the file is read from $(token-dir)/go-scaleway.token. Googlers on the Go team can get the value from http://go/golang-scaleway-token")
3031
org = flag.String("org", "1f34701d-668b-441b-bf08-0b13544e99de", "Organization ID (default is [email protected]'s account)")
3132
image = flag.String("image", "e488d5e3-d278-47a7-8f7d-1154e1f61dc9", "Disk image ID; default is the snapshot we made last")
3233
num = flag.Int("n", 0, "Number of servers to create; if zero, defaults to a value as a function of --staging")
@@ -62,7 +63,7 @@ func main() {
6263
}
6364
}
6465
if *token == "" {
65-
file := filepath.Join(os.Getenv("HOME"), "keys/go-scaleway.token")
66+
file := filepath.Join(*tokenDir, "go-scaleway.token")
6667
slurp, err := ioutil.ReadFile(file)
6768
if err != nil {
6869
if os.IsNotExist(err) {
@@ -74,6 +75,9 @@ func main() {
7475
}
7576

7677
// Loop over checkServers() in daemon mode.
78+
if *daemonMode {
79+
log.Printf("scaleway instance checker daemon running.")
80+
}
7781
for {
7882
checkServers()
7983
if !*daemonMode {
@@ -84,6 +88,9 @@ func main() {
8488
}
8589

8690
func checkServers() {
91+
timer := time.AfterFunc(5*time.Minute, func() { panic("Timeout running checkServers.") })
92+
defer timer.Stop()
93+
8794
cl := &Client{Token: *token}
8895
serverList, err := cl.Servers()
8996
if err != nil {
@@ -307,7 +314,7 @@ func (ip *IP) String() string {
307314
// defaultBuilderTags returns the default value of the "tags" flag.
308315
// It returns a comma-separated list of builder tags (each of the form buildkey_$(BUILDER)_$(SECRETHEX)).
309316
func defaultBuilderTags(baseKeyFile string) string {
310-
keyFile := filepath.Join(os.Getenv("HOME"), "keys", baseKeyFile)
317+
keyFile := filepath.Join(*tokenDir, baseKeyFile)
311318
slurp, err := ioutil.ReadFile(keyFile)
312319
if err != nil {
313320
log.Fatal(err)

cmd/xb/xb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func runDocker() {
147147
case "golang/buildlet-stage0":
148148
log.Printf("building dependent layer %q", layer)
149149
buildStage0Container()
150-
case "debian:jessie", "debian:stretch", "debian:buster":
150+
case "debian:jessie", "debian:stretch", "debian:buster", "golang:1.12-stretch":
151151
// TODO: validate version? probably doesn't matter, as they're
152152
// pretty frozen and just get security/bug updates, and most of
153153
// our Dockerfiles start with apt-get update && upgrade steps

0 commit comments

Comments
 (0)