remove mirror secret
This commit is contained in:
parent
c36c141185
commit
4bea1ebf10
|
|
@ -137,27 +137,6 @@ func (r *AutoscalingListenerReconciler) Reconcile(ctx context.Context, req ctrl.
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a mirror secret in the same namespace as the AutoscalingListener
|
|
||||||
mirrorSecret := new(corev1.Secret)
|
|
||||||
if err := r.Get(ctx, types.NamespacedName{Namespace: autoscalingListener.Namespace, Name: scaleSetListenerSecretMirrorName(autoscalingListener)}, mirrorSecret); err != nil {
|
|
||||||
if !kerrors.IsNotFound(err) {
|
|
||||||
log.Error(err, "Unable to get listener secret mirror", "namespace", autoscalingListener.Namespace, "name", scaleSetListenerSecretMirrorName(autoscalingListener))
|
|
||||||
return ctrl.Result{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a mirror secret for the listener pod in the Controller namespace for listener pod to use
|
|
||||||
log.Info("Creating a mirror listener secret for the listener pod")
|
|
||||||
return r.createSecretsForListener(ctx, autoscalingListener, secret, log)
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure the mirror secret is up to date
|
|
||||||
mirrorSecretDataHash := mirrorSecret.Labels["secret-data-hash"]
|
|
||||||
secretDataHash := hash.ComputeTemplateHash(secret.Data)
|
|
||||||
if mirrorSecretDataHash != secretDataHash {
|
|
||||||
log.Info("Updating mirror listener secret for the listener pod", "mirrorSecretDataHash", mirrorSecretDataHash, "secretDataHash", secretDataHash)
|
|
||||||
return r.updateSecretsForListener(ctx, secret, mirrorSecret, log)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the runner scale set listener service account is created for the listener pod in the controller namespace
|
// Make sure the runner scale set listener service account is created for the listener pod in the controller namespace
|
||||||
serviceAccount := new(corev1.ServiceAccount)
|
serviceAccount := new(corev1.ServiceAccount)
|
||||||
if err := r.Get(ctx, types.NamespacedName{Namespace: autoscalingListener.Namespace, Name: scaleSetListenerServiceAccountName(autoscalingListener)}, serviceAccount); err != nil {
|
if err := r.Get(ctx, types.NamespacedName{Namespace: autoscalingListener.Namespace, Name: scaleSetListenerServiceAccountName(autoscalingListener)}, serviceAccount); err != nil {
|
||||||
|
|
@ -239,7 +218,7 @@ func (r *AutoscalingListenerReconciler) Reconcile(ctx context.Context, req ctrl.
|
||||||
|
|
||||||
// Create a listener pod in the controller namespace
|
// Create a listener pod in the controller namespace
|
||||||
log.Info("Creating a listener pod")
|
log.Info("Creating a listener pod")
|
||||||
return r.createListenerPod(ctx, &autoscalingRunnerSet, autoscalingListener, serviceAccount, mirrorSecret, log)
|
return r.createListenerPod(ctx, &autoscalingRunnerSet, autoscalingListener, serviceAccount, secret, log)
|
||||||
}
|
}
|
||||||
|
|
||||||
cs := listenerContainerStatus(listenerPod)
|
cs := listenerContainerStatus(listenerPod)
|
||||||
|
|
@ -601,22 +580,6 @@ func (r *AutoscalingListenerReconciler) createProxySecret(ctx context.Context, a
|
||||||
return ctrl.Result{Requeue: true}, nil
|
return ctrl.Result{Requeue: true}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *AutoscalingListenerReconciler) updateSecretsForListener(ctx context.Context, secret *corev1.Secret, mirrorSecret *corev1.Secret, logger logr.Logger) (ctrl.Result, error) {
|
|
||||||
dataHash := hash.ComputeTemplateHash(secret.Data)
|
|
||||||
updatedMirrorSecret := mirrorSecret.DeepCopy()
|
|
||||||
updatedMirrorSecret.Labels["secret-data-hash"] = dataHash
|
|
||||||
updatedMirrorSecret.Data = secret.Data
|
|
||||||
|
|
||||||
logger.Info("Updating listener mirror secret", "namespace", updatedMirrorSecret.Namespace, "name", updatedMirrorSecret.Name, "hash", dataHash)
|
|
||||||
if err := r.Update(ctx, updatedMirrorSecret); err != nil {
|
|
||||||
logger.Error(err, "Unable to update listener mirror secret", "namespace", updatedMirrorSecret.Namespace, "name", updatedMirrorSecret.Name)
|
|
||||||
return ctrl.Result{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Updated listener mirror secret", "namespace", updatedMirrorSecret.Namespace, "name", updatedMirrorSecret.Name, "hash", dataHash)
|
|
||||||
return ctrl.Result{Requeue: true}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *AutoscalingListenerReconciler) createRoleForListener(ctx context.Context, autoscalingListener *v1alpha1.AutoscalingListener, logger logr.Logger) (ctrl.Result, error) {
|
func (r *AutoscalingListenerReconciler) createRoleForListener(ctx context.Context, autoscalingListener *v1alpha1.AutoscalingListener, logger logr.Logger) (ctrl.Result, error) {
|
||||||
newRole := r.ResourceBuilder.newScaleSetListenerRole(autoscalingListener)
|
newRole := r.ResourceBuilder.newScaleSetListenerRole(autoscalingListener)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ var _ = Describe("Test AutoScalingListener controller", func() {
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("When creating a new AutoScalingListener", func() {
|
Context("When creating a new AutoScalingListener", func() {
|
||||||
It("It should create/add all required resources for a new AutoScalingListener (finalizer, secret, service account, role, rolebinding, pod)", func() {
|
It("It should create/add all required resources for a new AutoScalingListener (finalizer, service account, role, rolebinding, config, pod)", func() {
|
||||||
config := new(corev1.Secret)
|
config := new(corev1.Secret)
|
||||||
Eventually(
|
Eventually(
|
||||||
func() error {
|
func() error {
|
||||||
|
|
@ -134,19 +134,6 @@ var _ = Describe("Test AutoScalingListener controller", func() {
|
||||||
autoscalingListenerTestTimeout,
|
autoscalingListenerTestTimeout,
|
||||||
autoscalingListenerTestInterval).Should(BeEquivalentTo(autoscalingListenerFinalizerName), "AutoScalingListener should have a finalizer")
|
autoscalingListenerTestInterval).Should(BeEquivalentTo(autoscalingListenerFinalizerName), "AutoScalingListener should have a finalizer")
|
||||||
|
|
||||||
// Check if secret is created
|
|
||||||
mirrorSecret := new(corev1.Secret)
|
|
||||||
Eventually(
|
|
||||||
func() (string, error) {
|
|
||||||
err := k8sClient.Get(ctx, client.ObjectKey{Name: scaleSetListenerSecretMirrorName(autoscalingListener), Namespace: autoscalingListener.Namespace}, mirrorSecret)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(mirrorSecret.Data["github_token"]), nil
|
|
||||||
},
|
|
||||||
autoscalingListenerTestTimeout,
|
|
||||||
autoscalingListenerTestInterval).Should(BeEquivalentTo(autoscalingListenerTestGitHubToken), "Mirror secret should be created")
|
|
||||||
|
|
||||||
// Check if service account is created
|
// Check if service account is created
|
||||||
serviceAccount := new(corev1.ServiceAccount)
|
serviceAccount := new(corev1.ServiceAccount)
|
||||||
Eventually(
|
Eventually(
|
||||||
|
|
@ -188,6 +175,22 @@ var _ = Describe("Test AutoScalingListener controller", func() {
|
||||||
autoscalingListenerTestTimeout,
|
autoscalingListenerTestTimeout,
|
||||||
autoscalingListenerTestInterval).Should(BeEquivalentTo(scaleSetListenerRoleName(autoscalingListener)), "Rolebinding should be created")
|
autoscalingListenerTestInterval).Should(BeEquivalentTo(scaleSetListenerRoleName(autoscalingListener)), "Rolebinding should be created")
|
||||||
|
|
||||||
|
listenerConfig := new(corev1.Secret)
|
||||||
|
Eventually(
|
||||||
|
func() error {
|
||||||
|
return k8sClient.Get(
|
||||||
|
ctx,
|
||||||
|
client.ObjectKey{
|
||||||
|
Name: scaleSetListenerConfigName(autoscalingListener),
|
||||||
|
Namespace: autoscalingListener.Namespace,
|
||||||
|
},
|
||||||
|
listenerConfig,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
autoscalingListenerTestTimeout,
|
||||||
|
autoscalingListenerTestInterval,
|
||||||
|
).Should(Succeed(), "Listener config should be created")
|
||||||
|
|
||||||
// Check if pod is created
|
// Check if pod is created
|
||||||
pod := new(corev1.Pod)
|
pod := new(corev1.Pod)
|
||||||
Eventually(
|
Eventually(
|
||||||
|
|
@ -397,75 +400,6 @@ var _ = Describe("Test AutoScalingListener controller", func() {
|
||||||
autoscalingListenerTestInterval,
|
autoscalingListenerTestInterval,
|
||||||
).ShouldNot(BeEquivalentTo(oldPodUID), "Pod should be re-created")
|
).ShouldNot(BeEquivalentTo(oldPodUID), "Pod should be re-created")
|
||||||
})
|
})
|
||||||
|
|
||||||
It("It should update mirror secrets to match secret used by AutoScalingRunnerSet", func() {
|
|
||||||
// Waiting for the pod is created
|
|
||||||
pod := new(corev1.Pod)
|
|
||||||
Eventually(
|
|
||||||
func() (string, error) {
|
|
||||||
err := k8sClient.Get(ctx, client.ObjectKey{Name: autoscalingListener.Name, Namespace: autoscalingListener.Namespace}, pod)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return pod.Name, nil
|
|
||||||
},
|
|
||||||
autoscalingListenerTestTimeout,
|
|
||||||
autoscalingListenerTestInterval).Should(BeEquivalentTo(autoscalingListener.Name), "Pod should be created")
|
|
||||||
|
|
||||||
// Update the secret
|
|
||||||
updatedSecret := configSecret.DeepCopy()
|
|
||||||
updatedSecret.Data["github_token"] = []byte(autoscalingListenerTestGitHubToken + "_updated")
|
|
||||||
err := k8sClient.Update(ctx, updatedSecret)
|
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to update test secret")
|
|
||||||
|
|
||||||
updatedPod := pod.DeepCopy()
|
|
||||||
// Ignore status running and consult the container state
|
|
||||||
updatedPod.Status.Phase = corev1.PodRunning
|
|
||||||
updatedPod.Status.ContainerStatuses = []corev1.ContainerStatus{
|
|
||||||
{
|
|
||||||
Name: autoscalingListenerContainerName,
|
|
||||||
State: corev1.ContainerState{
|
|
||||||
Terminated: &corev1.ContainerStateTerminated{
|
|
||||||
ExitCode: 1,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
err = k8sClient.Status().Update(ctx, updatedPod)
|
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to update test pod to failed")
|
|
||||||
|
|
||||||
// Check if mirror secret is updated with right data
|
|
||||||
mirrorSecret := new(corev1.Secret)
|
|
||||||
Eventually(
|
|
||||||
func() (map[string][]byte, error) {
|
|
||||||
err := k8sClient.Get(ctx, client.ObjectKey{Name: scaleSetListenerSecretMirrorName(autoscalingListener), Namespace: autoscalingListener.Namespace}, mirrorSecret)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return mirrorSecret.Data, nil
|
|
||||||
},
|
|
||||||
autoscalingListenerTestTimeout,
|
|
||||||
autoscalingListenerTestInterval).Should(BeEquivalentTo(updatedSecret.Data), "Mirror secret should be updated")
|
|
||||||
|
|
||||||
// Check if we re-created a new pod
|
|
||||||
Eventually(
|
|
||||||
func() error {
|
|
||||||
latestPod := new(corev1.Pod)
|
|
||||||
err := k8sClient.Get(ctx, client.ObjectKey{Name: autoscalingListener.Name, Namespace: autoscalingListener.Namespace}, latestPod)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if latestPod.UID == pod.UID {
|
|
||||||
return fmt.Errorf("Pod should be recreated")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
autoscalingListenerTestTimeout,
|
|
||||||
autoscalingListenerTestInterval).Should(Succeed(), "Pod should be recreated")
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue