Skip to content

Commit 4a73abf

Browse files
authored
Merge pull request #1673 from crazy-max/fix-k8s-deploy-name
k8s: generate node name if not provided
2 parents 6f722da + 527d575 commit 4a73abf

File tree

9 files changed

+626
-4
lines changed

9 files changed

+626
-4
lines changed

commands/create.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/docker/buildx/builder"
1414
"github.com/docker/buildx/driver"
15+
k8sutil "github.com/docker/buildx/driver/kubernetes/util"
1516
remoteutil "github.com/docker/buildx/driver/remote/util"
1617
"github.com/docker/buildx/store"
1718
"github.com/docker/buildx/store/storeutil"
@@ -175,12 +176,21 @@ func runCreate(dockerCli command.Cli, in createOptions, args []string) error {
175176
if len(args) > 0 {
176177
logrus.Warnf("kubernetes driver does not support endpoint args %q", args[0])
177178
}
179+
// generate node name if not provided to avoid duplicated endpoint
180+
// error: https://github.com/docker/setup-buildx-action/issues/215
181+
nodeName := in.nodeName
182+
if nodeName == "" {
183+
nodeName, err = k8sutil.GenerateNodeName(name, txn)
184+
if err != nil {
185+
return err
186+
}
187+
}
178188
// naming endpoint to make --append works
179189
ep = (&url.URL{
180190
Scheme: driverName,
181-
Path: "/" + in.name,
191+
Path: "/" + name,
182192
RawQuery: (&url.Values{
183-
"deployment": {in.nodeName},
193+
"deployment": {nodeName},
184194
"kubeconfig": {os.Getenv("KUBECONFIG")},
185195
}).Encode(),
186196
}).String()

driver/kubernetes/util/generate.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package util
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/docker/buildx/store"
7+
"github.com/google/uuid"
8+
"github.com/pkg/errors"
9+
"k8s.io/apiserver/pkg/storage/names"
10+
)
11+
12+
func GenerateNodeName(builderName string, txn *store.Txn) (string, error) {
13+
randomName := func() (string, error) {
14+
u, err := uuid.NewRandom()
15+
if err != nil {
16+
return "", err
17+
}
18+
return names.SimpleNameGenerator.GenerateName(fmt.Sprintf("buildkit-%s-", u)), nil
19+
}
20+
21+
ng, err := txn.NodeGroupByName(builderName)
22+
if err != nil {
23+
return randomName()
24+
}
25+
26+
var name string
27+
for i := 0; i < 6; i++ {
28+
name, err = randomName()
29+
if err != nil {
30+
return "", err
31+
}
32+
exists := func(name string) bool {
33+
for _, n := range ng.Nodes {
34+
if n.Name == name {
35+
return true
36+
}
37+
}
38+
return false
39+
}(name)
40+
if exists {
41+
continue
42+
}
43+
return name, nil
44+
}
45+
46+
return "", errors.Errorf("failed to generate random node name")
47+
}

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ require (
1616
github.com/gogo/protobuf v1.3.2
1717
github.com/golang/protobuf v1.5.2
1818
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
19+
github.com/google/uuid v1.3.0
1920
github.com/hashicorp/go-cty-funcs v0.0.0-20200930094925-2721b1e36840
2021
github.com/hashicorp/hcl/v2 v2.8.2
2122
github.com/moby/buildkit v0.11.0-rc3.0.20230216100651-46e4e7e51b01
@@ -40,6 +41,7 @@ require (
4041
gopkg.in/yaml.v3 v3.0.1
4142
k8s.io/api v0.25.4
4243
k8s.io/apimachinery v0.25.4
44+
k8s.io/apiserver v0.25.4
4345
k8s.io/client-go v0.25.4
4446
)
4547

@@ -99,7 +101,6 @@ require (
99101
github.com/google/certificate-transparency-go v1.1.4 // indirect
100102
github.com/google/go-cmp v0.5.9 // indirect
101103
github.com/google/gofuzz v1.2.0 // indirect
102-
github.com/google/uuid v1.3.0 // indirect
103104
github.com/googleapis/gnostic v0.5.5 // indirect
104105
github.com/gorilla/mux v1.8.0 // indirect
105106
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
@@ -177,5 +178,6 @@ require (
177178
replace (
178179
k8s.io/api => k8s.io/api v0.22.4
179180
k8s.io/apimachinery => k8s.io/apimachinery v0.22.4
181+
k8s.io/apiserver => k8s.io/apiserver v0.22.4
180182
k8s.io/client-go => k8s.io/client-go v0.22.4
181183
)

go.sum

Lines changed: 171 additions & 0 deletions
Large diffs are not rendered by default.

hack/test-driver

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,14 @@ if [ "$DRIVER" != "docker" ]; then
5454
if [ "$firstNode" = "0" ]; then
5555
createFlags="$createFlags --append"
5656
fi
57+
nodeName=""
58+
if [ "$DRIVER" != "kubernetes" ]; then
59+
nodeName="${builderName}-${platform/\//-}"
60+
fi
5761
buildxCmd create ${createFlags} \
5862
--bootstrap \
5963
--name="${builderName}" \
60-
--node="${builderName}-${platform/\//-}" \
64+
--node="${nodeName}" \
6165
--platform="${platform}" \
6266
--driver="${DRIVER}" \
6367
${driverOpt:+"--driver-opt=${driverOpt}"} \

vendor/k8s.io/apimachinery/pkg/util/rand/rand.go

Lines changed: 127 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)