521 lines
22 KiB
Go
521 lines
22 KiB
Go
/*
|
|
Copyright 2023 SUSE.
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package rke2
|
|
|
|
import (
|
|
"context"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
|
|
|
"sigs.k8s.io/cluster-api/api/v1beta1"
|
|
|
|
bootstrapv1 "github.com/rancher/cluster-api-provider-rke2/bootstrap/api/v1beta1"
|
|
controlplanev1 "github.com/rancher/cluster-api-provider-rke2/controlplane/api/v1beta1"
|
|
"github.com/rancher/cluster-api-provider-rke2/pkg/consts"
|
|
)
|
|
|
|
const (
|
|
expEncryptionConfig = `{"kind":"EncryptionConfiguration","apiVersion":"apiserver.config.k8s.io/v1","resources":[{"resources":["secrets"],"providers":[{"secretbox":{"keys":[{"name":"enckey","secret":"dGVzdF9lbmNyeXB0aW9uX2tleQ=="}]}},{"identity":{}}]}]}`
|
|
)
|
|
|
|
var _ = Describe("RKE2ServerConfig", func() {
|
|
var opts *ServerConfigOpts
|
|
|
|
BeforeEach(func() {
|
|
opts = &ServerConfigOpts{
|
|
Token: "just-a-test-token",
|
|
Cluster: v1beta1.Cluster{
|
|
Spec: v1beta1.ClusterSpec{
|
|
ClusterNetwork: &v1beta1.ClusterNetwork{
|
|
Pods: &v1beta1.NetworkRanges{
|
|
CIDRBlocks: []string{
|
|
"192.168.0.0/16",
|
|
},
|
|
},
|
|
Services: &v1beta1.NetworkRanges{
|
|
CIDRBlocks: []string{
|
|
"192.169.0.0/16",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
ControlPlaneEndpoint: "testendpoint",
|
|
Ctx: context.Background(),
|
|
Client: fake.NewClientBuilder().WithObjects(
|
|
&corev1.Secret{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
Data: map[string][]byte{
|
|
"aws_access_key_id": []byte("test_id"),
|
|
"aws_secret_access_key": []byte("test_secret"),
|
|
"ca.pem": []byte("test_ca"),
|
|
"audit-policy.yaml": []byte("test_audit"),
|
|
"endpoint": []byte("test_endpoint"),
|
|
"cert.pem": []byte("test_cert"),
|
|
"key.pem": []byte("test_key"),
|
|
},
|
|
},
|
|
&corev1.ConfigMap{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
Data: map[string]string{
|
|
"cloud-config": "test_cloud_config",
|
|
"credential-config.yaml": "test_credential_config",
|
|
"credential-provider-binaries": "test_credential_provider_binaries",
|
|
"resolv.conf": "test_resolv_conf",
|
|
},
|
|
},
|
|
).Build(),
|
|
ServerConfig: controlplanev1.RKE2ServerConfig{
|
|
AdvertiseAddress: "testaddress",
|
|
AuditPolicySecret: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
|
|
BindAddress: "testbindaddress",
|
|
CNI: controlplanev1.Cilium,
|
|
ClusterDNS: "testdns",
|
|
ClusterDomain: "testdomain",
|
|
CloudProviderConfigMap: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
CloudProviderName: "testcloud",
|
|
DisableComponents: controlplanev1.DisableComponents{
|
|
PluginComponents: []controlplanev1.DisabledPluginComponent{
|
|
controlplanev1.CoreDNS,
|
|
},
|
|
KubernetesComponents: []controlplanev1.DisabledKubernetesComponent{
|
|
controlplanev1.KubeProxy,
|
|
controlplanev1.Scheduler,
|
|
controlplanev1.CloudController,
|
|
},
|
|
},
|
|
Etcd: controlplanev1.EtcdConfig{
|
|
ExposeMetrics: true,
|
|
BackupConfig: controlplanev1.EtcdBackupConfig{
|
|
S3: &controlplanev1.EtcdS3{
|
|
S3CredentialSecret: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
EndpointCASecret: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
Bucket: "testbucket",
|
|
Region: "testregion",
|
|
Endpoint: "testendpoint",
|
|
EnforceSSLVerify: true,
|
|
},
|
|
Directory: "testdir",
|
|
SnapshotName: "testsnapshot",
|
|
Retention: "testretention",
|
|
ScheduleCron: "testschedule",
|
|
},
|
|
CustomConfig: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
},
|
|
},
|
|
ServiceNodePortRange: "testrange",
|
|
TLSSan: []string{"testsan"},
|
|
KubeAPIServer: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
},
|
|
KubeScheduler: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
},
|
|
KubeControllerManager: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
},
|
|
CloudControllerManager: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
},
|
|
EmbeddedRegistry: true,
|
|
ExternalDatastoreSecret: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
},
|
|
}
|
|
})
|
|
|
|
It("should succefully generate a server config", func() {
|
|
rke2ServerConfig, files, err := GenerateInitControlPlaneConfig(*opts)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
serverConfig := opts.ServerConfig
|
|
Expect(rke2ServerConfig.AdvertiseAddress).To(Equal(serverConfig.AdvertiseAddress))
|
|
Expect(rke2ServerConfig.AuditPolicyFile).To(Equal("/etc/rancher/rke2/audit-policy.yaml"))
|
|
Expect(rke2ServerConfig.BindAddress).To(Equal(serverConfig.BindAddress))
|
|
Expect(rke2ServerConfig.CNI).To(Equal([]string{string(serverConfig.CNI)}))
|
|
Expect(rke2ServerConfig.ClusterCIDR).To(Equal("192.168.0.0/16"))
|
|
Expect(rke2ServerConfig.ServiceCIDR).To(Equal("192.169.0.0/16"))
|
|
Expect(rke2ServerConfig.ClusterDNS).To(Equal(serverConfig.ClusterDNS))
|
|
Expect(rke2ServerConfig.ClusterDomain).To(Equal(serverConfig.ClusterDomain))
|
|
Expect(rke2ServerConfig.CloudProviderConfig).To(Equal("/etc/rancher/rke2/cloud-provider-config"))
|
|
Expect(rke2ServerConfig.CloudProviderName).To(Equal(opts.ServerConfig.CloudProviderName))
|
|
Expect(rke2ServerConfig.DisableComponents).To(Equal([]string{string(controlplanev1.CoreDNS)}))
|
|
Expect(rke2ServerConfig.DisableKubeProxy).To(BeTrue())
|
|
Expect(rke2ServerConfig.DisableCloudController).To(BeTrue())
|
|
Expect(rke2ServerConfig.DisableScheduler).To(BeTrue())
|
|
// Expect(rke2ServerConfig.EtcdDisableSnapshots).To(BeFalse())
|
|
Expect(rke2ServerConfig.EtcdExposeMetrics).To(Equal(serverConfig.Etcd.ExposeMetrics))
|
|
Expect(rke2ServerConfig.EtcdS3).To(BeTrue())
|
|
Expect(rke2ServerConfig.EtcdS3AccessKey).To(Equal("test_id"))
|
|
Expect(rke2ServerConfig.EtcdS3SecretKey).To(Equal("test_secret"))
|
|
Expect(rke2ServerConfig.EtcdS3Bucket).To(Equal(serverConfig.Etcd.BackupConfig.S3.Bucket))
|
|
Expect(rke2ServerConfig.EtcdS3Region).To(Equal(serverConfig.Etcd.BackupConfig.S3.Region))
|
|
Expect(rke2ServerConfig.EtcdS3Folder).To(Equal(serverConfig.Etcd.BackupConfig.S3.Folder))
|
|
Expect(rke2ServerConfig.EtcdS3Endpoint).To(Equal(serverConfig.Etcd.BackupConfig.S3.Endpoint))
|
|
Expect(rke2ServerConfig.EtcdS3EndpointCA).To(Equal("/etc/rancher/rke2/etcd-s3-ca.crt"))
|
|
Expect(rke2ServerConfig.EtcdSnapshotDir).To(Equal(serverConfig.Etcd.BackupConfig.Directory))
|
|
Expect(rke2ServerConfig.EtcdSnapshotName).To(Equal(serverConfig.Etcd.BackupConfig.SnapshotName))
|
|
Expect(rke2ServerConfig.EtcdSnapshotRetention).To(Equal(serverConfig.Etcd.BackupConfig.Retention))
|
|
Expect(rke2ServerConfig.EtcdSnapshotScheduleCron).To(Equal(serverConfig.Etcd.BackupConfig.ScheduleCron))
|
|
Expect(rke2ServerConfig.EtcdS3SkipSslVerify).To(BeFalse())
|
|
Expect(rke2ServerConfig.EtcdArgs).To(Equal(serverConfig.Etcd.CustomConfig.ExtraArgs))
|
|
Expect(rke2ServerConfig.EtcdImage).To(Equal(serverConfig.Etcd.CustomConfig.OverrideImage))
|
|
Expect(rke2ServerConfig.EtcdExtraMounts).To(Equal(componentMapToSlice(extraMount, serverConfig.Etcd.CustomConfig.ExtraMounts)))
|
|
Expect(rke2ServerConfig.EtcdExtraEnv).To(Equal(componentMapToSlice(extraEnv, serverConfig.Etcd.CustomConfig.ExtraEnv)))
|
|
Expect(rke2ServerConfig.ServiceNodePortRange).To(Equal(rke2ServerConfig.ServiceNodePortRange))
|
|
Expect(rke2ServerConfig.TLSSan).To(Equal(append(serverConfig.TLSSan, opts.ControlPlaneEndpoint)))
|
|
Expect(rke2ServerConfig.KubeAPIServerArgs).To(Equal(serverConfig.KubeAPIServer.ExtraArgs))
|
|
Expect(rke2ServerConfig.KubeAPIserverImage).To(Equal(serverConfig.KubeAPIServer.OverrideImage))
|
|
Expect(rke2ServerConfig.KubeAPIserverExtraMounts).To(Equal(componentMapToSlice(extraMount, serverConfig.KubeAPIServer.ExtraMounts)))
|
|
Expect(rke2ServerConfig.KubeAPIserverExtraEnv).To(Equal(componentMapToSlice(extraEnv, serverConfig.KubeAPIServer.ExtraEnv)))
|
|
Expect(rke2ServerConfig.KubeSchedulerArgs).To(Equal(serverConfig.KubeScheduler.ExtraArgs))
|
|
Expect(rke2ServerConfig.KubeSchedulerImage).To(Equal(serverConfig.KubeScheduler.OverrideImage))
|
|
Expect(rke2ServerConfig.KubeSchedulerExtraMounts).To(Equal(componentMapToSlice(extraMount, serverConfig.KubeScheduler.ExtraMounts)))
|
|
Expect(rke2ServerConfig.KubeSchedulerExtraEnv).To(Equal(componentMapToSlice(extraEnv, serverConfig.KubeScheduler.ExtraEnv)))
|
|
Expect(rke2ServerConfig.KubeControllerManagerArgs).To(Equal(serverConfig.KubeControllerManager.ExtraArgs))
|
|
Expect(rke2ServerConfig.KubeControllerManagerImage).To(Equal(serverConfig.KubeControllerManager.OverrideImage))
|
|
Expect(rke2ServerConfig.KubeControllerManagerExtraMounts).To(Equal(componentMapToSlice(extraMount, serverConfig.KubeControllerManager.ExtraMounts)))
|
|
Expect(rke2ServerConfig.KubeControllerManagerExtraEnv).To(Equal(componentMapToSlice(extraEnv, serverConfig.KubeControllerManager.ExtraEnv)))
|
|
Expect(rke2ServerConfig.CloudControllerManagerExtraMounts).To(Equal(componentMapToSlice(extraMount, serverConfig.CloudControllerManager.ExtraMounts)))
|
|
Expect(rke2ServerConfig.CloudControllerManagerExtraEnv).To(Equal(componentMapToSlice(extraEnv, serverConfig.CloudControllerManager.ExtraEnv)))
|
|
Expect(rke2ServerConfig.Token).To(Equal(opts.Token))
|
|
Expect(rke2ServerConfig.EmbeddedRegistry).To(BeTrue())
|
|
Expect(rke2ServerConfig.DatastoreEndpoint).To(Equal("test_endpoint"))
|
|
Expect(rke2ServerConfig.DatastoreCAFile).To(Equal("/etc/rancher/rke2/datastore-ca.crt"))
|
|
Expect(rke2ServerConfig.DatastoreCertFile).To(Equal("/etc/rancher/rke2/datastore-cert.crt"))
|
|
Expect(rke2ServerConfig.DatastoreKeyFile).To(Equal("/etc/rancher/rke2/datastore-key.crt"))
|
|
|
|
Expect(files).To(HaveLen(7))
|
|
|
|
Expect(files[0].Path).To(Equal(rke2ServerConfig.AuditPolicyFile))
|
|
Expect(files[0].Content).To(Equal("test_audit"))
|
|
Expect(files[0].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[0].Permissions).To(Equal(consts.DefaultFileMode))
|
|
|
|
Expect(files[1].Path).To(Equal(rke2ServerConfig.CloudProviderConfig))
|
|
Expect(files[1].Content).To(Equal("test_cloud_config"))
|
|
Expect(files[1].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[1].Permissions).To(Equal(consts.DefaultFileMode))
|
|
|
|
Expect(files[2].Path).To(Equal(rke2ServerConfig.EtcdS3EndpointCA))
|
|
Expect(files[2].Content).To(Equal("test_ca"))
|
|
Expect(files[2].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[2].Permissions).To(Equal("0640"))
|
|
|
|
Expect(files[3].Path).To(Equal(rke2ServerConfig.DatastoreCAFile))
|
|
Expect(files[3].Content).To(Equal("test_ca"))
|
|
Expect(files[3].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[3].Permissions).To(Equal("0640"))
|
|
|
|
Expect(files[4].Path).To(Equal(rke2ServerConfig.DatastoreCertFile))
|
|
Expect(files[4].Content).To(Equal("test_cert"))
|
|
Expect(files[4].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[4].Permissions).To(Equal("0640"))
|
|
|
|
Expect(files[5].Path).To(Equal(rke2ServerConfig.DatastoreKeyFile))
|
|
Expect(files[5].Content).To(Equal("test_key"))
|
|
Expect(files[5].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[5].Permissions).To(Equal("0640"))
|
|
|
|
Expect(files[6].Path).To(Equal(rke2ServerConfig.CloudProviderConfig))
|
|
Expect(files[6].Content).To(Equal("test_cloud_config"))
|
|
Expect(files[6].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[6].Permissions).To(Equal(consts.DefaultFileMode))
|
|
})
|
|
})
|
|
|
|
var _ = Describe("RKE2 Server Config with secretbox encryption", func() {
|
|
var opts *ServerConfigOpts
|
|
|
|
BeforeEach(func() {
|
|
|
|
opts = &ServerConfigOpts{
|
|
Token: "token",
|
|
Cluster: v1beta1.Cluster{
|
|
Spec: v1beta1.ClusterSpec{
|
|
ClusterNetwork: &v1beta1.ClusterNetwork{
|
|
Pods: &v1beta1.NetworkRanges{
|
|
CIDRBlocks: []string{
|
|
"192.168.0.0/16",
|
|
},
|
|
},
|
|
Services: &v1beta1.NetworkRanges{
|
|
CIDRBlocks: []string{
|
|
"192.169.0.0/16",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
ControlPlaneEndpoint: "testendpoint",
|
|
Ctx: context.Background(),
|
|
Client: fake.NewClientBuilder().WithObjects(
|
|
&corev1.Secret{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "encryption-key",
|
|
Namespace: "test",
|
|
},
|
|
Data: map[string][]byte{
|
|
"encryptionKey": []byte("test_encryption_key"),
|
|
},
|
|
},
|
|
).Build(),
|
|
ServerConfig: controlplanev1.RKE2ServerConfig{
|
|
BindAddress: "testbindaddress",
|
|
CNI: controlplanev1.Cilium,
|
|
ClusterDNS: "testdns",
|
|
ClusterDomain: "testdomain",
|
|
SecretsEncryptionProvider: &controlplanev1.SecretsEncryption{
|
|
Provider: "secretbox",
|
|
EncryptionKeySecret: &corev1.ObjectReference{
|
|
Name: "encryption-key",
|
|
Namespace: "test",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
})
|
|
|
|
It("should succefully generate a server config with secretbox key provider", func() {
|
|
rke2ServerConfig, files, err := GenerateInitControlPlaneConfig(*opts)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
Expect(rke2ServerConfig.SecretsEncryptionProvider).To(Equal("secretbox"))
|
|
Expect(files[0].Content).To(Equal(expEncryptionConfig))
|
|
})
|
|
})
|
|
|
|
var _ = Describe("RKE2 Agent Config", func() {
|
|
var opts *AgentConfigOpts
|
|
|
|
BeforeEach(func() {
|
|
opts = &AgentConfigOpts{
|
|
ServerURL: "testurl",
|
|
Ctx: context.Background(),
|
|
Token: "testtoken",
|
|
Client: fake.NewClientBuilder().WithObjects(
|
|
&corev1.ConfigMap{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
Data: map[string]string{
|
|
"credential-config.yaml": "test_credential_config",
|
|
"credential-provider-binaries": "test_credential_provider_binaries",
|
|
"resolv.conf": "test_resolv_conf",
|
|
},
|
|
},
|
|
).Build(),
|
|
AgentConfig: bootstrapv1.RKE2AgentConfig{
|
|
ContainerRuntimeEndpoint: "testendpoint",
|
|
DataDir: "testdir",
|
|
ImageCredentialProviderConfigMap: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
SystemDefaultRegistry: "testregistry",
|
|
KubeletPath: "testpath",
|
|
Kubelet: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
},
|
|
LoadBalancerPort: 1234,
|
|
NodeLabels: []string{"testlabel"},
|
|
NodeTaints: []string{"testtaint"},
|
|
CISProfile: bootstrapv1.CIS, //nolint:nosnakecase
|
|
ProtectKernelDefaults: true,
|
|
ResolvConf: &corev1.ObjectReference{
|
|
Name: "test",
|
|
Namespace: "test",
|
|
},
|
|
RuntimeImage: "testimage",
|
|
EnableContainerdSElinux: true,
|
|
Snapshotter: "testsnapshotter",
|
|
KubeProxy: &bootstrapv1.ComponentConfig{
|
|
ExtraArgs: []string{"testarg"},
|
|
OverrideImage: "testimage",
|
|
ExtraEnv: map[string]string{"testenv": "testenv"},
|
|
ExtraMounts: map[string]string{"testmount": "testmount"},
|
|
},
|
|
},
|
|
Version: "v1.25.2",
|
|
}
|
|
})
|
|
|
|
It("should successfully generate an agent config", func() {
|
|
agentConfig, files, err := GenerateWorkerConfig(*opts)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
Expect(agentConfig.ContainerRuntimeEndpoint).To(Equal(opts.AgentConfig.ContainerRuntimeEndpoint))
|
|
Expect(agentConfig.DataDir).To(Equal(opts.AgentConfig.DataDir))
|
|
Expect(agentConfig.ImageCredentialProviderConfig).To(Equal("/etc/rancher/rke2/credential-config.yaml"))
|
|
Expect(agentConfig.ImageCredentialProviderBinDir).To(Equal("test_credential_provider_binaries"))
|
|
Expect(agentConfig.KubeletPath).To(Equal(opts.AgentConfig.KubeletPath))
|
|
Expect(agentConfig.KubeletArgs).To(Equal(opts.AgentConfig.Kubelet.ExtraArgs))
|
|
Expect(agentConfig.LbServerPort).To(Equal(opts.AgentConfig.LoadBalancerPort))
|
|
Expect(agentConfig.NodeLabels).To(Equal(opts.AgentConfig.NodeLabels))
|
|
Expect(agentConfig.NodeTaints).To(Equal(opts.AgentConfig.NodeTaints))
|
|
Expect(agentConfig.Profile).To(Equal(string(opts.AgentConfig.CISProfile)))
|
|
Expect(agentConfig.ProtectKernelDefaults).To(Equal(opts.AgentConfig.ProtectKernelDefaults))
|
|
Expect(agentConfig.ResolvConf).To(Equal("/etc/rancher/rke2/resolv.conf"))
|
|
Expect(agentConfig.RuntimeImage).To(Equal(opts.AgentConfig.RuntimeImage))
|
|
Expect(agentConfig.Selinux).To(Equal(opts.AgentConfig.EnableContainerdSElinux))
|
|
Expect(agentConfig.Server).To(Equal(opts.ServerURL))
|
|
Expect(agentConfig.Snapshotter).To(Equal(opts.AgentConfig.Snapshotter))
|
|
Expect(agentConfig.KubeProxyArgs).To(Equal(opts.AgentConfig.KubeProxy.ExtraArgs))
|
|
Expect(agentConfig.KubeProxyImage).To(Equal(opts.AgentConfig.KubeProxy.OverrideImage))
|
|
Expect(agentConfig.KubeProxyExtraMounts).To(Equal(componentMapToSlice(extraMount, opts.AgentConfig.KubeProxy.ExtraMounts)))
|
|
Expect(agentConfig.KubeProxyExtraEnv).To(Equal(componentMapToSlice(extraEnv, opts.AgentConfig.KubeProxy.ExtraEnv)))
|
|
Expect(agentConfig.Token).To(Equal(opts.Token))
|
|
Expect(agentConfig.SystemDefaultRegistry).To(Equal(opts.AgentConfig.SystemDefaultRegistry))
|
|
|
|
Expect(files).To(HaveLen(3))
|
|
|
|
Expect(files[1].Path).To(Equal(agentConfig.ImageCredentialProviderConfig))
|
|
Expect(files[1].Content).To(Equal("test_credential_config"))
|
|
Expect(files[1].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[1].Permissions).To(Equal(consts.DefaultFileMode))
|
|
|
|
Expect(files[2].Path).To(Equal(agentConfig.ResolvConf))
|
|
Expect(files[2].Content).To(Equal("test_resolv_conf"))
|
|
Expect(files[2].Owner).To(Equal(consts.DefaultFileOwner))
|
|
Expect(files[2].Permissions).To(Equal(consts.DefaultFileMode))
|
|
})
|
|
})
|
|
|
|
var _ = Describe("componentMapToSlice", func() {
|
|
It("should convert a single key-value pair map to a slice with '=' separator for extraEnv", func() {
|
|
input := map[string]string{"FOO": "BAR"}
|
|
expected := []string{"FOO=BAR"}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should convert a single key-value pair map to a slice with ':' separator for extraMount", func() {
|
|
input := map[string]string{"FOO": "BAR"}
|
|
expected := []string{"FOO:BAR"}
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should handle multiple key-value pairs with '=' separator for extraEnv", func() {
|
|
input := map[string]string{"FOO": "BAR", "HELLO": "WORLD"}
|
|
result := componentMapToSlice(extraEnv, input)
|
|
Expect(result).To(ContainElements("FOO=BAR", "HELLO=WORLD"))
|
|
Expect(len(result)).To(Equal(2))
|
|
})
|
|
|
|
It("should handle multiple key-value pairs with ':' separator for extraMount", func() {
|
|
input := map[string]string{"FOO": "BAR", "HELLO": "WORLD"}
|
|
result := componentMapToSlice(extraMount, input)
|
|
Expect(result).To(ContainElements("FOO:BAR", "HELLO:WORLD"))
|
|
Expect(len(result)).To(Equal(2))
|
|
})
|
|
|
|
It("should return an empty slice for an empty map", func() {
|
|
input := map[string]string{}
|
|
expected := []string{}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should handle maps with empty values for extraEnv", func() {
|
|
input := map[string]string{"FOO": ""}
|
|
expected := []string{"FOO="}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should handle maps with empty values for extraMount", func() {
|
|
input := map[string]string{"FOO": ""}
|
|
expected := []string{"FOO:"}
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys for extraEnv", func() {
|
|
input := map[string]string{"": "BAR", "FOO": "BAR"}
|
|
expected := []string{"FOO=BAR"}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys for extraMount", func() {
|
|
input := map[string]string{"": "BAR", "FOO": "BAR"}
|
|
expected := []string{"FOO:BAR"}
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys and values for extraEnv", func() {
|
|
input := map[string]string{"": "", "FOO": "BAR"}
|
|
expected := []string{"FOO=BAR"}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys and values for extraMount", func() {
|
|
input := map[string]string{"": "", "FOO": "BAR"}
|
|
expected := []string{"FOO:BAR"}
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys even if values are non-empty for extraEnv", func() {
|
|
input := map[string]string{"": "NON_EMPTY", "FOO": "BAR"}
|
|
expected := []string{"FOO=BAR"}
|
|
Expect(componentMapToSlice(extraEnv, input)).To(Equal(expected))
|
|
})
|
|
|
|
It("should skip entries with empty keys even if values are non-empty for extraMount", func() {
|
|
input := map[string]string{"": "NON_EMPTY", "FOO": "BAR"}
|
|
expected := []string{"FOO:BAR"}
|
|
Expect(componentMapToSlice(extraMount, input)).To(Equal(expected))
|
|
})
|
|
})
|