Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit fbe46bc

Browse files
authored
Merge pull request #1567 from thedadams/gh-h430
Refactor info to support multiple regions
2 parents 6ffd09b + 5d4f1dc commit fbe46bc

File tree

27 files changed

+250
-493
lines changed

27 files changed

+250
-493
lines changed

integration/helper/secrets.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ func EncryptData(t *testing.T, client client.Client, keys []string, data string)
1818
return ""
1919
}
2020
for _, info := range fullInfo {
21-
for _, key := range info.Spec.PublicKeys {
22-
pubKeys = append(pubKeys, key.KeyID)
21+
for _, region := range info.Regions {
22+
for _, key := range region.PublicKeys {
23+
pubKeys = append(pubKeys, key.KeyID)
24+
}
2325
}
2426
}
2527
} else {
@@ -51,8 +53,10 @@ func GetEncryptionKeys(t *testing.T, clients []client.Client) []string {
5153
return nil
5254
}
5355
for _, info := range fullInfo {
54-
for _, key := range info.Spec.PublicKeys {
55-
pubKeys = append(pubKeys, key.KeyID)
56+
for _, region := range info.Regions {
57+
for _, key := range region.PublicKeys {
58+
pubKeys = append(pubKeys, key.KeyID)
59+
}
5660
}
5761
}
5862
}

integration/run/run_test.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func TestVolumeBadClassInImageBoundToGoodClass(t *testing.T) {
134134
volumeClass := adminapiv1.ClusterVolumeClass{
135135
ObjectMeta: metav1.ObjectMeta{Name: "acorn-test-custom"},
136136
StorageClassName: getStorageClassName(t, storageClasses),
137-
SupportedRegions: []string{"local"},
137+
SupportedRegions: []string{apiv1.LocalRegion},
138138
}
139139
if err = kclient.Create(ctx, &volumeClass); err != nil {
140140
t.Fatal(err)
@@ -193,7 +193,7 @@ func TestVolumeBoundBadClass(t *testing.T) {
193193
volumeClass := adminapiv1.ClusterVolumeClass{
194194
ObjectMeta: metav1.ObjectMeta{Name: "acorn-test-custom"},
195195
StorageClassName: getStorageClassName(t, storageClasses),
196-
SupportedRegions: []string{"local"},
196+
SupportedRegions: []string{apiv1.LocalRegion},
197197
}
198198

199199
if err := kclient.Create(ctx, &volumeClass); err != nil {
@@ -235,7 +235,7 @@ func TestVolumeClassInactive(t *testing.T) {
235235
volumeClass := adminapiv1.ClusterVolumeClass{
236236
ObjectMeta: metav1.ObjectMeta{Name: "acorn-test-custom"},
237237
Inactive: true,
238-
SupportedRegions: []string{"local"},
238+
SupportedRegions: []string{apiv1.LocalRegion},
239239
}
240240
if err := kclient.Create(ctx, &volumeClass); err != nil {
241241
t.Fatal(err)
@@ -272,7 +272,7 @@ func TestVolumeClassSizeTooSmall(t *testing.T) {
272272
Min: "10Gi",
273273
Max: "100Gi",
274274
},
275-
SupportedRegions: []string{"local"},
275+
SupportedRegions: []string{apiv1.LocalRegion},
276276
}
277277
if err := kclient.Create(ctx, &volumeClass); err != nil {
278278
t.Fatal(err)
@@ -316,7 +316,7 @@ func TestVolumeClassSizeTooLarge(t *testing.T) {
316316
Min: "10Gi",
317317
Max: "100Gi",
318318
},
319-
SupportedRegions: []string{"local"},
319+
SupportedRegions: []string{apiv1.LocalRegion},
320320
}
321321
if err := kclient.Create(ctx, &volumeClass); err != nil {
322322
t.Fatal(err)
@@ -364,7 +364,7 @@ func TestVolumeClassRemoved(t *testing.T) {
364364
volumeClass := adminapiv1.ClusterVolumeClass{
365365
ObjectMeta: metav1.ObjectMeta{Name: "acorn-test-custom"},
366366
StorageClassName: getStorageClassName(t, storageClasses),
367-
SupportedRegions: []string{"local"},
367+
SupportedRegions: []string{apiv1.LocalRegion},
368368
}
369369
if err = kclient.Create(ctx, &volumeClass); err != nil {
370370
t.Fatal(err)
@@ -436,7 +436,7 @@ func TestClusterVolumeClass(t *testing.T) {
436436
Min: v1.Quantity("1G"),
437437
Max: v1.Quantity("9G"),
438438
},
439-
SupportedRegions: []string{"local"},
439+
SupportedRegions: []string{apiv1.LocalRegion},
440440
}
441441
if err = kclient.Create(ctx, &volumeClass); err != nil {
442442
t.Fatal(err)
@@ -499,7 +499,7 @@ func TestClusterVolumeClassValuesInAcornfile(t *testing.T) {
499499
Min: v1.Quantity("1G"),
500500
Max: v1.Quantity("9G"),
501501
},
502-
SupportedRegions: []string{"local"},
502+
SupportedRegions: []string{apiv1.LocalRegion},
503503
}
504504
if err = kclient.Create(ctx, &volumeClass); err != nil {
505505
t.Fatal(err)
@@ -558,7 +558,7 @@ func TestProjectVolumeClass(t *testing.T) {
558558
Min: v1.Quantity("1G"),
559559
Max: v1.Quantity("3G"),
560560
},
561-
SupportedRegions: []string{"local"},
561+
SupportedRegions: []string{apiv1.LocalRegion},
562562
}
563563
if err = kclient.Create(ctx, &volumeClass); err != nil {
564564
t.Fatal(err)
@@ -624,7 +624,7 @@ func TestProjectVolumeClassDefaultSizeValidation(t *testing.T) {
624624
Max: v1.Quantity("9G"),
625625
},
626626
Default: true,
627-
SupportedRegions: []string{"local"},
627+
SupportedRegions: []string{apiv1.LocalRegion},
628628
}
629629
if err = kclient.Create(ctx, &volumeClass); err != nil {
630630
t.Fatal(err)
@@ -735,7 +735,7 @@ func TestProjectVolumeClassValuesInAcornfile(t *testing.T) {
735735
Min: v1.Quantity("2G"),
736736
Max: v1.Quantity("6G"),
737737
},
738-
SupportedRegions: []string{"local"},
738+
SupportedRegions: []string{apiv1.LocalRegion},
739739
}
740740
if err = kclient.Create(ctx, &volumeClass); err != nil {
741741
t.Fatal(err)
@@ -916,7 +916,7 @@ func TestUsingComputeClasses(t *testing.T) {
916916
Min: "512Mi",
917917
Max: "1Gi",
918918
},
919-
SupportedRegions: []string{"local"},
919+
SupportedRegions: []string{apiv1.LocalRegion},
920920
},
921921
expected: map[string]v1.Scheduling{"simple": {
922922
Requirements: corev1.ResourceRequirements{
@@ -951,7 +951,7 @@ func TestUsingComputeClasses(t *testing.T) {
951951
Memory: adminv1.ComputeClassMemory{
952952
Max: "1Gi",
953953
},
954-
SupportedRegions: []string{"local"},
954+
SupportedRegions: []string{apiv1.LocalRegion},
955955
},
956956
expected: map[string]v1.Scheduling{"simple": {
957957
Requirements: corev1.ResourceRequirements{
@@ -989,7 +989,7 @@ func TestUsingComputeClasses(t *testing.T) {
989989
"2Gi",
990990
},
991991
},
992-
SupportedRegions: []string{"local"},
992+
SupportedRegions: []string{apiv1.LocalRegion},
993993
},
994994
expected: map[string]v1.Scheduling{"simple": {
995995
Requirements: corev1.ResourceRequirements{
@@ -1027,7 +1027,7 @@ func TestUsingComputeClasses(t *testing.T) {
10271027
Max: "1Gi",
10281028
Min: "512Mi",
10291029
},
1030-
SupportedRegions: []string{"local"},
1030+
SupportedRegions: []string{apiv1.LocalRegion},
10311031
},
10321032
expected: map[string]v1.Scheduling{"simple": {
10331033
Requirements: corev1.ResourceRequirements{
@@ -1279,7 +1279,7 @@ func TestCrossProjectNetworkConnection(t *testing.T) {
12791279
}
12801280

12811281
// create two separate projects in which to run two Nginx apps
1282-
proj1, err := c.ProjectCreate(ctx, "proj1", "local", []string{"local"})
1282+
proj1, err := c.ProjectCreate(ctx, "proj1", apiv1.LocalRegion, []string{apiv1.LocalRegion})
12831283
if err != nil {
12841284
t.Fatal("error while creating project:", err)
12851285
}
@@ -1288,7 +1288,7 @@ func TestCrossProjectNetworkConnection(t *testing.T) {
12881288
t.Fatal("error creating client for proj1:", err)
12891289
}
12901290

1291-
proj2, err := c.ProjectCreate(ctx, "proj2", "local", []string{"local"})
1291+
proj2, err := c.ProjectCreate(ctx, "proj2", apiv1.LocalRegion, []string{apiv1.LocalRegion})
12921292
if err != nil {
12931293
t.Fatal("error while creating project:", err)
12941294
}
@@ -1455,7 +1455,7 @@ func TestProjectUpdate(t *testing.T) {
14551455
ctx := helper.GetCTX(t)
14561456
c, _ := helper.ClientAndNamespace(t)
14571457
projectName := uuid.New().String()[:8]
1458-
proj1, err := c.ProjectCreate(ctx, projectName, "local", []string{"local"})
1458+
proj1, err := c.ProjectCreate(ctx, projectName, apiv1.LocalRegion, []string{apiv1.LocalRegion})
14591459
if err != nil {
14601460
t.Fatal("error while creating project:", err)
14611461
}
@@ -1487,7 +1487,7 @@ func TestProjectUpdate(t *testing.T) {
14871487
}
14881488
// update default
14891489
for i := 0; i < 10; i++ {
1490-
updatedProj, err = proj1Client.ProjectUpdate(ctx, latestProject, "new-default", []string{"local"})
1490+
updatedProj, err = proj1Client.ProjectUpdate(ctx, latestProject, "new-default", []string{apiv1.LocalRegion})
14911491
if err == nil {
14921492
break
14931493
}
@@ -1501,56 +1501,56 @@ func TestProjectUpdate(t *testing.T) {
15011501
}
15021502

15031503
assert.Equal(t, updatedProj.Spec.DefaultRegion, "new-default")
1504-
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{"local", "new-default"})
1504+
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{apiv1.LocalRegion, "new-default"})
15051505

15061506
// swap default from new-default to local
15071507
for i := 0; i < 10; i++ {
15081508
updatedProj, err = proj1Client.ProjectGet(ctx, projectName)
15091509
if err != nil {
15101510
t.Fatal("error while getting project:", err)
15111511
}
1512-
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, "local", nil)
1512+
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, apiv1.LocalRegion, nil)
15131513
if err == nil {
15141514
break
15151515
}
15161516
if !apierrors.IsConflict(err) {
15171517
t.Fatal("error while updating project:", err)
15181518
}
15191519
}
1520-
assert.Equal(t, updatedProj.Spec.DefaultRegion, "local")
1521-
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{"local", "new-default"})
1520+
assert.Equal(t, updatedProj.Spec.DefaultRegion, apiv1.LocalRegion)
1521+
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{apiv1.LocalRegion, "new-default"})
15221522

15231523
// remove new-default region
15241524
for i := 0; i < 10; i++ {
15251525
updatedProj, err = proj1Client.ProjectGet(ctx, projectName)
15261526
if err != nil {
15271527
t.Fatal("error while getting project:", err)
15281528
}
1529-
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, "", []string{"local"})
1529+
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, "", []string{apiv1.LocalRegion})
15301530
if err == nil {
15311531
break
15321532
}
15331533
if !strings.Contains(err.Error(), "please apply your changes to the latest version and try again") {
15341534
t.Fatal("error while updating project:", err)
15351535
}
15361536
}
1537-
assert.Equal(t, updatedProj.Spec.DefaultRegion, "local")
1538-
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{"local"})
1537+
assert.Equal(t, updatedProj.Spec.DefaultRegion, apiv1.LocalRegion)
1538+
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{apiv1.LocalRegion})
15391539

15401540
// set supported regions
15411541
for i := 0; i < 10; i++ {
15421542
updatedProj, err = proj1Client.ProjectGet(ctx, projectName)
15431543
if err != nil {
15441544
t.Fatal("error while getting project:", err)
15451545
}
1546-
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, "", []string{"local", "local3", "local2"})
1546+
updatedProj, err = proj1Client.ProjectUpdate(ctx, updatedProj, "", []string{apiv1.LocalRegion, "local3", "local2"})
15471547
if err == nil {
15481548
break
15491549
}
15501550
if !apierrors.IsConflict(err) {
15511551
t.Fatal("error while updating project:", err)
15521552
}
15531553
}
1554-
assert.Equal(t, updatedProj.Spec.DefaultRegion, "local")
1555-
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{"local", "local3", "local2"})
1554+
assert.Equal(t, updatedProj.Spec.DefaultRegion, apiv1.LocalRegion)
1555+
assert.Equal(t, updatedProj.Spec.SupportedRegions, []string{apiv1.LocalRegion, "local3", "local2"})
15561556
}

integration/secrets/secret_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,14 @@ func TestEncryptionEndToEnd(t *testing.T) {
139139
t.Fatal(err)
140140
}
141141

142-
keyBytes, err := base64.RawURLEncoding.DecodeString(info[0].Spec.PublicKeys[0].KeyID)
142+
keyBytes, err := base64.RawURLEncoding.DecodeString(info[0].Regions[apiv1.LocalRegion].PublicKeys[0].KeyID)
143143
if err != nil {
144144
t.Fatal(err)
145145
}
146146

147147
assert.Len(t, keyBytes, 32)
148148

149-
encData, err := nacl.MultipleKeyEncrypt(plainTextData, []string{info[0].Spec.PublicKeys[0].KeyID})
149+
encData, err := nacl.MultipleKeyEncrypt(plainTextData, []string{info[0].Regions[apiv1.LocalRegion].PublicKeys[0].KeyID})
150150
if err != nil {
151151
t.Fatal(err)
152152
}

pkg/apis/api.acorn.io/v1/region.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import (
55
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
66
)
77

8-
const RegionConditionClusterReady = "ClusterReady"
8+
const (
9+
RegionConditionClusterReady = "ClusterReady"
10+
11+
LocalRegion = "local"
12+
)
913

1014
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
1115

pkg/apis/api.acorn.io/v1/types.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,8 @@ type Info struct {
341341
metav1.TypeMeta `json:",inline"`
342342
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
343343

344-
Spec InfoSpec `json:"spec,omitempty"`
344+
Regions map[string]InfoSpec `json:"regions,omitempty"`
345+
ExtraData map[string]string `json:"extraData,omitempty"`
345346
}
346347

347348
// +k8s:conversion-gen:explicit-from=net/url.Values
@@ -352,17 +353,16 @@ type BuilderPortOptions struct {
352353
}
353354

354355
type InfoSpec struct {
355-
Version string `json:"version"`
356-
Tag string `json:"tag"`
357-
GitCommit string `json:"gitCommit"`
358-
Dirty bool `json:"dirty"`
359-
ControllerImage string `json:"controllerImage"`
360-
APIServerImage string `json:"apiServerImage,omitempty"`
361-
PublicKeys []EncryptionKey `json:"publicKeys,omitempty"`
362-
Config Config `json:"config"`
363-
UserConfig Config `json:"userConfig"`
364-
LetsEncryptCertificate string `json:"letsEncryptCertificate,omitempty"`
365-
ExtraData map[string]string `json:"extraData,omitempty"`
356+
Version string `json:"version"`
357+
Tag string `json:"tag"`
358+
GitCommit string `json:"gitCommit"`
359+
Dirty bool `json:"dirty"`
360+
ControllerImage string `json:"controllerImage"`
361+
APIServerImage string `json:"apiServerImage,omitempty"`
362+
PublicKeys []EncryptionKey `json:"publicKeys,omitempty"`
363+
Config Config `json:"config"`
364+
UserConfig Config `json:"userConfig"`
365+
LetsEncryptCertificate string `json:"letsEncryptCertificate,omitempty"`
366366
}
367367

368368
type Config struct {

pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go

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

0 commit comments

Comments
 (0)