Skip to content

Commit ce717bc

Browse files
fix(api): Ensure a cred-type is set when creating a secret via the API (#5639)
1 parent b3297ac commit ce717bc

2 files changed

Lines changed: 59 additions & 0 deletions

File tree

‎pkg/server/create_cluster_secret_v1alpha1.go‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1111

1212
svcv1alpha1 "github.com/akuity/kargo/api/service/v1alpha1"
13+
kargoapi "github.com/akuity/kargo/api/v1alpha1"
1314
)
1415

1516
type clusterSecret struct {
@@ -40,6 +41,7 @@ func (s *server) CreateClusterSecret(
4041
}
4142

4243
secret := s.clusterSecretToK8sSecret(clsSecret)
44+
ensureCredentialTypeLabel(secret)
4345
if err := s.client.Create(ctx, secret); err != nil {
4446
return nil, fmt.Errorf("create secret: %w", err)
4547
}
@@ -80,3 +82,12 @@ func (s *server) clusterSecretToK8sSecret(clsSecret clusterSecret) *corev1.Secre
8082

8183
return secret
8284
}
85+
86+
func ensureCredentialTypeLabel(secret *corev1.Secret) {
87+
if secret.Labels == nil {
88+
secret.Labels = map[string]string{}
89+
}
90+
if secret.Labels[kargoapi.LabelKeyCredentialType] == "" {
91+
secret.Labels[kargoapi.LabelKeyCredentialType] = kargoapi.LabelValueCredentialTypeGeneric
92+
}
93+
}

‎pkg/server/create_cluster_secret_v1alpha1_test.go‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import (
88
"github.com/stretchr/testify/assert"
99
"github.com/stretchr/testify/require"
1010
corev1 "k8s.io/api/core/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1112
"k8s.io/apimachinery/pkg/runtime"
1213
"k8s.io/apimachinery/pkg/types"
1314
"k8s.io/client-go/rest"
1415
"sigs.k8s.io/controller-runtime/pkg/client"
1516
"sigs.k8s.io/controller-runtime/pkg/client/fake"
1617

1718
svcv1alpha1 "github.com/akuity/kargo/api/service/v1alpha1"
19+
kargoapi "github.com/akuity/kargo/api/v1alpha1"
1820
"github.com/akuity/kargo/pkg/server/config"
1921
"github.com/akuity/kargo/pkg/server/kubernetes"
2022
)
@@ -77,6 +79,7 @@ func TestCreateClusterSecret(t *testing.T) {
7779
secret := resp.Msg.GetSecret()
7880
assert.Equal(t, "kargo-cluster-secrts", secret.Namespace)
7981
assert.Equal(t, "secret-1", secret.Name)
82+
assert.Equal(t, kargoapi.LabelValueCredentialTypeGeneric, secret.Labels[kargoapi.LabelKeyCredentialType])
8083
assert.Equal(t, redacted, secret.StringData["foo"])
8184
assert.Equal(t, redacted, secret.StringData["baz"])
8285

@@ -94,6 +97,11 @@ func TestCreateClusterSecret(t *testing.T) {
9497
data := k8sSecret.Data
9598
assert.Equal(t, "bar", string(data["foo"]))
9699
assert.Equal(t, "bax", string(data["baz"]))
100+
assert.Equal(
101+
t,
102+
kargoapi.LabelValueCredentialTypeGeneric,
103+
k8sSecret.Labels[kargoapi.LabelKeyCredentialType],
104+
)
97105
}
98106

99107
func TestValidateSecrets(t *testing.T) {
@@ -118,3 +126,43 @@ func TestValidateSecrets(t *testing.T) {
118126
})
119127
require.NoError(t, err)
120128
}
129+
130+
func TestEnsureCredentialTypeLabel(t *testing.T) {
131+
t.Run("sets label when labels nil", func(t *testing.T) {
132+
secret := &corev1.Secret{}
133+
ensureCredentialTypeLabel(secret)
134+
require.Equal(
135+
t,
136+
kargoapi.LabelValueCredentialTypeGeneric,
137+
secret.Labels[kargoapi.LabelKeyCredentialType],
138+
)
139+
})
140+
141+
t.Run("sets label when label value empty", func(t *testing.T) {
142+
secret := &corev1.Secret{
143+
ObjectMeta: metav1.ObjectMeta{
144+
Labels: map[string]string{
145+
kargoapi.LabelKeyCredentialType: "",
146+
},
147+
},
148+
}
149+
ensureCredentialTypeLabel(secret)
150+
require.Equal(
151+
t,
152+
kargoapi.LabelValueCredentialTypeGeneric,
153+
secret.Labels[kargoapi.LabelKeyCredentialType],
154+
)
155+
})
156+
157+
t.Run("does not overwrite non-empty label", func(t *testing.T) {
158+
secret := &corev1.Secret{
159+
ObjectMeta: metav1.ObjectMeta{
160+
Labels: map[string]string{
161+
kargoapi.LabelKeyCredentialType: "repository",
162+
},
163+
},
164+
}
165+
ensureCredentialTypeLabel(secret)
166+
require.Equal(t, "repository", secret.Labels[kargoapi.LabelKeyCredentialType])
167+
})
168+
}

0 commit comments

Comments
 (0)