Skip to content

Commit ac02684

Browse files
authored
Merge pull request #273 from helayoty/helayoty/feat-217-add-label
feat: add `metadata.label` to synced secret
2 parents 87b7c86 + 1dd9ed5 commit ac02684

10 files changed

+50
-10
lines changed

apis/v1alpha1/secretproviderclass_types.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ type SecretObject struct {
3232
// name of the K8s secret object
3333
SecretName string `json:"secretName,omitempty"`
3434
// type of K8s secret object
35-
Type string `json:"type,omitempty"`
36-
Data []*SecretObjectData `json:"data,omitempty"`
35+
Type string `json:"type,omitempty"`
36+
// labels of K8s secret object
37+
Labels map[string]string `json:"labels,omitempty"`
38+
Data []*SecretObjectData `json:"data,omitempty"`
3739
}
3840

3941
// SecretProviderClassSpec defines the desired state of SecretProviderClass

config/crd/bases/secrets-store.csi.x-k8s.io_secretproviderclasses.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ spec:
6262
type: string
6363
type: object
6464
type: array
65+
labels:
66+
additionalProperties:
67+
type: string
68+
description: labels of K8s secret object
69+
type: object
6570
secretName:
6671
description: name of the K8s secret object
6772
type: string

controllers/secretproviderclasspodstatus_controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ func (r *SecretProviderClassPodStatusReconciler) Reconcile(req ctrl.Request) (ct
175175
}
176176

