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
+}