Skip to content

Commit ff58ab5

Browse files
committed
refactor: Embed variable schema
1 parent cb229e7 commit ff58ab5

File tree

10 files changed

+124
-107
lines changed

10 files changed

+124
-107
lines changed

api/v1alpha1/clusterconfig_types.go

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -191,56 +191,25 @@ func (ImageRegistries) VariableSchema() clusterv1.VariableSchema {
191191
Description: "Configuration for image registries.",
192192
Type: "object",
193193
Properties: map[string]clusterv1.JSONSchemaProps{
194-
"credentials": imageRegistryCredentialsSchema,
194+
"credentials": ImageRegistryCredentials{}.VariableSchema().OpenAPIV3Schema,
195195
},
196196
},
197197
}
198198
}
199199

200-
var (
201-
imageRegistryCredentialsSchema = clusterv1.JSONSchemaProps{
202-
Type: "array",
203-
UniqueItems: true,
204-
Items: &imageRegistryCredentialsResourceSchema,
205-
}
206-
207-
imageRegistryCredentialsResourceSchema = clusterv1.JSONSchemaProps{
208-
Description: "Image registry credentials to set up on all Nodes in the cluster. " +
209-
"Enabling this will the Kubelets with https://kubernetes.io/docs/tasks/administer-cluster/kubelet-credential-provider/.",
210-
Type: "object",
211-
Properties: map[string]clusterv1.JSONSchemaProps{
212-
"url": {
213-
Description: "Registry URL.",
214-
Type: "string",
215-
},
216-
"secretRef": {
217-
Description: "The Secret containing the registry credentials. " +
218-
"The Secret should have keys 'username' and 'password'. " +
219-
"This credentials Secret is not required for some registries, e.g. ECR.",
220-
Type: "object",
221-
Properties: map[string]clusterv1.JSONSchemaProps{
222-
"name": {
223-
Description: "The name of the Secret containing the registry credentials.",
224-
Type: "string",
225-
},
226-
"namespace": {
227-
Description: "The namespace of the Secret containing the registry credentials. " +
228-
"Defaults to the namespace of the KubeadmControlPlaneTemplate and KubeadmConfigTemplate" +
229-
" that reference this variable.",
230-
Type: "string",
231-
},
232-
},
233-
},
234-
},
235-
Required: []string{"url"},
236-
}
237-
)
238-
239200
type ImageRegistryCredentials []ImageRegistryCredentialsResource
240201

241202
func (ImageRegistryCredentials) VariableSchema() clusterv1.VariableSchema {
203+
resourceSchema := ImageRegistryCredentialsResource{}.VariableSchema().OpenAPIV3Schema
204+
242205
return clusterv1.VariableSchema{
243-
OpenAPIV3Schema: imageRegistryCredentialsSchema,
206+
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
207+
Description: "Image registry credentials to set up on all Nodes in the cluster. " +
208+
"Enabling this will configure the Kubelets with " +
209+
"https://kubernetes.io/docs/tasks/administer-cluster/kubelet-credential-provider/.",
210+
Type: "array",
211+
Items: &resourceSchema,
212+
},
244213
}
245214
}
246215

@@ -258,7 +227,34 @@ type ImageRegistryCredentialsResource struct {
258227

259228
func (ImageRegistryCredentialsResource) VariableSchema() clusterv1.VariableSchema {
260229
return clusterv1.VariableSchema{
261-
OpenAPIV3Schema: imageRegistryCredentialsResourceSchema,
230+
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
231+
Type: "object",
232+
Properties: map[string]clusterv1.JSONSchemaProps{
233+
"url": {
234+
Description: "Registry URL.",
235+
Type: "string",
236+
},
237+
"secretRef": {
238+
Description: "The Secret containing the registry credentials. " +
239+
"The Secret should have keys 'username' and 'password'. " +
240+
"This credentials Secret is not required for some registries, e.g. ECR.",
241+
Type: "object",
242+
Properties: map[string]clusterv1.JSONSchemaProps{
243+
"name": {
244+
Description: "The name of the Secret containing the registry credentials.",
245+
Type: "string",
246+
},
247+
"namespace": {
248+
Description: "The namespace of the Secret containing the registry credentials. " +
249+
"Defaults to the namespace of the KubeadmControlPlaneTemplate and KubeadmConfigTemplate" +
250+
" that reference this variable.",
251+
Type: "string",
252+
},
253+
},
254+
},
255+
},
256+
Required: []string{"url"},
257+
},
262258
}
263259
}
264260

