1
0
mirror of synced 2026-02-13 13:06:56 +00:00

Implement suspend, resume, reconcile image-update

.. and refactor. These are all amenable to the adapter refactoring
that has served well so far.

Signed-off-by: Michael Bridgen <michael@weave.works>
This commit is contained in:
Michael Bridgen
2020-12-08 11:26:31 +00:00
parent 2bb09697ce
commit d55d185044
16 changed files with 597 additions and 196 deletions

View File

@@ -17,7 +17,14 @@ limitations under the License.
package main
import (
"context"
"fmt"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
"github.com/fluxcd/flux2/internal/utils"
)
var resumeCmd = &cobra.Command{
@@ -29,3 +36,56 @@ var resumeCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(resumeCmd)
}
type resumable interface {
adapter
statusable
setUnsuspended()
}
type resumeCommand struct {
kind string
humanKind string
object resumable
}
func (resume resumeCommand) run(cmd *cobra.Command, args []string) error {
if len(args) < 1 {
return fmt.Errorf("%s name is required", resume.humanKind)
}
name := args[0]
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
kubeClient, err := utils.KubeClient(kubeconfig, kubecontext)
if err != nil {
return err
}
namespacedName := types.NamespacedName{
Namespace: namespace,
Name: name,
}
err = kubeClient.Get(ctx, namespacedName, resume.object.asRuntimeObject())
if err != nil {
return err
}
logger.Actionf("resuming %s %s in %s namespace", resume.humanKind, name, namespace)
resume.object.setUnsuspended()
if err := kubeClient.Update(ctx, resume.object.asRuntimeObject()); err != nil {
return err
}
logger.Successf("%s resumed", resume.humanKind)
logger.Waitingf("waiting for %s reconciliation", resume.kind)
if err := wait.PollImmediate(pollInterval, timeout,
isReady(ctx, kubeClient, namespacedName, resume.object)); err != nil {
return err
}
logger.Successf("%s reconciliation completed", resume.kind)
logger.Successf(resume.object.successMessage())
return nil
}