Skip to content

Commit d64ef86

Browse files
authored
Merge pull request #1 from spectrocloud-labs/tyler/dns-name-validation
Fix container resource annotation keys
2 parents a476b12 + fcaf2c7 commit d64ef86

File tree

222 files changed

+178585
-270
lines changed

Some content is hidden

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

222 files changed

+178585
-270
lines changed

Dockerfile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Build the manager binary
2-
FROM golang:1.19 as builder
2+
FROM --platform=linux/amd64 golang:1.19 as builder
33

44
# Make sure we use go modules
5-
WORKDIR vcluster
5+
WORKDIR /
66

77
# Copy the Go Modules manifests
88
COPY . .
@@ -13,8 +13,9 @@ RUN go mod vendor
1313
# Build cmd
1414
RUN CGO_ENABLED=0 GO111MODULE=on go build -mod vendor -o /plugin main.go
1515

16-
# we use alpine for easier debugging
17-
FROM alpine
16+
# final image
17+
FROM --platform=linux/amd64 gcr.io/distroless/static:nonroot
18+
USER 65532:65532
1819

1920
# Set root path as working directory
2021
WORKDIR /

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ test: test-unit gocovmerge gocover ## Run unit tests and generate a test report
7373
docker: docker-build docker-push ## Tags docker image and also pushes it to container registry
7474

7575
docker-build: ## Builds docker image
76-
docker build . -t ${IMG_NAME} -f ./Dockerfile
76+
docker build . --platform=linux/amd64 -t ${IMG_NAME} -f ./Dockerfile
7777

7878
docker-push: ## Pushes docker image to container registry
7979
docker push ${IMG_NAME}

go.mod

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.19
44

