Skip to content

Commit

Permalink
feat: Support providing serviceAccountName with workload create/updat…
Browse files Browse the repository at this point in the history
…e/apply commands (#76)

Support providing `serviceAccountName` with workload create/update/apply commands

Signed-off by: Wendy Arango warango@vmware.com
  • Loading branch information
warango4 committed Apr 20, 2022
1 parent 4375793 commit fc7b718
Show file tree
Hide file tree
Showing 4 changed files with 267 additions and 0 deletions.
2 changes: 2 additions & 0 deletions pkg/apis/cartographer/v1alpha1/workload_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ func (w *GitSource) Validate() validation.FieldErrors {
}

func (w *WorkloadSpec) Merge(updates *WorkloadSpec) {
w.ServiceAccountName = updates.ServiceAccountName

for _, p := range updates.Params {
w.MergeParams(p.Name, p.Value)
}
Expand Down
14 changes: 14 additions & 0 deletions pkg/commands/testdata/no_service_account_name.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: carto.run/v1alpha1
kind: Workload
metadata:
name: spring-petclinic
labels:
app.kubernetes.io/part-of: spring-petclinic
apps.tanzu.vmware.com/workload-type: web
spec:
serviceAccountName: ""
source:
git:
url: https://github.com/sample-accelerators/spring-petclinic
ref:
tag: tap-1.1
14 changes: 14 additions & 0 deletions pkg/commands/testdata/service_account_name.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: carto.run/v1alpha1
kind: Workload
metadata:
name: spring-petclinic
labels:
app.kubernetes.io/part-of: spring-petclinic
apps.tanzu.vmware.com/workload-type: web
spec:
serviceAccountName: my-service-account
source:
git:
url: https://github.com/sample-accelerators/spring-petclinic
ref:
tag: tap-1.1
237 changes: 237 additions & 0 deletions pkg/commands/workload_apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,243 @@ Create workload:
20 + | url: https://example.com/repo.git
Created workload "my-workload"
`,
},
{
Name: "update serviceAccountName",
Args: []string{flags.FilePathFlagName, "testdata/service_account_name.yaml", flags.YesFlagName},
GivenObjects: []clitesting.Factory{
clitesting.Wrapper(&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
},
},
}),
},
ExpectUpdates: []client.Object{
&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
"app.kubernetes.io/part-of": "spring-petclinic",
"apps.tanzu.vmware.com/workload-type": "web",
},
},
Spec: cartov1alpha1.WorkloadSpec{
ServiceAccountName: "my-service-account",
Source: &cartov1alpha1.Source{
Git: &cartov1alpha1.GitSource{
URL: "https://github.com/sample-accelerators/spring-petclinic",
Ref: cartov1alpha1.GitRef{
Tag: "tap-1.1",
},
},
},
},
},
},
ExpectOutput: `
Update workload:
...
2, 2 |apiVersion: carto.run/v1alpha1
3, 3 |kind: Workload
4, 4 |metadata:
5, 5 | labels:
6 + | app.kubernetes.io/part-of: spring-petclinic
7 + | apps.tanzu.vmware.com/workload-type: web
6, 8 | preserve-me: should-exist
7, 9 | name: spring-petclinic
8, 10 | namespace: default
9 - |spec: {}
11 + |spec:
12 + | serviceAccountName: my-service-account
13 + | source:
14 + | git:
15 + | ref:
16 + | tag: tap-1.1
17 + | url: https://github.com/sample-accelerators/spring-petclinic
Updated workload "spring-petclinic"
`,
},
{
Name: "delete serviceAccountName by setting to empty",
Args: []string{flags.FilePathFlagName, "testdata/no_service_account_name.yaml", flags.YesFlagName},
GivenObjects: []clitesting.Factory{
clitesting.Wrapper(&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
},
},
Spec: cartov1alpha1.WorkloadSpec{
ServiceAccountName: "my-service-account",
},
}),
},
ExpectUpdates: []client.Object{
&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
"app.kubernetes.io/part-of": "spring-petclinic",
"apps.tanzu.vmware.com/workload-type": "web",
},
},
Spec: cartov1alpha1.WorkloadSpec{
ServiceAccountName: "",
Source: &cartov1alpha1.Source{
Git: &cartov1alpha1.GitSource{
URL: "https://github.com/sample-accelerators/spring-petclinic",
Ref: cartov1alpha1.GitRef{
Tag: "tap-1.1",
},
},
},
},
},
},
ExpectOutput: `
Update workload:
...
2, 2 |apiVersion: carto.run/v1alpha1
3, 3 |kind: Workload
4, 4 |metadata:
5, 5 | labels:
6 + | app.kubernetes.io/part-of: spring-petclinic
7 + | apps.tanzu.vmware.com/workload-type: web
6, 8 | preserve-me: should-exist
7, 9 | name: spring-petclinic
8, 10 | namespace: default
9, 11 |spec:
10 - | serviceAccountName: my-service-account
12 + | source:
13 + | git:
14 + | ref:
15 + | tag: tap-1.1
16 + | url: https://github.com/sample-accelerators/spring-petclinic
Updated workload "spring-petclinic"
`,
},
{
Name: "delete serviceAccountName field",
Args: []string{flags.FilePathFlagName, "testdata/no_service_account_name.yaml", flags.YesFlagName},
GivenObjects: []clitesting.Factory{
clitesting.Wrapper(&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
},
},
Spec: cartov1alpha1.WorkloadSpec{
ServiceAccountName: "my-service-account",
},
}),
},
ExpectUpdates: []client.Object{
&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
"preserve-me": "should-exist",
"app.kubernetes.io/part-of": "spring-petclinic",
"apps.tanzu.vmware.com/workload-type": "web",
},
},
Spec: cartov1alpha1.WorkloadSpec{
Source: &cartov1alpha1.Source{
Git: &cartov1alpha1.GitSource{
URL: "https://github.com/sample-accelerators/spring-petclinic",
Ref: cartov1alpha1.GitRef{
Tag: "tap-1.1",
},
},
},
},
},
},
ExpectOutput: `
Update workload:
...
2, 2 |apiVersion: carto.run/v1alpha1
3, 3 |kind: Workload
4, 4 |metadata:
5, 5 | labels:
6 + | app.kubernetes.io/part-of: spring-petclinic
7 + | apps.tanzu.vmware.com/workload-type: web
6, 8 | preserve-me: should-exist
7, 9 | name: spring-petclinic
8, 10 | namespace: default
9, 11 |spec:
10 - | serviceAccountName: my-service-account
12 + | source:
13 + | git:
14 + | ref:
15 + | tag: tap-1.1
16 + | url: https://github.com/sample-accelerators/spring-petclinic
Updated workload "spring-petclinic"
`,
},
{
Name: "create with serviceAccountName",
Args: []string{flags.FilePathFlagName, "testdata/service_account_name.yaml", flags.YesFlagName},
ExpectCreates: []client.Object{
&cartov1alpha1.Workload{
ObjectMeta: metav1.ObjectMeta{
Namespace: defaultNamespace,
Name: "spring-petclinic",
Labels: map[string]string{
apis.AppPartOfLabelName: "spring-petclinic",
"apps.tanzu.vmware.com/workload-type": "web",
},
},
Spec: cartov1alpha1.WorkloadSpec{
ServiceAccountName: "my-service-account",
Source: &cartov1alpha1.Source{
Git: &cartov1alpha1.GitSource{
URL: "https://github.com/sample-accelerators/spring-petclinic",
Ref: cartov1alpha1.GitRef{
Tag: "tap-1.1",
},
},
},
},
},
},
ExpectOutput: `
Create workload:
1 + |---
2 + |apiVersion: carto.run/v1alpha1
3 + |kind: Workload
4 + |metadata:
5 + | labels:
6 + | app.kubernetes.io/part-of: spring-petclinic
7 + | apps.tanzu.vmware.com/workload-type: web
8 + | name: spring-petclinic
9 + | namespace: default
10 + |spec:
11 + | serviceAccountName: my-service-account
12 + | source:
13 + | git:
14 + | ref:
15 + | tag: tap-1.1
16 + | url: https://github.com/sample-accelerators/spring-petclinic
Created workload "spring-petclinic"
`,
},
}
Expand Down

0 comments on commit fc7b718

Please sign in to comment.