Skip to content

Commit 180195d

Browse files
committed
refactoring build so that ServiceAccountName is available in ack-generate controller process as well as ack-generate release process. Also adding in a service-account.yaml.tpl to be referenced in deployment.yaml.tpl and cluster-role-binding.yaml.tpl
Signed-off-by: Adam D. Cornett <adc@redhat.com>
1 parent 1338d18 commit 180195d

File tree

12 files changed

+73
-44
lines changed

12 files changed

+73
-44
lines changed

cmd/ack-generate/command/apis.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func generateAPIs(cmd *cobra.Command, args []string) error {
100100
if err != nil {
101101
return err
102102
}
103-
ts, err := ackgenerate.APIs(m, optTemplateDirs)
103+
ts, err := ackgenerate.APIs(m, optTemplateDirs, optServiceAccountName)
104104
if err != nil {
105105
return err
106106
}

cmd/ack-generate/command/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func generateController(cmd *cobra.Command, args []string) error {
6363
if err != nil {
6464
return err
6565
}
66-
ts, err := ackgenerate.Controller(m, optTemplateDirs)
66+
ts, err := ackgenerate.Controller(m, optTemplateDirs, optServiceAccountName)
6767
if err != nil {
6868
return err
6969
}

cmd/ack-generate/command/release.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,8 @@ import (
2727
)
2828

2929
var (
30-
optReleaseOutputPath string
31-
optImageRepository string
32-
optServiceAccountName string
30+
optReleaseOutputPath string
31+
optImageRepository string
3332
)
3433

3534
var releaseCmd = &cobra.Command{
@@ -42,9 +41,6 @@ func init() {
4241
releaseCmd.PersistentFlags().StringVar(
4342
&optImageRepository, "image-repository", "", "the Docker image repository to use in release artifacts. Defaults to 'public.ecr.aws/aws-controllers-k8s/$service-controller'",
4443
)
45-
releaseCmd.PersistentFlags().StringVar(
46-
&optServiceAccountName, "service-account-name", "default", "The name of the ServiceAccount AND ClusterRole used for ACK service controller",
47-
)
4844
releaseCmd.PersistentFlags().StringVarP(
4945
&optReleaseOutputPath, "output", "o", "", "path to root directory to create generated files. Defaults to "+optServicesDir+"/$service",
5046
)

cmd/ack-generate/command/root.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var (
4343
optGeneratorConfigPath string
4444
optMetadataConfigPath string
4545
optOutputPath string
46+
optServiceAccountName string
4647
)
4748

4849
var rootCmd = &cobra.Command{
@@ -121,6 +122,9 @@ func init() {
121122
rootCmd.PersistentFlags().StringVar(
122123
&optAWSSDKGoVersion, "aws-sdk-go-version", "", "Version of github.com/aws/aws-sdk-go used to generate apis and controllers files",
123124
)
125+
rootCmd.PersistentFlags().StringVar(
126+
&optServiceAccountName, "service-account-name", optServiceAccountName, "The name of the ServiceAccount AND ClusterRole used for ACK service controller",
127+
)
124128
}
125129

126130
// Execute adds all child commands to the root command and sets flags

pkg/generate/ack/apis.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ var (
4646
func APIs(
4747
m *ackmodel.Model,
4848
templateBasePaths []string,
49+
// serviceAccountName is the name of the ServiceAccount and ClusterRole
50+
// used in the Helm chart
51+
serviceAccountName string,
4952
) (*templateset.TemplateSet, error) {
5053
enumDefs, err := m.GetEnumDefs()
5154
if err != nil {
@@ -86,6 +89,7 @@ func APIs(
8689
metaVars,
8790
m.SDKAPI,
8891
crd,
92+
serviceAccountName,
8993
}
9094
if err = ts.Add(crdFileName, "apis/crd.go.tpl", crdVars); err != nil {
9195
return nil, err
@@ -106,6 +110,7 @@ type templateAPIVars struct {
106110
// code for a single top-level resource's API definition
107111
type templateCRDVars struct {
108112
templateset.MetaVars
109-
SDKAPI *ackmodel.SDKAPI
110-
CRD *ackmodel.CRD
113+
SDKAPI *ackmodel.SDKAPI
114+
CRD *ackmodel.CRD
115+
ServiceAccountName string
111116
}

pkg/generate/ack/controller.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var (
3535
"config/rbac/cluster-role-binding.yaml.tpl",
3636
"config/rbac/role-reader.yaml.tpl",
3737
"config/rbac/role-writer.yaml.tpl",
38+
"config/rbac/service-account.yaml.tpl",
3839
"config/rbac/kustomization.yaml.tpl",
3940
"config/crd/kustomization.yaml.tpl",
4041
"config/overlays/namespaced/kustomization.yaml.tpl",
@@ -164,6 +165,9 @@ var (
164165
func Controller(
165166
m *ackmodel.Model,
166167
templateBasePaths []string,
168+
// serviceAccountName is the name of the ServiceAccount and ClusterRole
169+
// used in the Helm chart
170+
serviceAccountName string,
167171
) (*templateset.TemplateSet, error) {
168172
crds, err := m.GetCRDs()
169173
if err != nil {
@@ -179,6 +183,7 @@ func Controller(
179183
metaVars,
180184
m.SDKAPI,
181185
r,
186+
serviceAccountName,
182187
}
183188
code, err := ResourceHookCode(templateBasePaths, r, hookID, crdVars, controllerFuncMap)
184189
if err != nil {
@@ -214,6 +219,7 @@ func Controller(
214219
metaVars,
215220
m.SDKAPI,
216221
crd,
222+
serviceAccountName,
217223
}
218224
if err = ts.Add(outPath, tplPath, crdVars); err != nil {
219225
return nil, err
@@ -224,6 +230,7 @@ func Controller(
224230
configVars := &templateConfigVars{
225231
metaVars,
226232
m.GetConfig(),
233+
serviceAccountName,
227234
}
228235
if err = ts.Add("pkg/resource/registry.go", "pkg/resource/registry.go.tpl", configVars); err != nil {
229236
return nil, err
@@ -250,7 +257,7 @@ func Controller(
250257
// Finally, add the configuration YAML file templates
251258
for _, path := range controllerConfigTemplatePaths {
252259
outPath := strings.TrimSuffix(path, ".tpl")
253-
if err = ts.Add(outPath, path, metaVars); err != nil {
260+
if err = ts.Add(outPath, path, configVars); err != nil {
254261
return nil, err
255262
}
256263
}
@@ -268,5 +275,6 @@ type templateCmdVars struct {
268275
// access to the generator configuration definition
269276
type templateConfigVars struct {
270277
templateset.MetaVars
271-
GeneratorConfig *ackgenconfig.Config
278+
GeneratorConfig *ackgenconfig.Config
279+
ServiceAccountName string
272280
}

scripts/build-controller-release.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ ACK_GENERATE_API_VERSION=${ACK_GENERATE_API_VERSION:-"v1alpha1"}
3434
ACK_GENERATE_CONFIG_PATH=${ACK_GENERATE_CONFIG_PATH:-""}
3535
ACK_METADATA_CONFIG_PATH=${ACK_METADATA_CONFIG_PATH:-""}
3636
AWS_SDK_GO_VERSION=${AWS_SDK_GO_VERSION:-""}
37+
ACK_GENERATE_SERVICE_ACCOUNT_NAME=${ACK_GENERATE_SERVICE_ACCOUNT_NAME:-"ack-$SERVICE-service-account"}
3738

3839
DEFAULT_TEMPLATES_DIR="$ROOT_DIR/../../aws-controllers-k8s/code-generator/templates"
3940
TEMPLATES_DIR=${TEMPLATES_DIR:-$DEFAULT_TEMPLATES_DIR}
@@ -42,6 +43,7 @@ DEFAULT_RUNTIME_DIR="$ROOT_DIR/../runtime"
4243
RUNTIME_DIR=${RUNTIME_DIR:-$DEFAULT_RUNTIME_DIR}
4344
RUNTIME_API_VERSION=${RUNTIME_API_VERSION:-"v1alpha1"}
4445
NON_RELEASE_VERSION="v0.0.0-non-release-version"
46+
K8S_RBAC_ROLE_NAME=${K8S_RBAC_ROLE_NAME:-"ack-$SERVICE-controller"}
4547

4648
USAGE="
4749
Usage:
@@ -157,9 +159,6 @@ if [[ $RELEASE_VERSION != $NON_RELEASE_VERSION ]]; then
157159
fi
158160
fi
159161

160-
K8S_RBAC_ROLE_NAME=${K8S_RBAC_ROLE_NAME:-"ack-$SERVICE-controller"}
161-
ACK_GENERATE_SERVICE_ACCOUNT_NAME=${ACK_GENERATE_SERVICE_ACCOUNT_NAME:-"ack-$SERVICE-controller"}
162-
163162
if [ -z "$AWS_SDK_GO_VERSION" ]; then
164163
AWS_SDK_GO_VERSION=$(go list -m -f '{{ .Version }}' -modfile $SERVICE_CONTROLLER_SOURCE_PATH/go.mod github.com/aws/aws-sdk-go)
165164
fi

scripts/build-controller.sh

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ ACK_GENERATE_BIN_PATH=${ACK_GENERATE_BIN_PATH:-$DEFAULT_ACK_GENERATE_BIN_PATH}
2626
ACK_GENERATE_API_VERSION=${ACK_GENERATE_API_VERSION:-"v1alpha1"}
2727
ACK_GENERATE_CONFIG_PATH=${ACK_GENERATE_CONFIG_PATH:-""}
2828
ACK_METADATA_CONFIG_PATH=${ACK_METADATA_CONFIG_PATH:-""}
29+
ACK_GENERATE_SERVICE_ACCOUNT_NAME=${ACK_GENERATE_SERVICE_ACCOUNT_NAME:-"ack-$SERVICE-service-account"}
2930
AWS_SDK_GO_VERSION=${AWS_SDK_GO_VERSION:-""}
3031
DEFAULT_RUNTIME_CRD_DIR="$ROOT_DIR/../../aws-controllers-k8s/runtime/config"
3132
RUNTIME_CRD_DIR=${RUNTIME_CRD_DIR:-$DEFAULT_RUNTIME_CRD_DIR}
33+
K8S_RBAC_ROLE_NAME=${K8S_RBAC_ROLE_NAME:-"ack-$SERVICE-controller"}
3234

3335
USAGE="
3436
Usage:
@@ -38,32 +40,35 @@ Usage:
3840
's3' 'sns' or 'sqs'
3941
4042
Environment variables:
41-
ACK_GENERATE_CACHE_DIR: Overrides the directory used for caching AWS API
42-
models used by the ack-generate tool.
43-
Default: $ACK_GENERATE_CACHE_DIR
44-
ACK_GENERATE_BIN_PATH: Overrides the path to the the ack-generate binary.
45-
Default: $ACK_GENERATE_BIN_PATH
46-
ACK_GENERATE_API_VERSION: Overrides the version of the Kubernetes API objects
47-
generated by the ack-generate apis command. If not
48-
specified, and the service controller has been
49-
previously generated, the latest generated API
50-
version is used. If the service controller has yet
51-
to be generated, 'v1alpha1' is used.
52-
ACK_GENERATE_CONFIG_PATH: Specify a path to the generator config YAML file to
53-
instruct the code generator for the service.
54-
Default: generator.yaml
55-
ACK_METADATA_CONFIG_PATH: Specify a path to the metadata config YAML file to
56-
instruct the code generator for the service.
57-
Default: metadata.yaml
58-
AWS_SDK_GO_VERSION: Overrides the version of github.com/aws/aws-sdk-go used
59-
by 'ack-generate' to fetch the service API Specifications.
60-
Default: Version of aws/aws-sdk-go in service go.mod
61-
TEMPLATES_DIR: Overrides the directory containg ack-generate templates
62-
Default: $TEMPLATES_DIR
63-
K8S_RBAC_ROLE_NAME: Name of the Kubernetes Role to use when generating
64-
the RBAC manifests for the custom resource
65-
definitions.
66-
Default: $K8S_RBAC_ROLE_NAME
43+
ACK_GENERATE_CACHE_DIR: Overrides the directory used for caching AWS API
44+
models used by the ack-generate tool.
45+
Default: $ACK_GENERATE_CACHE_DIR
46+
ACK_GENERATE_BIN_PATH: Overrides the path to the the ack-generate binary.
47+
Default: $ACK_GENERATE_BIN_PATH
48+
ACK_GENERATE_API_VERSION: Overrides the version of the Kubernetes API objects
49+
generated by the ack-generate apis command. If not
50+
specified, and the service controller has been
51+
previously generated, the latest generated API
52+
version is used. If the service controller has yet
53+
to be generated, 'v1alpha1' is used.
54+
ACK_GENERATE_CONFIG_PATH: Specify a path to the generator config YAML file to
55+
instruct the code generator for the service.
56+
Default: generator.yaml
57+
ACK_METADATA_CONFIG_PATH: Specify a path to the metadata config YAML file to
58+
instruct the code generator for the service.
59+
Default: metadata.yaml
60+
ACK_GENERATE_SERVICE_ACCOUNT_NAME: Name of the Kubernetes Service Account and
61+
Cluster Role to use in Helm chart.
62+
Default: $ACK_GENERATE_SERVICE_ACCOUNT_NAME
63+
AWS_SDK_GO_VERSION: Overrides the version of github.com/aws/aws-sdk-go used
64+
by 'ack-generate' to fetch the service API Specifications.
65+
Default: Version of aws/aws-sdk-go in service go.mod
66+
TEMPLATES_DIR: Overrides the directory containg ack-generate templates
67+
Default: $TEMPLATES_DIR
68+
K8S_RBAC_ROLE_NAME: Name of the Kubernetes Role to use when generating
69+
the RBAC manifests for the custom resource
70+
definitions.
71+
Default: $K8S_RBAC_ROLE_NAME
6772
"
6873

6974
if [ $# -ne 1 ]; then
@@ -119,9 +124,8 @@ if [[ -d "$SERVICE_CONTROLLER_SOURCE_PATH/templates" ]]; then
119124
BOILERPLATE_TXT_PATH="$SERVICE_CONTROLLER_SOURCE_PATH/templates/boilerplate.txt"
120125
fi
121126
fi
122-
TEMPLATE_DIRS=${TEMPLATE_DIRS:-$DEFAULT_TEMPLATE_DIRS}
123127

124-
K8S_RBAC_ROLE_NAME=${K8S_RBAC_ROLE_NAME:-"ack-$SERVICE-controller"}
128+
TEMPLATE_DIRS=${TEMPLATE_DIRS:-$DEFAULT_TEMPLATE_DIRS}
125129

126130
config_output_dir="$SERVICE_CONTROLLER_SOURCE_PATH/config/"
127131

@@ -174,6 +178,10 @@ if [ -n "$AWS_SDK_GO_VERSION" ]; then
174178
apis_args="$apis_args --aws-sdk-go-version $AWS_SDK_GO_VERSION"
175179
fi
176180

181+
if [ -n "$ACK_GENERATE_SERVICE_ACCOUNT_NAME" ]; then
182+
ag_args="$ag_args --service-account-name $ACK_GENERATE_SERVICE_ACCOUNT_NAME"
183+
fi
184+
177185
echo "Building Kubernetes API objects for $SERVICE"
178186
$ACK_GENERATE_BIN_PATH $apis_args
179187
if [ $? -ne 0 ]; then

templates/config/controller/deployment.yaml.tpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ spec:
6161
drop:
6262
- ALL
6363
terminationGracePeriodSeconds: 10
64+
serviceAccountName: {{ .ServiceAccountName }}
6465
hostIPC: false
6566
hostNetwork: false
6667
hostPID: false

templates/config/rbac/cluster-role-binding.yaml.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ roleRef:
88
name: ack-{{ .ServicePackageName }}-controller
99
subjects:
1010
- kind: ServiceAccount
11-
name: default
11+
name: {{ .ServiceAccountName }}
1212
namespace: ack-system

0 commit comments

Comments
 (0)