@@ -117,6 +117,23 @@ func expectedProvisionerServiceAccountName(name string) string {
117117 return fmt .Sprintf ("%s-%s%s" , name [:available ], hashSuffix , suffix )
118118}
119119
120+ func expectedProvisionerKeyName (name string ) string {
121+ const maxKeyNameLength = 128
122+ if len (name ) <= maxKeyNameLength {
123+ return name
124+ }
125+
126+ hasher := fnv .New32a ()
127+ _ , _ = hasher .Write ([]byte (name ))
128+ suffix := fmt .Sprintf ("%08x" , hasher .Sum32 ())
129+ available := maxKeyNameLength - len (suffix ) - 1
130+ if available < 1 {
131+ available = 1
132+ }
133+
134+ return fmt .Sprintf ("%s-%s" , name [:available ], suffix )
135+ }
136+
120137func reconcileProvisioner (ctx context.Context , t * testing.T , reconciler * controller.CoderProvisionerReconciler , namespacedName types.NamespacedName ) {
121138 t .Helper ()
122139
@@ -681,6 +698,7 @@ func TestCoderProvisionerReconciler_TagsDrift(t *testing.T) {
681698 bootstrapClient := & fakeBootstrapClient {
682699 provisionerKeyResponses : []coderbootstrap.EnsureProvisionerKeyResponse {
683700 {KeyName : "tags-drift-key" , Key : "initial-key-material" },
701+ {KeyName : "tags-drift-key" , Key : "" },
684702 {KeyName : "tags-drift-key" , Key : "rotated-key-material" },
685703 },
686704 }
@@ -700,8 +718,11 @@ func TestCoderProvisionerReconciler_TagsDrift(t *testing.T) {
700718
701719 reconcileProvisioner (ctx , t , reconciler , request )
702720
703- require .Equal (t , 2 , bootstrapClient .provisionerKeyCalls )
704- require .GreaterOrEqual (t , bootstrapClient .deleteKeyCalls , 1 )
721+ require .Equal (t , 3 , bootstrapClient .provisionerKeyCalls )
722+ require .Equal (t , 2 , bootstrapClient .deleteKeyCalls )
723+ require .Len (t , bootstrapClient .deleteKeyRequests , 2 )
724+ require .Equal (t , "tags-drift-key" , bootstrapClient .deleteKeyRequests [0 ].KeyName )
725+ require .Equal (t , "tags-drift-key" , bootstrapClient .deleteKeyRequests [1 ].KeyName )
705726
706727 keySecret := & corev1.Secret {}
707728 require .NoError (t , k8sClient .Get (ctx , types.NamespacedName {Name : fmt .Sprintf ("%s-provisioner-key" , provisioner .Name ), Namespace : provisioner .Namespace }, keySecret ))
@@ -917,11 +938,15 @@ func TestCoderProvisionerReconciler_LongNameTruncation(t *testing.T) {
917938 controlPlane := createTestControlPlane (ctx , t , namespace , "controlplane-longname" , "https://coder.example.com" )
918939 bootstrapSecret := createBootstrapSecret (ctx , t , namespace , "bootstrap-creds" , coderv1alpha1 .DefaultTokenSecretKey , "session-token" )
919940
920- provisionerName := strings .Repeat ("a" , 70 )
941+ provisionerName := strings .Repeat ("a" , 180 )
921942 deploymentCandidateName := fmt .Sprintf ("provisioner-%s" , provisionerName )
922943 serviceAccountCandidateName := fmt .Sprintf ("%s-provisioner" , provisionerName )
944+ keyNameCandidate := provisionerName
945+ expectedKeyName := expectedProvisionerKeyName (provisionerName )
923946 require .Greater (t , len (deploymentCandidateName ), 63 )
924947 require .Greater (t , len (serviceAccountCandidateName ), 63 )
948+ require .Greater (t , len (keyNameCandidate ), 128 )
949+ require .Len (t , expectedKeyName , 128 )
925950
926951 provisioner := & coderv1alpha1.CoderProvisioner {
927952 ObjectMeta : metav1.ObjectMeta {Name : provisionerName , Namespace : namespace },
@@ -939,7 +964,7 @@ func TestCoderProvisionerReconciler_LongNameTruncation(t *testing.T) {
939964
940965 bootstrapClient := & fakeBootstrapClient {
941966 provisionerKeyResponses : []coderbootstrap.EnsureProvisionerKeyResponse {{
942- KeyName : provisionerName ,
967+ KeyName : expectedKeyName ,
943968 Key : "provisioner-key-material" ,
944969 }},
945970 }
@@ -954,6 +979,14 @@ func TestCoderProvisionerReconciler_LongNameTruncation(t *testing.T) {
954979 require .LessOrEqual (t , len (deploymentName ), 63 )
955980 require .LessOrEqual (t , len (serviceAccountName ), 63 )
956981
982+ require .Len (t , bootstrapClient .provisionerKeyRequests , 1 )
983+ require .Equal (t , expectedKeyName , bootstrapClient .provisionerKeyRequests [0 ].KeyName )
984+
985+ reconciledProvisioner := & coderv1alpha1.CoderProvisioner {}
986+ require .NoError (t , k8sClient .Get (ctx , request , reconciledProvisioner ))
987+ require .Equal (t , expectedKeyName , reconciledProvisioner .Status .ProvisionerKeyName )
988+ require .LessOrEqual (t , len (reconciledProvisioner .Status .ProvisionerKeyName ), 128 )
989+
957990 deployment := & appsv1.Deployment {}
958991 require .NoError (t , k8sClient .Get (ctx , types.NamespacedName {Name : deploymentName , Namespace : namespace }, deployment ))
959992
0 commit comments