Skip to content

Commit 1c04b45

Browse files
authored
Merge pull request #562 from andyzhangx/allowEmptyCloudConfig
feat: add allowEmptyCloudConfig config in chart
2 parents a894a60 + 427d361 commit 1c04b45

File tree

9 files changed

+68
-37
lines changed

9 files changed

+68
-37
lines changed

charts/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ The following table lists the configurable parameters of the latest Azure Blob S
9090
| `controller.name` | name of driver deployment | `csi-blob-controller`
9191
| `controller.cloudConfigSecretName` | cloud config secret name of controller driver | `azure-cloud-provider`
9292
| `controller.cloudConfigSecretNamespace` | cloud config secret namespace of controller driver | `kube-system`
93+
| `controller.allowEmptyCloudConfig` | Whether allow running controller driver without cloud config | `true`
9394
| `controller.replicas` | the replicas of csi-blob-controller | `2` |
9495
| `controller.hostNetwork` | `hostNetwork` setting on controller driver(could be disabled if controller does not depend on MSI setting) | `true` | `true`, `false`
9596
| `controller.metricsPort` | metrics port of csi-blob-controller | `29634` |
@@ -118,6 +119,7 @@ The following table lists the configurable parameters of the latest Azure Blob S
118119
| `node.name` | name of driver daemonset | `csi-blob-node`
119120
| `node.cloudConfigSecretName` | cloud config secret name of node driver | `azure-cloud-provider`
120121
| `node.cloudConfigSecretNamespace` | cloud config secret namespace of node driver | `kube-system`
122+
| `node.allowEmptyCloudConfig` | Whether allow running node driver without cloud config | `true`
121123
| `node.maxUnavailable` | `maxUnavailable` value of driver node daemonset | `1`
122124
| `node.metricsPort` | metrics port of csi-blob-node | `29635` |
123125
| `node.livenessProbe.healthPort ` | health check port for liveness probe | `29633` |
25 Bytes
Binary file not shown.

charts/latest/blob-csi-driver/templates/csi-blob-controller.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ spec:
9999
- "--user-agent-suffix={{ .Values.driver.userAgentSuffix }}"
100100
- "--cloud-config-secret-name={{ .Values.controller.cloudConfigSecretName }}"
101101
- "--cloud-config-secret-namespace={{ .Values.controller.cloudConfigSecretNamespace }}"
102+
- "--allow-empty-cloud-config={{ .Values.controller.allowEmptyCloudConfig }}"
102103
ports:
103104
- containerPort: {{ .Values.controller.livenessProbe.healthPort }}
104105
name: healthz

charts/latest/blob-csi-driver/templates/csi-blob-node.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ spec:
121121
- "--cloud-config-secret-namespace={{ .Values.node.cloudConfigSecretNamespace }}"
122122
- "--custom-user-agent={{ .Values.driver.customUserAgent }}"
123123
- "--user-agent-suffix={{ .Values.driver.userAgentSuffix }}"
124+
- "--allow-empty-cloud-config={{ .Values.node.allowEmptyCloudConfig }}"
124125
ports:
125126
- containerPort: {{ .Values.node.livenessProbe.healthPort }}
126127
name: healthz

charts/latest/blob-csi-driver/values.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ controller:
4343
name: csi-blob-controller
4444
cloudConfigSecretName: azure-cloud-provider
4545
cloudConfigSecretNamespace: kube-system
46+
allowEmptyCloudConfig: true
4647
hostNetwork: true # this setting could be disabled if controller does not depend on MSI setting
4748
metricsPort: 29634
4849
livenessProbe:
@@ -93,6 +94,7 @@ node:
9394
name: csi-blob-node
9495
cloudConfigSecretName: azure-cloud-provider
9596
cloudConfigSecretNamespace: kube-system
97+
allowEmptyCloudConfig: true
9698
maxUnavailable: 1
9799
metricsPort: 29635
98100
livenessProbe:

pkg/blob/azure.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func IsAzureStackCloud(cloud *azure.Cloud) bool {
5050
}
5151