55
require (
66
github.com/loft-sh/vcluster-sdk v0.4.1
7+
github.com/onsi/gomega v1.27.6
78
k8s.io/api v0.26.1
89
sigs.k8s.io/controller-runtime v0.14.4
910
)
@@ -29,7 +30,7 @@ require (
2930
github.com/go-openapi/swag v0.22.3 // indirect
3031
github.com/gogo/protobuf v1.3.2 // indirect
3132
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
32-
github.com/golang/protobuf v1.5.2 // indirect
33+
github.com/golang/protobuf v1.5.3 // indirect
3334
github.com/google/btree v1.1.2 // indirect
3435
github.com/google/gnostic v0.6.9 // indirect
3536
github.com/google/go-cmp v0.5.9 // indirect
@@ -63,11 +64,11 @@ require (
6364
github.com/spf13/pflag v1.0.5 // indirect
6465
github.com/xlab/treeprint v1.1.0 // indirect
6566
go.starlark.net v0.0.0-20230128213706-3f75dec8e403 // indirect
66-
golang.org/x/net v0.6.0 // indirect
67+
golang.org/x/net v0.8.0 // indirect
6768
golang.org/x/oauth2 v0.5.0 // indirect
68-
golang.org/x/sys v0.5.0 // indirect
69-
golang.org/x/term v0.5.0 // indirect
70-
golang.org/x/text v0.7.0 // indirect
69+
golang.org/x/sys v0.6.0 // indirect
70+
golang.org/x/term v0.6.0 // indirect
71+
golang.org/x/text v0.8.0 // indirect
7172
golang.org/x/time v0.3.0 // indirect
7273
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
7374
google.golang.org/appengine v1.6.7 // indirect

go.sum

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2Kv
6868
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
6969
github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
7070
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
71+
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
7172
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
7273
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
7374
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -88,8 +89,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
8889
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
8990
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
9091
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
91-
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
9292
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
93+
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
94+
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
9395
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
9496
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
9597
github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0=
@@ -106,6 +108,7 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
106108
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
107109
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
108110
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
111+
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
109112
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
110113
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
111114
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -159,8 +162,9 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/
159162
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
160163
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
161164
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
162-
github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc=
163-
github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E=
165+
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
166+
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
167+
github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
164168
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
165169
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
166170
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -235,8 +239,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
235239
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
236240
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
237241
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
238-
golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q=
239-
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
242+
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
243+
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
240244
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
241245
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
242246
golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s=
@@ -260,19 +264,19 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
260264
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
261265
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
262266
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
263-
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
264-
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
267+
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
268+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
265269
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
266270
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
267-
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
268-
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
271+
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
272+
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
269273
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
270274
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
271275
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
272276
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
273277
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
274-
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
275-
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
278+
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
279+
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
276280
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
277281
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
278282
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -283,6 +287,7 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
283287
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
284288
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
285289
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
290+
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
286291
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
287292
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
288293
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

syncers/container-resource-sync.go renamed to syncers/container_resource_sync.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ func (s *containerResourceSyncer) updateContainerResources(pObj, vObj *corev1.Po
8282
b := &monotonicBool{}
8383
for i, c := range pObj.Spec.Containers {
8484
limits := vObj.Spec.Containers[i].Resources.Limits
85-
cpu := fmt.Sprintf("hostCluster.limits.%s.cpu", c.Name)
86-
memory := fmt.Sprintf("hostCluster.limits.%s.memory", c.Name)
87-
storage := fmt.Sprintf("hostCluster.limits.%s.storage", c.Name)
88-
ephemeralStorage := fmt.Sprintf("hostCluster.limits.%s.ephemeral-storage", c.Name)
85+
cpu := fmt.Sprintf("limits.cpu.%s", c.Name)
86+
memory := fmt.Sprintf("limits.memory.%s", c.Name)
87+
storage := fmt.Sprintf("limits.storage.%s", c.Name)
88+
ephemeralStorage := fmt.Sprintf("limits.ephemeral-storage.%s", c.Name)
8989

9090
if limits == nil || limits.Cpu() == nil || limits.Cpu().IsZero() {
9191
updateMap(updated.Annotations, cpu, c.Resources.Limits.Cpu().String(), b)
@@ -101,10 +101,10 @@ func (s *containerResourceSyncer) updateContainerResources(pObj, vObj *corev1.Po
101101
}
102102

103103
requests := vObj.Spec.Containers[i].Resources.Requests
104-
cpu = fmt.Sprintf("hostCluster.requests.%s.cpu", c.Name)
105-
memory = fmt.Sprintf("hostCluster.requests.%s.memory", c.Name)
106-
storage = fmt.Sprintf("hostCluster.requests.%s.storage", c.Name)
107-
ephemeralStorage = fmt.Sprintf("hostCluster.requests.%s.ephemeral-storage", c.Name)
104+
cpu = fmt.Sprintf("requests.cpu.%s", c.Name)
105+
memory = fmt.Sprintf("requests.memory.%s", c.Name)
106+
storage = fmt.Sprintf("requests.storage.%s", c.Name)
107+
ephemeralStorage = fmt.Sprintf("requests.ephemeral-storage.%s", c.Name)
108108

109109
if requests == nil || requests.Cpu() == nil || requests.Cpu().IsZero() {
110110
updateMap(updated.Annotations, cpu, c.Resources.Requests.Cpu().String(), b)
@@ -129,5 +129,12 @@ func (s *containerResourceSyncer) updateContainerResources(pObj, vObj *corev1.Po
129129
func updateMap(strMap map[string]string, key, value string, b *monotonicBool) {
130130
_, found := strMap[key]
131131
b.modified = !found || b.modified
132-
strMap[key] = value
132+
strMap[toValidDnsName(key)] = value
133+
}
134+
135+
func toValidDnsName(v string) string {
136+
if len(v) > 63 {
137+
v = v[:63]
138+
}
139+
return v
133140
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package syncers
2+
3+
import (
4+
"log"
5+
"testing"
6+
7+
"github.com/onsi/gomega"
8+
corev1 "k8s.io/api/core/v1"
9+
"k8s.io/apimachinery/pkg/api/resource"
10+
"k8s.io/apimachinery/pkg/util/validation"
11+
)
12+
13+
var s *containerResourceSyncer
14+
15+
func init() {
16+
s = &containerResourceSyncer{}
17+
}
18+
19+
func TestUpdateContainerResources(t *testing.T) {
20+
g := gomega.NewWithT(t)
21+
tests := []struct {
22+
pObj *corev1.Pod
23+
vObj *corev1.Pod
24+
}{
25+
{
26+
pObj: &corev1.Pod{
27+
Spec: corev1.PodSpec{
28+
Containers: []corev1.Container{
29+
{
30+
Name: "longlonglonglonglonglonglonglonglonglonglonglonglonglong",
31+
Resources: corev1.ResourceRequirements{
32+
Limits: corev1.ResourceList{
33+
corev1.ResourceCPU: resource.MustParse("1000m"),
34+
corev1.ResourceMemory: resource.MustParse("256Mi"),
35+
corev1.ResourceEphemeralStorage: resource.MustParse("1Gi"),
36+
},
37+
Requests: corev1.ResourceList{
38+
corev1.ResourceCPU: resource.MustParse("500m"),
39+
corev1.ResourceMemory: resource.MustParse("128Mi"),
40+
corev1.ResourceEphemeralStorage: resource.MustParse("512Mi"),
41+
},
42+
},
43+
},
44+
},
45+
},
46+
},
47+
vObj: &corev1.Pod{
48+
Spec: corev1.PodSpec{
49+
Containers: []corev1.Container{
50+
{},
51+
},
52+
},
53+
},
54+
},
55+
}
56+
for _, test := range tests {
57+
updated := s.updateContainerResources(test.pObj, test.vObj)
58+
for k, v := range updated.ObjectMeta.Annotations {
59+
errs := validation.IsQualifiedName(k)
60+
g.Expect(errs).To(gomega.BeNil())
61+
log.Printf("validated annotation: %s: %s", k, v)
62+
}
63+
}
64+
}

vendor/github.com/golang/protobuf/jsonpb/decode.go

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/onsi/gomega/.gitignore

Lines changed: 7 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)