api/v1alpha1/zz_generated.deepcopy.go

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

common/pkg/testutils/capitest/patches.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ func ValidateGeneratePatches[T mutation.GeneratePatches](
6161
if tt.ExpectedFailure {
6262
expectedStatus = runtimehooksv1.ResponseStatusFailure
6363
}
64-
g.Expect(resp.Status).To(gomega.Equal(expectedStatus), fmt.Sprintf("Message: %s", resp.Message))
64+
g.Expect(resp.Status).
65+
To(gomega.Equal(expectedStatus), fmt.Sprintf("Message: %s", resp.Message))
6566

6667
if len(tt.ExpectedPatchMatchers) == 0 {
6768
g.Expect(resp.Items).To(gomega.BeEmpty())

pkg/handlers/generic/mutation/imageregistries/credentials/credential_provider_config_files.go

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ var (
4040
kubeletImageCredentialProviderConfigPatch []byte
4141
)
4242

43-
var (
44-
ErrCredentialsNotFound = errors.New("registry credentials not found")
45-
)
43+
var ErrCredentialsNotFound = errors.New("registry credentials not found")
4644

4745
type providerConfig struct {
4846
URL string
@@ -66,7 +64,9 @@ func templateFilesForImageCredentialProviderConfigs(config providerConfig) ([]ca
6664
files = append(files, *kubeletCredentialProviderConfigFile)
6765
}
6866

69-
kubeletDynamicCredentialProviderConfigFile, err := templateDynamicCredentialProviderConfig(config)
67+
kubeletDynamicCredentialProviderConfigFile, err := templateDynamicCredentialProviderConfig(
68+
config,
69+
)
7070
if err != nil {
7171
return nil, err
7272
}
@@ -84,10 +84,7 @@ func templateKubeletCredentialProviderConfig() (*cabpkv1.File, error) {
8484
return nil, fmt.Errorf("failed to parse go template: %w", err)
8585
}
8686

87-
providerBinary, providerArgs, providerAPIVersion, err := kubeletCredentialProvider()
88-
if err != nil {
89-
return nil, err
90-
}
87+
providerBinary, providerArgs, providerAPIVersion := kubeletCredentialProvider()
9188

9289
templateInput := struct {
9390
ProviderBinary string
@@ -129,7 +126,9 @@ func templateDynamicCredentialProviderConfig(
129126
return nil, ErrCredentialsNotFound
130127
}
131128

132-
providerBinary, providerArgs, providerAPIVersion, err := dynamicCredentialProvider(registryHostWithPath)
129+
providerBinary, providerArgs, providerAPIVersion, err := dynamicCredentialProvider(
130+
registryHostWithPath,
131+
)
133132
if err != nil {
134133
return nil, err
135134
}
@@ -149,13 +148,10 @@ func templateDynamicCredentialProviderConfig(
149148
return fileFromTemplate(t, templateInput, kubeletDynamicCredentialProviderConfigOnRemote)
150149
}
151150

152-
func kubeletCredentialProvider() (
153-
providerBinary string, providerArgs []string, providerAPIVersion string, err error,
154-
) {
151+
func kubeletCredentialProvider() (providerBinary string, providerArgs []string, providerAPIVersion string) {
155152
return "dynamic-credential-provider",
156153
[]string{"get-credentials", "-c", kubeletDynamicCredentialProviderConfigOnRemote},
157-
credentialproviderv1beta1.SchemeGroupVersion.String(),
158-
nil
154+
credentialproviderv1beta1.SchemeGroupVersion.String()
159155
}
160156

161157
func dynamicCredentialProvider(host string) (
@@ -187,7 +183,7 @@ func dynamicCredentialProvider(host string) (
187183
func fileFromTemplate(
188184
t *template.Template,
189185
templateInput any,
190-
path string,
186+
fPath string,
191187
) (*cabpkv1.File, error) {
192188
var b bytes.Buffer
193189
err := t.Execute(&b, templateInput)
@@ -196,7 +192,7 @@ func fileFromTemplate(
196192
}
197193

198194
return &cabpkv1.File{
199-
Path: path,
195+
Path: fPath,
200196
Content: b.String(),
201197
Permissions: "0600",
202198
}, nil

pkg/handlers/generic/mutation/imageregistries/credentials/credential_provider_config_files_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import (
77
"testing"
88

99
"github.com/stretchr/testify/assert"
10-
1110
cabpkv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
1211
)
1312

1413
func Test_templateKubeletCredentialProviderConfig(t *testing.T) {
14+
t.Parallel()
15+
1516
tests := []struct {
1617
name string
1718
config providerConfig
@@ -93,6 +94,8 @@ providers:
9394
}
9495

9596
func Test_templateDynamicCredentialProviderConfig(t *testing.T) {
97+
t.Parallel()
98+
9699
tests := []struct {
97100
name string
98101
credentials providerConfig

pkg/handlers/generic/mutation/imageregistries/credentials/credential_provider_insall_files.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,20 @@ const (
2525
credentialProviderTargetDir = "/etc/kubernetes/image-credential-provider/"
2626
)
2727

28-
var (
29-
//go:embed templates/install-kubelet-credential-providers.sh.gotmpl
30-
installKubeletCredentialProvidersScript []byte
31-
)
28+
//go:embed templates/install-kubelet-credential-providers.sh.gotmpl
29+
var installKubeletCredentialProvidersScript []byte
3230

3331
func templateFilesAndCommandsForInstallKubeletCredentialProviders() ([]cabpkv1.File, []string, error) {
3432
var files []cabpkv1.File
3533
var commands []string
3634

37-
installKubeletCredentialProvidersScriptFile, installKubeletCredentialProvidersScriptCommand, err :=
38-
templateInstallKubeletCredentialProviders()
35+
installKCPScriptFile, installKCPScriptCommand, err := templateInstallKubeletCredentialProviders()
3936
if err != nil {
4037
return nil, nil, err
4138
}
42-
if installKubeletCredentialProvidersScriptFile != nil {
43-
files = append(files, *installKubeletCredentialProvidersScriptFile)
44-
commands = append(commands, installKubeletCredentialProvidersScriptCommand)
39+
if installKCPScriptFile != nil {
40+
files = append(files, *installKCPScriptFile)
41+
commands = append(commands, installKCPScriptCommand)
4542
}
4643

4744
return files, commands, nil

pkg/handlers/generic/mutation/imageregistries/credentials/credential_provider_kubelet_args.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
package credentials
55

6-
const ()
7-
86
func addImageCredentialProviderArgs(args map[string]string) {
97
args["image-credential-provider-bin-dir"] = credentialProviderTargetDir
108
args["image-credential-provider-config"] = kubeletImageCredentialProviderConfigOnRemote

pkg/handlers/generic/mutation/imageregistries/credentials/credentials_secret.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,19 @@ import (
1111
"strings"
1212
"text/template"
1313

14-
cabpkv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
15-
1614
corev1 "k8s.io/api/core/v1"
1715
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1816
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
17+
cabpkv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
1918
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
2019
)
2120

2221
const (
23-
secretKeyForStaticCredentialProviderConfig = "static-credential-provider"
22+
secretKeyForStaticCredentialProviderConfig = "static-credential-provider" //nolint:gosec // Not a credential.
2423
)
2524

26-
var (
27-
//go:embed templates/static-credential-provider.json.gotmpl
28-
staticCredentialProviderConfigPatch []byte
29-
)
25+
//go:embed templates/static-credential-provider.json.gotmpl
26+
var staticCredentialProviderConfigPatch []byte
3027

3128
func generateCredentialsSecretFile(config providerConfig, ownerName string) []cabpkv1.File {
3229
if config.isCredentialsEmpty() {
@@ -55,7 +52,9 @@ func generateCredentialsSecret(
5552
return nil, nil
5653
}
5754

58-
staticCredentialProviderSecretContents, err := kubeletStaticCredentialProviderSecretContents(config)
55+
staticCredentialProviderSecretContents, err := kubeletStaticCredentialProviderSecretContents(
56+
config,
57+
)
5958
if err != nil {
6059
return nil, err
6160
}

0 commit comments

Comments
 (0)