Skip to content

Commit ea233c0

Browse files
authored
Merge pull request #264 from aramase/same-ns-and-unit-tests
fix: use namespace for spc lookup + unit tests
2 parents b5a3286 + 86e95c3 commit ea233c0

File tree

12 files changed

+555
-139
lines changed

12 files changed

+555
-139
lines changed

cmd/secrets-store-csi-driver/main.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import (
2424
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
2525

2626
ctrl "sigs.k8s.io/controller-runtime"
27+
"sigs.k8s.io/controller-runtime/pkg/client"
28+
"sigs.k8s.io/controller-runtime/pkg/client/config"
2729

2830
"sigs.k8s.io/secrets-store-csi-driver/apis/v1alpha1"
2931
"sigs.k8s.io/secrets-store-csi-driver/controllers"
@@ -96,5 +98,13 @@ func main() {
9698

9799
func handle() {
98100
driver := secretsstore.GetDriver()
99-
driver.Run(*driverName, *nodeID, *endpoint, *providerVolumePath, *minProviderVersion)
101+
cfg, err := config.GetConfig()
102+
if err != nil {
103+
log.Fatalf("failed to initialize driver, error getting config: %+v", err)
104+
}
105+
c, err := client.New(cfg, client.Options{Scheme: scheme, Mapper: nil})
106+
if err != nil {
107+
log.Fatalf("failed to initialize driver, error creating client: %+v", err)
108+
}
109+
driver.Run(*driverName, *nodeID, *endpoint, *providerVolumePath, *minProviderVersion, c)
100110
}

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
255255
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
256256
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
257257
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
258+
github.com/kubernetes-csi/csi-lib-utils v0.6.1 h1:+AZ58SRSRWh2vmMoWAAGcv7x6fIyBMpyCXAgIc9kT28=
259+
github.com/kubernetes-csi/csi-lib-utils v0.6.1/go.mod h1:GVmlUmxZ+SUjVLXicRFjqWUUvWez0g0Y78zNV9t7KfQ=
258260
github.com/kubernetes-csi/csi-test v1.1.0 h1:a7CfGqhGDs0h7AZt1f6LTIUzBazcRf6eBdTUBXB4xE4=
259261
github.com/kubernetes-csi/csi-test v1.1.0/go.mod h1:YxJ4UiuPWIhMBkxUKY5c267DyA0uDZ/MtAimhx/2TA0=
260262
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=

pkg/secrets-store/nodeserver.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"github.com/container-storage-interface/spec/lib/go/csi"
2828

29+
"sigs.k8s.io/controller-runtime/pkg/client"
2930
csicommon "sigs.k8s.io/secrets-store-csi-driver/pkg/csi-common"
3031
version "sigs.k8s.io/secrets-store-csi-driver/pkg/version"
3132

@@ -44,6 +45,7 @@ type nodeServer struct {
4445
mounter mount.Interface
4546
reporter StatsReporter
4647
nodeID string
48+
client client.Client
4749
}
4850

4951
const (
@@ -115,6 +117,9 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
115117

116118
secretProviderClass := attrib[secretProviderClassField]
117119
providerName = attrib["providerName"]
120+
podName = attrib[csipodname]
121+
podNamespace = attrib[csipodnamespace]
122+
podUID = attrib[csipoduid]
118123

119124
if isMockProvider(providerName) {
120125
// mock provider is used only for running sanity tests against the driver
@@ -131,27 +136,24 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
131136
return nil, fmt.Errorf("secretProviderClass is not set")
132137
}
133138

134-
item, err := getSecretProviderItem(ctx, secretProviderClass, podNamespace)
139+
spc, err := getSecretProviderItem(ctx, ns.client, secretProviderClass, podNamespace)
135140
if err != nil {
136141
errorReason = SecretProviderClassNotFound
137142
return nil, err
138143
}
139-
provider, err := getStringFromObjectSpec(item.Object, providerField)
144+
provider, err := getProviderFromSPC(spc)
140145
if err != nil {
141146
return nil, err
142147
}
143148
providerName = provider
144-
parameters, err = getMapFromObjectSpec(item.Object, parametersField)
149+
parameters, err = getParametersFromSPC(spc)
145150
if err != nil {
146151
return nil, err
147152
}
148153
parameters[csipodname] = attrib[csipodname]
149154
parameters[csipodnamespace] = attrib[csipodnamespace]
150155
parameters[csipoduid] = attrib[csipoduid]
151156
parameters[csipodsa] = attrib[csipodsa]
152-
podName = parameters[csipodname]
153-
podNamespace = parameters[csipodnamespace]
154-
podUID = parameters[csipoduid]
155157

156158
// ensure it's read-only
157159
if !req.GetReadonly() {
@@ -160,29 +162,29 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
160162
// get provider volume path
161163
providerVolumePath := ns.providerVolumePath
162164
if providerVolumePath == "" {
163-
return nil, fmt.Errorf("Providers volume path not found. Set PROVIDERS_VOLUME_PATH for pod: %s, ns: %s", podUID, podNamespace)
165+
return nil, fmt.Errorf("Providers volume path not found. Set PROVIDERS_VOLUME_PATH for pod: %s/%s", podNamespace, podName)
164166
}
165167

166168
providerBinary := ns.getProviderPath(runtime.GOOS, providerName)
167169
if _, err := os.Stat(providerBinary); err != nil {
168170
errorReason = ProviderBinaryNotFound
169-
log.Errorf("failed to find provider %s, err: %v for pod: %s, ns: %s", providerName, err, podUID, podNamespace)
171+
log.Errorf("failed to find provider %s, err: %v for pod: %s/%s", providerName, err, podNamespace, podName)
170172
return nil, err
171173
}
172174

173175
parametersStr, err := json.Marshal(parameters)
174176
if err != nil {
175-
log.Errorf("failed to marshal parameters, err: %v for pod: %s, ns: %s", err, podUID, podNamespace)
177+
log.Errorf("failed to marshal parameters, err: %v for pod: %s/%s", err, podNamespace, podName)
176178
return nil, err
177179
}
178180
secretStr, err := json.Marshal(secrets)
179181
if err != nil {
180-
log.Errorf("failed to marshal secrets, err: %v for pod: %s, ns: %s", err, podUID, podNamespace)
182+
log.Errorf("failed to marshal secrets, err: %v for pod: %s/%s", err, podNamespace, podName)
181183
return nil, err
182184
}
183185
permissionStr, err := json.Marshal(permission)
184186
if err != nil {
185-
log.Errorf("failed to marshal file permission, err: %v for pod: %s, ns: %s", err, podUID, podNamespace)
187+
log.Errorf("failed to marshal file permission, err: %v for pod: %s/%s", err, podNamespace, podName)
186188
return nil, err
187189
}
188190

@@ -193,12 +195,12 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
193195
err = ns.mounter.Mount("tmpfs", targetPath, "tmpfs", []string{})
194196
if err != nil {
195197
errorReason = FailedToMount
196-
log.Errorf("mount err: %v for pod: %s, ns: %s", err, podUID, podNamespace)
198+
log.Errorf("mount err: %v for pod: %s/%s", err, podNamespace, podName)
197199
return nil, err
198200
}
199201
mounted = true
200202

201-
log.Debugf("Calling provider: %s for pod: %s, ns: %s", providerName, podUID, podNamespace)
203+
log.Debugf("Calling provider: %s for pod: %s/%s", providerName, podNamespace, podName)
202204

203205
// check if minimum compatible provider version with current driver version is set
204206
// if minimum version is not provided, skip check
@@ -243,12 +245,12 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
243245
log.Infof(string(stdout.String()))
244246
if err != nil {
245247
errorReason = ProviderError
246-
log.Errorf("error invoking provider, err: %v, output: %v for pod: %s, ns: %s", err, stderr.String(), podUID, podNamespace)
247-
return nil, fmt.Errorf("error mounting secret %v for pod: %s, ns: %s", stderr.String(), podUID, podNamespace)
248+
log.Errorf("error invoking provider, err: %v, output: %v for pod: %s/%s", err, stderr.String(), podNamespace, podName)
249+
return nil, fmt.Errorf("error mounting secret %v for pod: %s/%s", stderr.String(), podNamespace, podName)
248250
}
249251
// create the secret provider class pod status object
250-
if err = createSecretProviderClassPodStatus(ctx, podName, podNamespace, podUID, secretProviderClass, targetPath, ns.nodeID, true); err != nil {
251-
return nil, fmt.Errorf("failed to create secret provider class pod status, err: %v", err)
252+
if err = createSecretProviderClassPodStatus(ctx, ns.client, podName, podNamespace, podUID, secretProviderClass, targetPath, ns.nodeID, true); err != nil {
253+
return nil, fmt.Errorf("failed to create secret provider class pod status for pod %s/%s, err: %v", podNamespace, podName, err)
252254
}
253255

254256
return &csi.NodePublishVolumeResponse{}, nil

0 commit comments

Comments
 (0)