From e11062d93dea902909bce3ba89f36c4944491c21 Mon Sep 17 00:00:00 2001 From: Alessio Dionisi Date: Mon, 23 Sep 2024 09:56:41 +0200 Subject: [PATCH] feat: add sed as tool dependency and support 1.29.4 (#537) * feat: add support for custom registry * feat: update docs and compatibility * deps: use latest v1.29.4 RC * fix(get-kubeconfig): retrieve absolute path to config file (#539) Fixes an issue with path interpolations, where relative paths would not be converted to absolute paths * deps: use v1.29.4 distribution * feat: add upgrade paths --------- Co-authored-by: Riccardo Cannella <44730210+Rick-1990@users.noreply.github.com> --- README.md | 4 +- cmd/get/kubeconfig.go | 18 +++- .../1.27.8-1.27.9/pre-distribution.sh.tpl | 10 +++ .../1.27.9-1.28.4/pre-distribution.sh.tpl | 10 +++ .../1.27.9-1.28.4/pre-kubernetes.sh.tpl | 20 +++++ .../1.28.3-1.28.4/pre-distribution.sh.tpl | 10 +++ .../1.28.4-1.29.4/pre-distribution.sh.tpl | 10 +++ .../1.28.4-1.29.4/pre-kubernetes.sh.tpl | 20 +++++ .../1.29.3-1.29.4/pre-distribution.sh.tpl | 10 +++ docs/COMPATIBILITY_MATRIX.md | 40 +++++---- go.mod | 2 +- go.sum | 4 +- internal/dependencies/tools/sed.go | 59 +++++++++++++ internal/dependencies/tools/tool.go | 9 ++ internal/dependencies/tools/validator.go | 7 ++ internal/dependencies/tools/validator_test.go | 1 + internal/distribution/compatibility.go | 6 +- internal/distribution/compatibility_test.go | 18 ++-- internal/tool/runner.go | 8 ++ internal/tool/sed/runner.go | 87 +++++++++++++++++++ 20 files changed, 313 insertions(+), 40 deletions(-) create mode 100644 configs/upgrades/onpremises/1.27.8-1.27.9/pre-distribution.sh.tpl create mode 100644 configs/upgrades/onpremises/1.27.9-1.28.4/pre-distribution.sh.tpl create mode 100644 configs/upgrades/onpremises/1.27.9-1.28.4/pre-kubernetes.sh.tpl create mode 100644 configs/upgrades/onpremises/1.28.3-1.28.4/pre-distribution.sh.tpl create mode 100644 configs/upgrades/onpremises/1.28.4-1.29.4/pre-distribution.sh.tpl create mode 100644 configs/upgrades/onpremises/1.28.4-1.29.4/pre-kubernetes.sh.tpl create mode 100644 configs/upgrades/onpremises/1.29.3-1.29.4/pre-distribution.sh.tpl create mode 100644 internal/dependencies/tools/sed.go create mode 100644 internal/tool/sed/runner.go diff --git a/README.md b/README.md index 52b7a5378..4d08223d9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

The Swiss Army Knife
for the Kubernetes Fury Distribution

[![Build Status](https://ci.sighup.io/api/badges/sighupio/furyctl/status.svg?ref=refs/heads/main)](https://ci.sighup.io/sighupio/furyctl) -![Release](https://img.shields.io/badge/furyctl-v0.29.6-blue) +![Release](https://img.shields.io/badge/furyctl-v0.29.7-blue) ![Slack](https://img.shields.io/badge/slack-@kubernetes/fury-yellow.svg?logo=slack) ![License](https://img.shields.io/github/license/sighupio/furyctl) [![Go Report Card](https://goreportcard.com/badge/github.com/sighupio/furyctl)](https://goreportcard.com/report/github.com/sighupio/furyctl) @@ -69,7 +69,7 @@ $ furyctl version ... goVersion: go1.22 osArch: amd64 -version: 0.29.6 +version: 0.29.7 ``` ### Installing from source diff --git a/cmd/get/kubeconfig.go b/cmd/get/kubeconfig.go index 3c25711d1..833823fdf 100644 --- a/cmd/get/kubeconfig.go +++ b/cmd/get/kubeconfig.go @@ -9,6 +9,7 @@ import ( "fmt" "os" "path" + "path/filepath" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -71,6 +72,15 @@ func NewKubeconfigCmd() *cobra.Command { return fmt.Errorf("error while getting current directory: %w", err) } + // Get absolute path to the config file. + absFuryctlPath, err := filepath.Abs(furyctlPath) + if err != nil { + cmdEvent.AddErrorMessage(err) + tracker.Track(cmdEvent) + + return fmt.Errorf("error while getting config directory: %w", err) + } + // Get home dir. logrus.Debug("Getting Home directory path...") homeDir, err := os.UserHomeDir() @@ -97,7 +107,7 @@ func NewKubeconfigCmd() *cobra.Command { executor := execx.NewStdExecutor() distrodl := &dist.Downloader{} - depsvl := dependencies.NewValidator(executor, binPath, furyctlPath, false) + depsvl := dependencies.NewValidator(executor, binPath, absFuryctlPath, false) // Init first half of collaborators. client := netx.NewGoGetterClient() @@ -119,7 +129,7 @@ func NewKubeconfigCmd() *cobra.Command { // Download the distribution. logrus.Info("Downloading distribution...") - res, err := distrodl.Download(distroLocation, furyctlPath) + res, err := distrodl.Download(distroLocation, absFuryctlPath) if err != nil { cmdEvent.AddErrorMessage(err) tracker.Track(cmdEvent) @@ -134,7 +144,7 @@ func NewKubeconfigCmd() *cobra.Command { // Validate the furyctl.yaml file. logrus.Info("Validating configuration file...") - if err := config.Validate(furyctlPath, res.RepoPath); err != nil { + if err := config.Validate(absFuryctlPath, res.RepoPath); err != nil { cmdEvent.AddErrorMessage(err) tracker.Track(cmdEvent) @@ -163,7 +173,7 @@ func NewKubeconfigCmd() *cobra.Command { } } - getter, err := cluster.NewKubeconfigGetter(res.MinimalConf, res.DistroManifest, res.RepoPath, furyctlPath, outDir) + getter, err := cluster.NewKubeconfigGetter(res.MinimalConf, res.DistroManifest, res.RepoPath, absFuryctlPath, outDir) if err != nil { cmdEvent.AddErrorMessage(err) tracker.Track(cmdEvent) diff --git a/configs/upgrades/onpremises/1.27.8-1.27.9/pre-distribution.sh.tpl b/configs/upgrades/onpremises/1.27.8-1.27.9/pre-distribution.sh.tpl new file mode 100644 index 000000000..2eeeb36a4 --- /dev/null +++ b/configs/upgrades/onpremises/1.27.8-1.27.9/pre-distribution.sh.tpl @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +set -e + +kubectlbin="{{ .paths.kubectl }}" + +# Remove some validating webhooks during the upgrade +{{- if eq .spec.distribution.modules.policy.type "gatekeeper" }} +$kubectlbin delete --ignore-not-found=true validatingwebhookconfiguration gatekeeper-validating-webhook-configuration +{{- end }} diff --git a/configs/upgrades/onpremises/1.27.9-1.28.4/pre-distribution.sh.tpl b/configs/upgrades/onpremises/1.27.9-1.28.4/pre-distribution.sh.tpl new file mode 100644 index 000000000..2eeeb36a4 --- /dev/null +++ b/configs/upgrades/onpremises/1.27.9-1.28.4/pre-distribution.sh.tpl @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +set -e + +kubectlbin="{{ .paths.kubectl }}" + +# Remove some validating webhooks during the upgrade +{{- if eq .spec.distribution.modules.policy.type "gatekeeper" }} +$kubectlbin delete --ignore-not-found=true validatingwebhookconfiguration gatekeeper-validating-webhook-configuration +{{- end }} diff --git a/configs/upgrades/onpremises/1.27.9-1.28.4/pre-kubernetes.sh.tpl b/configs/upgrades/onpremises/1.27.9-1.28.4/pre-kubernetes.sh.tpl new file mode 100644 index 000000000..12e984f66 --- /dev/null +++ b/configs/upgrades/onpremises/1.27.9-1.28.4/pre-kubernetes.sh.tpl @@ -0,0 +1,20 @@ +#!/usr/bin/env sh + +set -e + +{{- if index .spec "kubernetes" }} + +## master upgrades - only one at a time +{{- range $h := .spec.kubernetes.masters.hosts }} +ansible-playbook 55.upgrade-control-plane.yml --limit "{{ $h.name }}" --become +{{- end }} + +{{- if ne .upgrade.skipNodesUpgrade true }} +{{- range $n := .spec.kubernetes.nodes }} + {{- range $h := $n.hosts }} +ansible-playbook 56.upgrade-worker-nodes.yml --limit "{{ $h.name }}" + {{- end }} +{{- end }} +{{- end }} + +{{- end }} diff --git a/configs/upgrades/onpremises/1.28.3-1.28.4/pre-distribution.sh.tpl b/configs/upgrades/onpremises/1.28.3-1.28.4/pre-distribution.sh.tpl new file mode 100644 index 000000000..2eeeb36a4 --- /dev/null +++ b/configs/upgrades/onpremises/1.28.3-1.28.4/pre-distribution.sh.tpl @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +set -e + +kubectlbin="{{ .paths.kubectl }}" + +# Remove some validating webhooks during the upgrade +{{- if eq .spec.distribution.modules.policy.type "gatekeeper" }} +$kubectlbin delete --ignore-not-found=true validatingwebhookconfiguration gatekeeper-validating-webhook-configuration +{{- end }} diff --git a/configs/upgrades/onpremises/1.28.4-1.29.4/pre-distribution.sh.tpl b/configs/upgrades/onpremises/1.28.4-1.29.4/pre-distribution.sh.tpl new file mode 100644 index 000000000..2eeeb36a4 --- /dev/null +++ b/configs/upgrades/onpremises/1.28.4-1.29.4/pre-distribution.sh.tpl @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +set -e + +kubectlbin="{{ .paths.kubectl }}" + +# Remove some validating webhooks during the upgrade +{{- if eq .spec.distribution.modules.policy.type "gatekeeper" }} +$kubectlbin delete --ignore-not-found=true validatingwebhookconfiguration gatekeeper-validating-webhook-configuration +{{- end }} diff --git a/configs/upgrades/onpremises/1.28.4-1.29.4/pre-kubernetes.sh.tpl b/configs/upgrades/onpremises/1.28.4-1.29.4/pre-kubernetes.sh.tpl new file mode 100644 index 000000000..12e984f66 --- /dev/null +++ b/configs/upgrades/onpremises/1.28.4-1.29.4/pre-kubernetes.sh.tpl @@ -0,0 +1,20 @@ +#!/usr/bin/env sh + +set -e + +{{- if index .spec "kubernetes" }} + +## master upgrades - only one at a time +{{- range $h := .spec.kubernetes.masters.hosts }} +ansible-playbook 55.upgrade-control-plane.yml --limit "{{ $h.name }}" --become +{{- end }} + +{{- if ne .upgrade.skipNodesUpgrade true }} +{{- range $n := .spec.kubernetes.nodes }} + {{- range $h := $n.hosts }} +ansible-playbook 56.upgrade-worker-nodes.yml --limit "{{ $h.name }}" + {{- end }} +{{- end }} +{{- end }} + +{{- end }} diff --git a/configs/upgrades/onpremises/1.29.3-1.29.4/pre-distribution.sh.tpl b/configs/upgrades/onpremises/1.29.3-1.29.4/pre-distribution.sh.tpl new file mode 100644 index 000000000..2eeeb36a4 --- /dev/null +++ b/configs/upgrades/onpremises/1.29.3-1.29.4/pre-distribution.sh.tpl @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +set -e + +kubectlbin="{{ .paths.kubectl }}" + +# Remove some validating webhooks during the upgrade +{{- if eq .spec.distribution.modules.policy.type "gatekeeper" }} +$kubectlbin delete --ignore-not-found=true validatingwebhookconfiguration gatekeeper-validating-webhook-configuration +{{- end }} diff --git a/docs/COMPATIBILITY_MATRIX.md b/docs/COMPATIBILITY_MATRIX.md index d2883acf6..46d604618 100644 --- a/docs/COMPATIBILITY_MATRIX.md +++ b/docs/COMPATIBILITY_MATRIX.md @@ -7,30 +7,32 @@ Note: Always use the latest `furyctl` version, we make sure that is compatible w - If you are using version 0.29.1 or 0.29.2, please upgrade to 0.29.3 or later. - Versions < 0.27.5 do not work with the OnPremises provider, we fixed this issue in 0.27.5, so we recommend using this version or later. -| Furyctl / KFD | 1.29.2 | 1.29.1 | 1.29.0 | 1.28.2 | 1.28.1 | 1.28.0 | 1.27.7 | 1.27.6 | 1.27.5 | 1.27.4 | 1.27.3 | 1.27.2 | 1.27.1 | 1.27.0 | 1.26.6 | 1.26.5 | 1.26.4 | 1.26.3 | 1.25.10 | 1.25.9 | 1.25.8 | -| ------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | -| 0.29.6 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.29.5 | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | -| 0.29.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.29.3 | | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.29.2 | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | -| 0.29.1 | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | -| 0.29.0 | | | :white_check_mark: | | | :white_check_mark: | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.28.0 | | | | | | :white_check_mark: | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.27.8 | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.27.7 | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.27.6 | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.27.5 | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| 0.27.4 | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | -| 0.27.3 | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | -| 0.27.2 | | | | | | | | | | | :warning: | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | -| 0.27.1 | | | | | | | | | | | | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | -| 0.27.0 | | | | | | | | | | | | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | +| Furyctl / KFD | 1.29.4 | 1.29.3 | 1.29.2 | 1.29.1 | 1.29.0 | 1.28.4 | 1.28.3 | 1.28.2 | 1.28.1 | 1.28.0 | 1.27.9 | 1.27.8 | 1.27.7 | 1.27.6 | 1.27.5 | 1.27.4 | 1.27.3 | 1.27.2 | 1.27.1 | 1.27.0 | 1.26.6 | 1.26.5 | 1.26.4 | 1.26.3 | 1.25.10 | 1.25.9 | 1.25.8 | +| ------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| 0.29.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.29.6 | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.29.5 | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| 0.29.4 | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.29.3 | | | | :white_check_mark: | :white_check_mark: | | | | :white_check_mark: | :white_check_mark: | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.29.2 | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| 0.29.1 | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| 0.29.0 | | | | | :white_check_mark: | | | | | :white_check_mark: | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.28.0 | | | | | | | | | | :white_check_mark: | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.27.8 | | | | | | | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.27.7 | | | | | | | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.27.6 | | | | | | | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.27.5 | | | | | | | | | | | | | | | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| 0.27.4 | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| 0.27.3 | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| 0.27.2 | | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | +| 0.27.1 | | | | | | | | | | | | | | | | | | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | +| 0.27.0 | | | | | | | | | | | | | | | | | | :warning: | :warning: | | | :warning: | :warning: | | :warning: | :warning: | :warning: | ## Furyctl and Providers compatibility | Furyctl / Providers | EKSCluster | KFDDistribution | OnPremises | | ------------------- | ------------------ | ------------------ | ------------------ | +| 0.29.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | 0.29.6 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | 0.29.5 | :x: | :x: | :x: | | 0.29.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | diff --git a/go.mod b/go.mod index b087103b6..a7508efdc 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/r3labs/diff/v3 v3.0.1 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/shirou/gopsutil/v3 v3.24.1 - github.com/sighupio/fury-distribution v1.29.3 + github.com/sighupio/fury-distribution v1.29.4 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 diff --git a/go.sum b/go.sum index 86163351a..1fcf2e2e9 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnj github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sighupio/fury-distribution v1.29.3 h1:F1gg8h2xG284YeMAQCiPMRgviQGwf3bpYiRoJ/nOhZM= -github.com/sighupio/fury-distribution v1.29.3/go.mod h1:iYBnl0N/6zGPz3j3L2X6nzFC3nzNQtIkAzmaPfnO0zA= +github.com/sighupio/fury-distribution v1.29.4 h1:AA/GSBUYQx0/NobWBTxiZveoPNPCiy4G1PkJmd+kOCo= +github.com/sighupio/fury-distribution v1.29.4/go.mod h1:iYBnl0N/6zGPz3j3L2X6nzFC3nzNQtIkAzmaPfnO0zA= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= diff --git a/internal/dependencies/tools/sed.go b/internal/dependencies/tools/sed.go new file mode 100644 index 000000000..39259cdcd --- /dev/null +++ b/internal/dependencies/tools/sed.go @@ -0,0 +1,59 @@ +// Copyright (c) 2017-present SIGHUP s.r.l All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tools + +import ( + "fmt" + "regexp" + "runtime" + "strings" + + "github.com/sighupio/furyctl/internal/tool/sed" +) + +func NewSed(runner *sed.Runner, version string) *Sed { + return &Sed{ + arch: runtime.GOARCH, + os: runtime.GOOS, + version: version, + checker: &checker{ + regex: regexp.MustCompile(`.*`), + runner: runner, + trimFn: func(tokens []string) string { + return strings.TrimLeft(tokens[0], "v") + }, + splitFn: func(version string) []string { + return []string{version} + }, + }, + } +} + +type Sed struct { + arch string + checker *checker + os string + version string +} + +func (*Sed) SupportsDownload() bool { + return false +} + +func (*Sed) SrcPath() string { + return "" +} + +func (*Sed) Rename(_ string) error { + return nil +} + +func (s *Sed) CheckBinVersion() error { + if err := s.checker.version(s.version); err != nil { + return fmt.Errorf("sed: %w", err) + } + + return nil +} diff --git a/internal/dependencies/tools/tool.go b/internal/dependencies/tools/tool.go index 3513ba653..e78931c0e 100644 --- a/internal/dependencies/tools/tool.go +++ b/internal/dependencies/tools/tool.go @@ -22,6 +22,7 @@ import ( "github.com/sighupio/furyctl/internal/tool/kubectl" "github.com/sighupio/furyctl/internal/tool/kustomize" "github.com/sighupio/furyctl/internal/tool/openvpn" + "github.com/sighupio/furyctl/internal/tool/sed" "github.com/sighupio/furyctl/internal/tool/shell" "github.com/sighupio/furyctl/internal/tool/terraform" "github.com/sighupio/furyctl/internal/tool/yq" @@ -148,6 +149,14 @@ func (f *Factory) Create(name tool.Name, version string) Tool { return NewShell(shellr, version) + case tool.Sed: + sedr, ok := t.(*sed.Runner) + if !ok { + panic(fmt.Sprintf("expected sed.Runner, got %T", t)) + } + + return NewSed(sedr, version) + case tool.Helm: hr, ok := t.(*helm.Runner) if !ok { diff --git a/internal/dependencies/tools/validator.go b/internal/dependencies/tools/validator.go index c92eaedb6..9d80c1407 100644 --- a/internal/dependencies/tools/validator.go +++ b/internal/dependencies/tools/validator.go @@ -42,6 +42,13 @@ func (tv *Validator) ValidateBaseReqs() ([]string, []error) { errs []error ) + sed := tv.toolFactory.Create(itool.Sed, "*") + if err := sed.CheckBinVersion(); err != nil { + errs = append(errs, err) + } else { + oks = append(oks, "sed") + } + git := tv.toolFactory.Create(itool.Git, "*") if err := git.CheckBinVersion(); err != nil { errs = append(errs, err) diff --git a/internal/dependencies/tools/validator_test.go b/internal/dependencies/tools/validator_test.go index 4e48e9e77..a8e99d1d3 100644 --- a/internal/dependencies/tools/validator_test.go +++ b/internal/dependencies/tools/validator_test.go @@ -182,6 +182,7 @@ func TestValidator_ValidateBaseReqs(t *testing.T) { wantOks: []string{ "git", "shell", + "sed", }, }, } diff --git a/internal/distribution/compatibility.go b/internal/distribution/compatibility.go index 5406ef96c..d2a3e00ca 100644 --- a/internal/distribution/compatibility.go +++ b/internal/distribution/compatibility.go @@ -231,7 +231,7 @@ func (c *OnPremisesCheck) IsCompatible() bool { return false } - max12SevenVersion, err := semver.NewVersion("v1.27.8") + max12SevenVersion, err := semver.NewVersion("v1.27.9") if err != nil { return false } @@ -241,7 +241,7 @@ func (c *OnPremisesCheck) IsCompatible() bool { return false } - max12EightVersion, err := semver.NewVersion("v1.28.3") + max12EightVersion, err := semver.NewVersion("v1.28.4") if err != nil { return false } @@ -251,7 +251,7 @@ func (c *OnPremisesCheck) IsCompatible() bool { return false } - max12NineVersion, err := semver.NewVersion("v1.29.3") + max12NineVersion, err := semver.NewVersion("v1.29.4") if err != nil { return false } diff --git a/internal/distribution/compatibility_test.go b/internal/distribution/compatibility_test.go index 908072b90..39be6b6a5 100644 --- a/internal/distribution/compatibility_test.go +++ b/internal/distribution/compatibility_test.go @@ -220,33 +220,33 @@ func TestOnPremisesCheckIsCompatible(t *testing.T) { expected: false, }, { - name: "should return true if distribution version is greater than 1.27.0 and less than 1.27.9", + name: "should return true if distribution version is greater than 1.27.0 and less than 1.27.10", distributionVersion: "v1.27.2", expected: true, }, { - name: "should return false if distribution version is greater than 1.27.8", - distributionVersion: "v1.27.9", + name: "should return false if distribution version is greater than 1.27.9", + distributionVersion: "v1.27.10", expected: false, }, { - name: "should return true if distribution version is greater than 1.28.0 and less than 1.28.4", + name: "should return true if distribution version is greater than 1.28.0 and less than 1.28.5", distributionVersion: "v1.28.3", expected: true, }, { - name: "should return false if distribution version is greater than 1.28.3", - distributionVersion: "v1.28.4", + name: "should return false if distribution version is greater than 1.28.4", + distributionVersion: "v1.28.5", expected: false, }, { - name: "should return true if distribution version is greater than 1.29.1 and less than 1.29.4", + name: "should return true if distribution version is greater than 1.29.1 and less than 1.29.5", distributionVersion: "v1.29.3", expected: true, }, { - name: "should return false if distribution version is greater than 1.29.3", - distributionVersion: "v1.29.4", + name: "should return false if distribution version is greater than 1.29.4", + distributionVersion: "v1.29.5", expected: false, }, } diff --git a/internal/tool/runner.go b/internal/tool/runner.go index 7b4867e48..d965b2c70 100644 --- a/internal/tool/runner.go +++ b/internal/tool/runner.go @@ -16,6 +16,7 @@ import ( "github.com/sighupio/furyctl/internal/tool/kubectl" "github.com/sighupio/furyctl/internal/tool/kustomize" "github.com/sighupio/furyctl/internal/tool/openvpn" + "github.com/sighupio/furyctl/internal/tool/sed" "github.com/sighupio/furyctl/internal/tool/shell" "github.com/sighupio/furyctl/internal/tool/terraform" "github.com/sighupio/furyctl/internal/tool/yq" @@ -37,6 +38,7 @@ const ( Shell Name = "shell" Helm Name = "helm" Helmfile Name = "helmfile" + Sed Name = "sed" ) type Runner interface { @@ -88,6 +90,12 @@ func (rf *RunnerFactory) Create(name Name, version, workDir string) Runner { WorkDir: workDir, }) + case Sed: + return sed.NewRunner(rf.executor, sed.Paths{ + Sed: string(name), + WorkDir: workDir, + }) + case Kubectl: return kubectl.NewRunner( rf.executor, diff --git a/internal/tool/sed/runner.go b/internal/tool/sed/runner.go new file mode 100644 index 000000000..83f3acff4 --- /dev/null +++ b/internal/tool/sed/runner.go @@ -0,0 +1,87 @@ +// Copyright (c) 2017-present SIGHUP s.r.l All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sed + +import ( + "fmt" + + "github.com/google/uuid" + + execx "github.com/sighupio/furyctl/internal/x/exec" +) + +type Paths struct { + Sed string + WorkDir string +} + +type Runner struct { + executor execx.Executor + paths Paths + cmds map[string]*execx.Cmd +} + +func NewRunner(executor execx.Executor, paths Paths) *Runner { + return &Runner{ + executor: executor, + paths: paths, + cmds: make(map[string]*execx.Cmd), + } +} + +func (r *Runner) CmdPath() string { + return r.paths.Sed +} + +func (r *Runner) newCmd(args []string) (*execx.Cmd, string) { + cmd := execx.NewCmd(r.paths.Sed, execx.CmdOptions{ + Args: args, + Executor: r.executor, + WorkDir: r.paths.WorkDir, + }) + + id := uuid.NewString() + r.cmds[id] = cmd + + return cmd, id +} + +func (r *Runner) deleteCmd(id string) { + delete(r.cmds, id) +} + +func (r *Runner) Version() (string, error) { + cmd, id := r.newCmd([]string{""}) + defer r.deleteCmd(id) + + _, err := execx.CombinedOutput(cmd) + if err != nil { + return "", fmt.Errorf("error getting sed version: %w", err) + } + + return "v0.0.0", nil +} + +func (r *Runner) Run(args ...string) (string, error) { + cmd, id := r.newCmd(args) + defer r.deleteCmd(id) + + out, err := execx.CombinedOutput(cmd) + if err != nil { + return "", fmt.Errorf("error while running sed: %w", err) + } + + return out, nil +} + +func (r *Runner) Stop() error { + for _, cmd := range r.cmds { + if err := cmd.Stop(); err != nil { + return fmt.Errorf("error stopping sed runner: %w", err) + } + } + + return nil +}