Skip to content

Commit c0e6b17

Browse files
committed
parse resource name before removing deleted secret
Although unlinking deleted secrets from a serviceaccount is currently supported, `oc secret unlink` failed to unlink a deleted secret if its name was specified as secrets/deleted-secret-name. This patch parses each secret's name, removing the <secrets/> segment before appending it to a string set of removed secret names.
1 parent 337ee95 commit c0e6b17

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

pkg/oc/cli/secrets/options.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"io/ioutil"
88
"os"
9+
"strings"
910

1011
kerrors "k8s.io/apimachinery/pkg/api/errors"
1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -98,11 +99,26 @@ func (o SecretOptions) GetServiceAccount() (*kapi.ServiceAccount, error) {
9899
func (o SecretOptions) GetSecretNames(secrets []*kapi.Secret) sets.String {
99100
names := sets.String{}
100101
for _, secret := range secrets {
101-
names.Insert(secret.Name)
102+
names.Insert(parseSecretName(secret.Name))
102103
}
103104
return names
104105
}
105106

107+
// parseSecretName receives a resource name as either
108+
// <resource type> / <name> or <name> and returns only the resource <name>.
109+
func parseSecretName(name string) string {
110+
segs := strings.Split(name, "/")
111+
if len(segs) < 2 {
112+
return name
113+
}
114+
115+
if segs[0] == "secret" || segs[0] == "secrets" {
116+
return segs[1]
117+
}
118+
119+
return name
120+
}
121+
106122
// GetMountSecretNames Get a list of the names of the mount secrets associated
107123
// with a service account
108124
func (o SecretOptions) GetMountSecretNames(serviceaccount *kapi.ServiceAccount) sets.String {

test/cmd/secrets.sh

+14
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ os::cmd::expect_success 'oc secrets add deployer basicauth sshauth --for=pull'
8484
# make sure we can add as as pull secret and mount secret at once
8585
os::cmd::expect_success 'oc secrets add deployer basicauth sshauth --for=pull,mount'
8686

87+
# attach secrets to service account
88+
# test that those secrets can be unlinked
89+
# after they have been deleted.
90+
os::cmd::expect_success 'oc create secret generic deleted-secret'
91+
os::cmd::expect_success 'oc secrets link deployer deleted-secret'
92+
# confirm our soon-to-be-deleted secret has been linked
93+
os::cmd::expect_success_and_text "oc get serviceaccount deployer -o jsonpath='{.secrets[?(@.name==\"deleted-secret\")]}'" 'deleted\-secret'
94+
os::cmd::expect_success 'oc get serviceaccounts/deployer -o yaml |grep -q deleted-secret'
95+
# delete "deleted-secret" and attempt to unlink from service account
96+
os::cmd::expect_success 'oc delete secret deleted-secret'
97+
os::cmd::expect_failure_and_text 'oc secrets unlink deployer secrets/deleted-secret' 'Unlinked deleted secrets'
98+
# ensure already-deleted secret has been unlinked
99+
os::cmd::expect_success_and_not_text "oc get serviceaccount deployer -o jsonpath='{.secrets[?(@.name==\"deleted-secret\")]}'" 'deleted\-secret'
100+
87101
# attach secrets to service account
88102
# single secret with prefix
89103
os::cmd::expect_success 'oc secrets link deployer basicauth'

0 commit comments

Comments
 (0)