5252
// getCloudProvider get Azure Cloud Provider
53-
func getCloudProvider(kubeconfig, nodeID, secretName, secretNamespace, userAgent string) (*azure.Cloud, error) {
53+
func getCloudProvider(kubeconfig, nodeID, secretName, secretNamespace, userAgent string, allowEmptyCloudConfig bool) (*azure.Cloud, error) {
5454
az := &azure.Cloud{
5555
InitSecretConfig: azure.InitSecretConfig{
5656
SecretName: secretName,
@@ -108,7 +108,11 @@ func getCloudProvider(kubeconfig, nodeID, secretName, secretNamespace, userAgent
108108
}
109109

110110
if config == nil {
111-
klog.V(2).Infof("no cloud config provided, error: %v, driver will run without cloud config", err)
111+
if allowEmptyCloudConfig {
112+
klog.V(2).Infof("no cloud config provided, error: %v, driver will run without cloud config", err)
113+
} else {
114+
return az, fmt.Errorf("no cloud config provided, error: %v", err)
115+
}
112116
} else {
113117
config.UserAgent = userAgent
114118
if err = az.InitializeCloudFromConfig(config, fromSecret, false); err != nil {

pkg/blob/azure_test.go

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"io/ioutil"
2323
"os"
2424
"reflect"
25+
"strings"
2526
"testing"
2627

2728
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-02-01/network"
@@ -79,49 +80,65 @@ users:
7980
}()
8081

8182
tests := []struct {
82-
desc string
83-
kubeconfig string
84-
nodeID string
85-
userAgent string
86-
expectedErr error
83+
desc string
84+
createFakeCredFile bool
85+
createFakeKubeConfig bool
86+
kubeconfig string
87+
nodeID string
88+
userAgent string
89+
allowEmptyCloudConfig bool
90+
expectedErr error
8791
}{
8892
{
89-
desc: "[failure] out of cluster, no kubeconfig, no credential file",
90-
kubeconfig: "",
91-
nodeID: "",
92-
expectedErr: nil,
93+
desc: "out of cluster, no kubeconfig, no credential file",
94+
kubeconfig: "",
95+
nodeID: "",
96+
allowEmptyCloudConfig: true,
97+
expectedErr: nil,
9398
},
9499
{
95-
desc: "[failure] out of cluster & in cluster, specify a non-exist kubeconfig, no credential file",
96-
kubeconfig: "/tmp/non-exist.json",
97-
nodeID: "",
98-
expectedErr: nil,
100+
desc: "[failure][disallowEmptyCloudConfig] out of cluster, no kubeconfig, no credential file",
101+
kubeconfig: "",
102+
nodeID: "",
103+
allowEmptyCloudConfig: false,
104+
expectedErr: nil,
99105
},
100106
{
101-
desc: "[failure] out of cluster & in cluster, specify a empty kubeconfig, no credential file",
102-
kubeconfig: emptyKubeConfig,
103-
nodeID: "",
104-
expectedErr: fmt.Errorf("failed to get KubeClient: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable"),
107+
desc: "[failure] out of cluster & in cluster, specify a non-exist kubeconfig, no credential file",
108+
kubeconfig: "/tmp/non-exist.json",
109+
nodeID: "",
110+
allowEmptyCloudConfig: true,
111+
expectedErr: nil,
105112
},
106113
{
107-
desc: "[failure] out of cluster & in cluster, specify a fake kubeconfig, no credential file",
108-
kubeconfig: fakeKubeConfig,
109-
nodeID: "",
110-
expectedErr: nil,
114+
desc: "[failure] out of cluster & in cluster, specify a empty kubeconfig, no credential file",
115+
kubeconfig: emptyKubeConfig,
116+
nodeID: "",
117+
allowEmptyCloudConfig: true,
118+
expectedErr: fmt.Errorf("failed to get KubeClient: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable"),
111119
},
112120
{
113-
desc: "[success] out of cluster & in cluster, no kubeconfig, a fake credential file",
114-
kubeconfig: "",
115-
nodeID: "",
116-
userAgent: "useragent",
117-
expectedErr: nil,
121+
desc: "[failure] out of cluster & in cluster, specify a fake kubeconfig, no credential file",
122+
createFakeKubeConfig: true,
123+
kubeconfig: fakeKubeConfig,
124+
nodeID: "",
125+
allowEmptyCloudConfig: true,
126+
expectedErr: nil,
127+
},
128+
{
129+
desc: "[success] out of cluster & in cluster, no kubeconfig, a fake credential file",
130+
createFakeCredFile: true,
131+
kubeconfig: "",
132+
nodeID: "",
133+
userAgent: "useragent",
134+
allowEmptyCloudConfig: true,
135+
expectedErr: nil,
118136
},
119137
}
120138

121139
for _, test := range tests {
122-
if test.desc == "[failure] out of cluster & in cluster, specify a fake kubeconfig, no credential file" {
123-
err := createTestFile(fakeKubeConfig)
124-
if err != nil {
140+
if test.createFakeKubeConfig {
141+
if err := createTestFile(fakeKubeConfig); err != nil {
125142
t.Error(err)
126143
}
127144
defer func() {
@@ -134,9 +151,8 @@ users:
134151
t.Error(err)
135152
}
136153
}
137-
if test.desc == "[success] out of cluster & in cluster, no kubeconfig, a fake credential file" {
138-
err := createTestFile(fakeCredFile)
139-
if err != nil {
154+
if test.createFakeCredFile {
155+
if err := createTestFile(fakeCredFile); err != nil {
140156
t.Error(err)
141157
}
142158
defer func() {
@@ -153,8 +169,8 @@ users:
153169
}
154170
os.Setenv(DefaultAzureCredentialFileEnv, fakeCredFile)
155171
}
156-
cloud, err := getCloudProvider(test.kubeconfig, test.nodeID, "", "", test.userAgent)
157-
if !reflect.DeepEqual(err, test.expectedErr) {
172+
cloud, err := getCloudProvider(test.kubeconfig, test.nodeID, "", "", test.userAgent, test.allowEmptyCloudConfig)
173+
if !reflect.DeepEqual(err, test.expectedErr) && test.expectedErr != nil && !strings.Contains(err.Error(), test.expectedErr.Error()) {
158174
t.Errorf("desc: %s,\n input: %q, GetCloudProvider err: %v, expectedErr: %v", test.desc, test.kubeconfig, err, test.expectedErr)
159175
}
160176
if cloud == nil {

pkg/blob/blob.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ type DriverOptions struct {
118118
EnableBlobfuseProxy bool
119119
BlobfuseProxyConnTimout int
120120
EnableBlobMockMount bool
121+
AllowEmptyCloudConfig bool
121122
}
122123

123124
// Driver implements all interfaces of CSI drivers
@@ -132,6 +133,7 @@ type Driver struct {
132133
// enableBlobMockMount is only for testing, DO NOT set as true in non-testing scenario
133134
enableBlobMockMount bool
134135
enableBlobfuseProxy bool
136+
allowEmptyCloudConfig bool
135137
blobfuseProxyConnTimout int
136138
mounter *mount.SafeFormatAndMount
137139
volLockMap *util.LockMap
@@ -161,6 +163,7 @@ func NewDriver(options *DriverOptions) *Driver {
161163
enableBlobfuseProxy: options.EnableBlobfuseProxy,
162164
blobfuseProxyConnTimout: options.BlobfuseProxyConnTimout,
163165
enableBlobMockMount: options.EnableBlobMockMount,
166+
allowEmptyCloudConfig: options.AllowEmptyCloudConfig,
164167
}
165168
d.Name = options.DriverName
166169
d.Version = driverVersion
@@ -184,7 +187,7 @@ func (d *Driver) Run(endpoint, kubeconfig string, testBool bool) {
184187

185188
userAgent := GetUserAgent(d.Name, d.customUserAgent, d.userAgentSuffix)
186189
klog.V(2).Infof("driver userAgent: %s", userAgent)
187-
d.cloud, err = getCloudProvider(kubeconfig, d.NodeID, d.cloudConfigSecretName, d.cloudConfigSecretNamespace, userAgent)
190+
d.cloud, err = getCloudProvider(kubeconfig, d.NodeID, d.cloudConfigSecretName, d.cloudConfigSecretNamespace, userAgent, d.allowEmptyCloudConfig)
188191
if err != nil {
189192
klog.Fatalf("failed to get Azure Cloud Provider, error: %v", err)
190193
}

pkg/blobplugin/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ var (
5050
cloudConfigSecretNamespace = flag.String("cloud-config-secret-namespace", "kube-system", "secret namespace of cloud config")
5151
customUserAgent = flag.String("custom-user-agent", "", "custom userAgent")
5252
userAgentSuffix = flag.String("user-agent-suffix", "", "userAgent suffix")
53+
allowEmptyCloudConfig = flag.Bool("allow-empty-cloud-config", true, "Whether allow running driver without cloud config")
5354
)
5455

5556
func main() {
@@ -81,6 +82,7 @@ func handle() {
8182
EnableBlobMockMount: *enableBlobMockMount,
8283
CustomUserAgent: *customUserAgent,
8384
UserAgentSuffix: *userAgentSuffix,
85+
AllowEmptyCloudConfig: *allowEmptyCloudConfig,
8486
}
8587
driver := blob.NewDriver(&driverOptions)
8688
if driver == nil {

0 commit comments

Comments
 (0)