177177
createFn := func() (bool, error) {
178-
if err := r.createK8sSecret(ctx, secretObj.SecretName, req.Namespace, datamap, secretType); err != nil {
178+
if err := r.createK8sSecret(ctx, secretObj.SecretName, req.Namespace, datamap, secretObj.Labels, secretType); err != nil {
179179
logger.Errorf("failed createK8sSecret, err: %v for secret: %s", err, secretObj.SecretName)
180180
return false, nil
181181
}
@@ -225,11 +225,12 @@ func (r *SecretProviderClassPodStatusReconciler) SetupWithManager(mgr ctrl.Manag
225225

226226
// createK8sSecret creates K8s secret with data from mounted files
227227
// If a secret with the same name already exists in the namespace of the pod, the error is nil.
228-
func (r *SecretProviderClassPodStatusReconciler) createK8sSecret(ctx context.Context, name, namespace string, datamap map[string][]byte, secretType corev1.SecretType) error {
228+
func (r *SecretProviderClassPodStatusReconciler) createK8sSecret(ctx context.Context, name, namespace string, datamap map[string][]byte, labelsmap map[string]string, secretType corev1.SecretType) error {
229229
secret := &corev1.Secret{
230230
ObjectMeta: metav1.ObjectMeta{
231231
Namespace: namespace,
232232
Name: name,
233+
Labels: labelsmap,
233234
},
234235
Type: secretType,
235236
Data: datamap,

controllers/secretproviderclasspodstatus_controller_test.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ func setupScheme() (*runtime.Scheme, error) {
4646
return scheme, nil
4747
}
4848

49-
func newSecret(name, namespace string) *v1.Secret {
49+
func newSecret(name, namespace string, labels map[string]string) *v1.Secret {
5050
return &v1.Secret{
5151
ObjectMeta: metav1.ObjectMeta{
5252
Name: name,
5353
Namespace: namespace,
54+
Labels: labels,
5455
ResourceVersion: "73659",
5556
},
5657
}
@@ -90,8 +91,10 @@ func TestSecretExists(t *testing.T) {
9091
scheme, err := setupScheme()
9192
g.Expect(err).NotTo(HaveOccurred())
9293

94+
labels := map[string]string{"environment": "test"}
95+
9396
initObjects := []runtime.Object{
94-
newSecret("my-secret", "default"),
97+
newSecret("my-secret", "default", labels),
9598
}
9699

97100
client := fake.NewFakeClientWithScheme(scheme, initObjects...)
@@ -114,8 +117,10 @@ func TestPatchSecretWithOwnerRef(t *testing.T) {
114117

115118
spcPodStatus := newSecretProviderClassPodStatus("my-spcps", "default", "node1")
116119

120+
labels := map[string]string{"environment": "test"}
121+
117122
initObjects := []runtime.Object{
118-
newSecret("my-secret", "default"),
123+
newSecret("my-secret", "default", labels),
119124
spcPodStatus,
120125
}
121126
client := fake.NewFakeClientWithScheme(scheme, initObjects...)
@@ -136,20 +141,25 @@ func TestCreateK8sSecret(t *testing.T) {
136141
scheme, err := setupScheme()
137142
g.Expect(err).NotTo(HaveOccurred())
138143

144+
labels := map[string]string{"environment": "test"}
145+
139146
initObjects := []runtime.Object{
140-
newSecret("my-secret", "default"),
147+
newSecret("my-secret", "default", labels),
141148
}
142149
client := fake.NewFakeClientWithScheme(scheme, initObjects...)
143150
reconciler := newReconciler(client, scheme)
144151

145152
// secret already exists
146-
err = reconciler.createK8sSecret(context.TODO(), "my-secret", "default", nil, v1.SecretTypeOpaque)
153+
err = reconciler.createK8sSecret(context.TODO(), "my-secret", "default", nil, labels, v1.SecretTypeOpaque)
147154
g.Expect(err).NotTo(HaveOccurred())
148155

149-
err = reconciler.createK8sSecret(context.TODO(), "my-secret2", "default", nil, v1.SecretTypeOpaque)
156+
err = reconciler.createK8sSecret(context.TODO(), "my-secret2", "default", nil, labels, v1.SecretTypeOpaque)
150157
g.Expect(err).NotTo(HaveOccurred())
151158
secret := &v1.Secret{}
152159
err = client.Get(context.TODO(), types.NamespacedName{Name: "my-secret2", Namespace: "default"}, secret)
153160
g.Expect(err).NotTo(HaveOccurred())
161+
162+
g.Expect(secret.Labels).To(Equal(labels))
163+
154164
g.Expect(secret.Name).To(Equal("my-secret2"))
155165
}

manifest_staging/charts/secrets-store-csi-driver/templates/secrets-store.csi.x-k8s.io_secretproviderclasses.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ spec:
6262
type: string
6363
type: object
6464
type: array
65+
labels:
66+
additionalProperties:
67+
type: string
68+
description: labels of K8s secret object
69+
type: object
6570
secretName:
6671
description: name of the K8s secret object
6772
type: string

manifest_staging/deploy/secrets-store.csi.x-k8s.io_secretproviderclasses.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ spec:
6262
type: string
6363
type: object
6464
type: array
65+
labels:
66+
additionalProperties:
67+
type: string
68+
description: labels of K8s secret object
69+
type: object
6570
secretName:
6671
description: name of the K8s secret object
6772
type: string

test/bats/azure.bats

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export KEY_NAME=${KEYVAULT_KEY_NAME:-key1}
2929
export KEY_VERSION=${KEYVAULT_KEY_VERSION:-7cc095105411491b84fe1b92ebbcf01a}
3030
export KEY_VALUE_CONTAINS=${KEYVAULT_KEY_VALUE:-"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF4K2FadlhJN2FldG5DbzI3akVScgpheklaQ2QxUlBCQVZuQU1XcDhqY05TQk5MOXVuOVJrenJHOFd1SFBXUXNqQTA2RXRIOFNSNWtTNlQvaGQwMFNRCk1aODBMTlNxYkkwTzBMcWMzMHNLUjhTQ0R1cEt5dkpkb01LSVlNWHQzUlk5R2Ywam1ucHNKOE9WbDFvZlRjOTIKd1RINXYyT2I1QjZaMFd3d25MWlNiRkFnSE1uTHJtdEtwZTVNcnRGU21nZS9SL0J5ZXNscGU0M1FubnpndzhRTwpzU3ZMNnhDU21XVW9WQURLL1MxREU0NzZBREM2a2hGTjF5ZHUzbjVBcnREVGI0c0FjUHdTeXB3WGdNM3Y5WHpnClFKSkRGT0JJOXhSTW9UM2FjUWl0Z0c2RGZibUgzOWQ3VU83M0o3dUFQWUpURG1pZGhrK0ZFOG9lbjZWUG9YRy8KNXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t"}
3131
export CONTAINER_IMAGE=$CONTAINER_IMAGE
32+
export LABEL_VALUE=${LABEL_VALUE:-"test"}
3233

3334
setup() {
3435
if [[ -z "${AZURE_CLIENT_ID}" ]] || [[ -z "${AZURE_CLIENT_SECRET}" ]]; then
@@ -125,6 +126,9 @@ setup() {
125126
result=$(kubectl exec -it $POD printenv | grep SECRET_USERNAME) | awk -F"=" '{ print $2}'
126127
[[ "${result//$'\r'}" == "${SECRET_VALUE}" ]]
127128

129+
result=$(kubectl get secret foosecret -o jsonpath="{.metadata.labels.environment}")
130+
[[ "${result//$'\r'}" == "${LABEL_VALUE}" ]]
131+
128132
result=$(kubectl get secret foosecret -o json | jq '.metadata.ownerReferences | length')
129133
[[ "$result" -eq 2 ]]
130134
}

test/bats/tests/azure/azure_synck8s_v1alpha1_secretproviderclass.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ spec:
77
secretObjects: # [OPTIONAL] SecretObject defines the desired state of synced K8s secret objects
88
- secretName: foosecret
99
type: Opaque
10+
labels:
11+
environment: "test"
1012
data:
1113
- objectName: secretalias # name of the mounted content to sync. this could be the object name or object alias
1214
key: username

test/bats/tests/vault/vault_synck8s_v1alpha1_secretproviderclass.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ spec:
77
secretObjects:
88
- secretName: foosecret
99
type: Opaque
10+
labels:
11+
environment: "test"
1012
data:
1113
- objectName: foo
1214
key: pwd

test/bats/vault.bats

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ NAMESPACE=default
1010
PROVIDER_YAML=https://raw.githubusercontent.com/hashicorp/secrets-store-csi-driver-provider-vault/master/deployment/provider-vault-installer.yaml
1111

1212
export CONTAINER_IMAGE=nginx
13+
export LABEL_VALUE=${LABEL_VALUE:-"test"}
1314

1415
@test "install vault provider" {
1516
run kubectl apply -f $PROVIDER_YAML --namespace $NAMESPACE
@@ -183,6 +184,9 @@ EOF
183184
result=$(kubectl exec -it $POD -- printenv | grep SECRET_USERNAME | awk -F"=" '{ print $2 }' | tr -d '\r\n')
184185
[[ "$result" == "hello1" ]]
185186

187+
result=$(kubectl get secret foosecret -o jsonpath="{.metadata.labels.environment}")
188+
[[ "${result//$'\r'}" == "${LABEL_VALUE}" ]]
189+
186190
result=$(kubectl get secret foosecret -o json | jq '.metadata.ownerReferences | length')
187191
[[ "$result" -eq 2 ]]
188192
}

0 commit comments

Comments
 (0)