From bed90dd186e27575097543e5de0cdeda199267ce Mon Sep 17 00:00:00 2001 From: Elias Werberich Date: Tue, 28 Sep 2021 12:54:49 +0000 Subject: [PATCH 1/5] Provide string constant functions through dedicated interface Using a dedicated interface enables distro-specific structs to 'override' functions returning string constants such as config folders or paths. --- configurer/linux.go | 26 +++++++++++++++---- configurer/linux/alpine.go | 4 ++- configurer/linux/archlinux.go | 4 ++- configurer/linux/debian.go | 4 ++- configurer/linux/enterpriselinux/almalinux.go | 4 ++- configurer/linux/enterpriselinux/amazon.go | 4 ++- configurer/linux/enterpriselinux/centos.go | 4 ++- configurer/linux/enterpriselinux/fedora.go | 4 ++- configurer/linux/enterpriselinux/oracle.go | 4 ++- configurer/linux/enterpriselinux/rhel.go | 5 +++- configurer/linux/enterpriselinux/rocky.go | 4 ++- configurer/linux/opensuse.go | 5 +++- configurer/linux/slackware.go | 5 +++- configurer/linux/sles.go | 5 +++- configurer/linux/ubuntu.go | 5 +++- 15 files changed, 68 insertions(+), 19 deletions(-) diff --git a/configurer/linux.go b/configurer/linux.go index 7dcb1f03..19f4223c 100644 --- a/configurer/linux.go +++ b/configurer/linux.go @@ -10,8 +10,24 @@ import ( "github.com/k0sproject/rig/os" ) +// Static Constants Interface for overriding by distro-specific structs +type LinuxStaticConstants interface { + K0sBinaryPath() string + K0sConfigPath() string + K0sJoinTokenPath() string + KubeconfigPath() string +} + // Linux is a base module for various linux OS support packages -type Linux struct{} +type Linux struct { + LinuxStaticConstants +} + +func New() *Linux { + linuxType := &Linux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(LinuxStaticConstants) + return linuxType +} // NOTE The Linux struct does not embed rig/os.Linux because it will confuse // go as the distro-configurers' parents embed it too. This means you can't @@ -46,7 +62,7 @@ func (l Linux) Chmod(h os.Host, path, chmod string) error { // K0sCmdf can be used to construct k0s commands in sprintf style. func (l Linux) K0sCmdf(template string, args ...interface{}) string { - return fmt.Sprintf("%s %s", l.K0sBinaryPath(), fmt.Sprintf(template, args...)) + return fmt.Sprintf("%s %s", l.LinuxStaticConstants.K0sBinaryPath(), fmt.Sprintf(template, args...)) } // K0sBinaryPath returns the location of k0s binary @@ -87,12 +103,12 @@ func (l Linux) DownloadK0s(h os.Host, version, arch string) error { return err } - return h.Execf(`install -m 0750 -o root -g adm "%s" "%s"`, tmp, l.K0sBinaryPath(), exec.Sudo(h)) + return h.Execf(`install -m 0750 -o root -g adm "%s" "%s"`, tmp, l.LinuxStaticConstants.K0sBinaryPath(), exec.Sudo(h)) } // ReplaceK0sTokenPath replaces the config path in the service stub func (l Linux) ReplaceK0sTokenPath(h os.Host, spath string) error { - return h.Exec(fmt.Sprintf("sed -i 's^REPLACEME^%s^g' %s", l.K0sJoinTokenPath(), spath)) + return h.Exec(fmt.Sprintf("sed -i 's^REPLACEME^%s^g' %s", l.LinuxStaticConstants.K0sJoinTokenPath(), spath)) } // FileContains returns true if a file contains the substring @@ -117,7 +133,7 @@ func (l Linux) KubeconfigPath() string { // KubectlCmdf returns a command line in sprintf manner for running kubectl on the host using the kubeconfig from KubeconfigPath func (l Linux) KubectlCmdf(s string, args ...interface{}) string { - return l.K0sCmdf(`kubectl --kubeconfig "%s" %s`, l.KubeconfigPath(), fmt.Sprintf(s, args...)) + return l.K0sCmdf(`kubectl --kubeconfig "%s" %s`, l.LinuxStaticConstants.KubeconfigPath(), fmt.Sprintf(s, args...)) } // HTTPStatus makes a HTTP GET request to the url and returns the status code or an error diff --git a/configurer/linux/alpine.go b/configurer/linux/alpine.go index 1f625878..f121a462 100644 --- a/configurer/linux/alpine.go +++ b/configurer/linux/alpine.go @@ -27,7 +27,9 @@ func init() { return os.ID == "alpine" }, func() interface{} { - return Alpine{} + linuxType := &Alpine{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/archlinux.go b/configurer/linux/archlinux.go index eb0e81cf..99eed14f 100644 --- a/configurer/linux/archlinux.go +++ b/configurer/linux/archlinux.go @@ -19,7 +19,9 @@ func init() { return os.IDLike == "arch" }, func() interface{} { - return &Archlinux{} + linuxType := &Archlinux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/debian.go b/configurer/linux/debian.go index 00207d71..f7e7c47b 100644 --- a/configurer/linux/debian.go +++ b/configurer/linux/debian.go @@ -19,7 +19,9 @@ func init() { return os.ID == "debian" }, func() interface{} { - return &Debian{} + linuxType := &Debian{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/almalinux.go b/configurer/linux/enterpriselinux/almalinux.go index efaec960..6992a4b6 100644 --- a/configurer/linux/enterpriselinux/almalinux.go +++ b/configurer/linux/enterpriselinux/almalinux.go @@ -19,7 +19,9 @@ func init() { return os.ID == "almalinux" }, func() interface{} { - return AlmaLinux{} + linuxType := &AlmaLinux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/amazon.go b/configurer/linux/enterpriselinux/amazon.go index ba36faba..fdf55e3c 100644 --- a/configurer/linux/enterpriselinux/amazon.go +++ b/configurer/linux/enterpriselinux/amazon.go @@ -27,7 +27,9 @@ func init() { return os.ID == "amzn" }, func() interface{} { - return AmazonLinux{} + linuxType := &AmazonLinux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/centos.go b/configurer/linux/enterpriselinux/centos.go index 2f5fef4f..f8f9edb4 100644 --- a/configurer/linux/enterpriselinux/centos.go +++ b/configurer/linux/enterpriselinux/centos.go @@ -19,7 +19,9 @@ func init() { return os.ID == "centos" }, func() interface{} { - return CentOS{} + linuxType := &CentOS{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/fedora.go b/configurer/linux/enterpriselinux/fedora.go index a29fcf8e..b799f8a3 100644 --- a/configurer/linux/enterpriselinux/fedora.go +++ b/configurer/linux/enterpriselinux/fedora.go @@ -19,7 +19,9 @@ func init() { return os.ID == "fedora" }, func() interface{} { - return Fedora{} + linuxType := &Fedora{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/oracle.go b/configurer/linux/enterpriselinux/oracle.go index 5811ca53..a8ec4ee3 100644 --- a/configurer/linux/enterpriselinux/oracle.go +++ b/configurer/linux/enterpriselinux/oracle.go @@ -19,7 +19,9 @@ func init() { return os.ID == "ol" }, func() interface{} { - return OracleLinux{} + linuxType := &OracleLinux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/rhel.go b/configurer/linux/enterpriselinux/rhel.go index 24a40c5a..c8a7b03c 100644 --- a/configurer/linux/enterpriselinux/rhel.go +++ b/configurer/linux/enterpriselinux/rhel.go @@ -1,6 +1,7 @@ package enterpriselinux import ( + "github.com/k0sproject/k0sctl/configurer" k0slinux "github.com/k0sproject/k0sctl/configurer/linux" "github.com/k0sproject/rig" "github.com/k0sproject/rig/os/registry" @@ -17,7 +18,9 @@ func init() { return os.ID == "rhel" }, func() interface{} { - return RHEL{} + linuxType := &RHEL{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/enterpriselinux/rocky.go b/configurer/linux/enterpriselinux/rocky.go index 23766bc3..ac7972a8 100644 --- a/configurer/linux/enterpriselinux/rocky.go +++ b/configurer/linux/enterpriselinux/rocky.go @@ -19,7 +19,9 @@ func init() { return os.ID == "rocky" }, func() interface{} { - return RockyLinux{} + linuxType := &RockyLinux{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/opensuse.go b/configurer/linux/opensuse.go index 81e7ea7f..bcf21b0d 100644 --- a/configurer/linux/opensuse.go +++ b/configurer/linux/opensuse.go @@ -1,6 +1,7 @@ package linux import ( + "github.com/k0sproject/k0sctl/configurer" "github.com/k0sproject/rig" "github.com/k0sproject/rig/os/registry" ) @@ -16,7 +17,9 @@ func init() { return os.ID == "opensuse" }, func() interface{} { - return OpenSUSE{} + linuxType := &OpenSUSE{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/slackware.go b/configurer/linux/slackware.go index 24118d6c..9a874f8c 100644 --- a/configurer/linux/slackware.go +++ b/configurer/linux/slackware.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/k0sproject/k0sctl/configurer" "github.com/k0sproject/rig" "github.com/k0sproject/rig/os" "github.com/k0sproject/rig/os/registry" @@ -21,7 +22,9 @@ func init() { return os.ID == "slackware" }, func() interface{} { - return Slackware{} + linuxType := &Slackware{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/sles.go b/configurer/linux/sles.go index 42df8e32..0313a8a0 100644 --- a/configurer/linux/sles.go +++ b/configurer/linux/sles.go @@ -1,6 +1,7 @@ package linux import ( + "github.com/k0sproject/k0sctl/configurer" "github.com/k0sproject/rig" "github.com/k0sproject/rig/os" "github.com/k0sproject/rig/os/linux" @@ -20,7 +21,9 @@ func init() { return os.ID == "sles" }, func() interface{} { - return SLES{} + linuxType := &SLES{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } diff --git a/configurer/linux/ubuntu.go b/configurer/linux/ubuntu.go index a10fd2d4..a9350ee1 100644 --- a/configurer/linux/ubuntu.go +++ b/configurer/linux/ubuntu.go @@ -1,6 +1,7 @@ package linux import ( + "github.com/k0sproject/k0sctl/configurer" "github.com/k0sproject/rig" "github.com/k0sproject/rig/os/registry" ) @@ -16,7 +17,9 @@ func init() { return os.ID == "ubuntu" }, func() interface{} { - return &Ubuntu{} + linuxType := &Ubuntu{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType }, ) } From 80462d647fa6831e5492bb716fd278e831ba3b60 Mon Sep 17 00:00:00 2001 From: Elias Werberich Date: Tue, 28 Sep 2021 12:54:54 +0000 Subject: [PATCH 2/5] Create path for k0s binary if it does not already exists --- configurer/linux.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configurer/linux.go b/configurer/linux.go index 19f4223c..9c6a3808 100644 --- a/configurer/linux.go +++ b/configurer/linux.go @@ -2,6 +2,7 @@ package configurer import ( "fmt" + "path" "regexp" "strconv" "strings" @@ -103,6 +104,10 @@ func (l Linux) DownloadK0s(h os.Host, version, arch string) error { return err } + if err := h.Execf(`install -m 0755 -o root -g root -d "%s"`, path.Dir(l.LinuxStaticConstants.K0sBinaryPath()), exec.Sudo(h)); err != nil { + return err + } + return h.Execf(`install -m 0750 -o root -g adm "%s" "%s"`, tmp, l.LinuxStaticConstants.K0sBinaryPath(), exec.Sudo(h)) } From efd6540beb7e011d8e0f9a565e0dd53fdc8d20fe Mon Sep 17 00:00:00 2001 From: Elias Werberich Date: Tue, 28 Sep 2021 12:54:59 +0000 Subject: [PATCH 3/5] Add support for FlatcarContainerLinux --- configurer/linux/flatcar.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 configurer/linux/flatcar.go diff --git a/configurer/linux/flatcar.go b/configurer/linux/flatcar.go new file mode 100644 index 00000000..9ffbbf47 --- /dev/null +++ b/configurer/linux/flatcar.go @@ -0,0 +1,36 @@ +package linux + +import ( + "errors" + + "github.com/k0sproject/k0sctl/configurer" + "github.com/k0sproject/rig" + "github.com/k0sproject/rig/os" + "github.com/k0sproject/rig/os/registry" +) + +type Flatcar struct { + BaseLinux + os.Linux +} + +func init() { + registry.RegisterOSModule( + func(os rig.OSVersion) bool { + return os.ID == "flatcar" + }, + func() interface{} { + linuxType := &Flatcar{} + linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + return linuxType + }, + ) +} + +func (l Flatcar) InstallPackage(h os.Host, pkg ...string) error { + return errors.New("FlatcarContainerLinux does not support installing packages manually") +} + +func (l Flatcar) K0sBinaryPath() string { + return "/opt/bin/k0s" +} From 0ab0d29ac64639f5edb16d0e52fdca79b5c35cc3 Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Mon, 18 Oct 2021 13:53:32 +0200 Subject: [PATCH 4/5] Rename struct holding path functions for linux --- configurer/linux.go | 20 +++++++------------ configurer/linux/alpine.go | 2 +- configurer/linux/archlinux.go | 2 +- configurer/linux/debian.go | 2 +- configurer/linux/enterpriselinux/almalinux.go | 2 +- configurer/linux/enterpriselinux/amazon.go | 2 +- configurer/linux/enterpriselinux/centos.go | 2 +- configurer/linux/enterpriselinux/fedora.go | 2 +- configurer/linux/enterpriselinux/oracle.go | 2 +- configurer/linux/enterpriselinux/rhel.go | 2 +- configurer/linux/enterpriselinux/rocky.go | 2 +- configurer/linux/flatcar.go | 2 +- configurer/linux/opensuse.go | 2 +- configurer/linux/slackware.go | 2 +- configurer/linux/sles.go | 2 +- configurer/linux/ubuntu.go | 2 +- 16 files changed, 22 insertions(+), 28 deletions(-) diff --git a/configurer/linux.go b/configurer/linux.go index 9c6a3808..dd7582b8 100644 --- a/configurer/linux.go +++ b/configurer/linux.go @@ -12,7 +12,7 @@ import ( ) // Static Constants Interface for overriding by distro-specific structs -type LinuxStaticConstants interface { +type PathFuncs interface { K0sBinaryPath() string K0sConfigPath() string K0sJoinTokenPath() string @@ -21,13 +21,7 @@ type LinuxStaticConstants interface { // Linux is a base module for various linux OS support packages type Linux struct { - LinuxStaticConstants -} - -func New() *Linux { - linuxType := &Linux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(LinuxStaticConstants) - return linuxType + PathFuncs } // NOTE The Linux struct does not embed rig/os.Linux because it will confuse @@ -63,7 +57,7 @@ func (l Linux) Chmod(h os.Host, path, chmod string) error { // K0sCmdf can be used to construct k0s commands in sprintf style. func (l Linux) K0sCmdf(template string, args ...interface{}) string { - return fmt.Sprintf("%s %s", l.LinuxStaticConstants.K0sBinaryPath(), fmt.Sprintf(template, args...)) + return fmt.Sprintf("%s %s", l.PathFuncs.K0sBinaryPath(), fmt.Sprintf(template, args...)) } // K0sBinaryPath returns the location of k0s binary @@ -104,16 +98,16 @@ func (l Linux) DownloadK0s(h os.Host, version, arch string) error { return err } - if err := h.Execf(`install -m 0755 -o root -g root -d "%s"`, path.Dir(l.LinuxStaticConstants.K0sBinaryPath()), exec.Sudo(h)); err != nil { + if err := h.Execf(`install -m 0755 -o root -g root -d "%s"`, path.Dir(l.PathFuncs.K0sBinaryPath()), exec.Sudo(h)); err != nil { return err } - return h.Execf(`install -m 0750 -o root -g adm "%s" "%s"`, tmp, l.LinuxStaticConstants.K0sBinaryPath(), exec.Sudo(h)) + return h.Execf(`install -m 0750 -o root -g adm "%s" "%s"`, tmp, l.PathFuncs.K0sBinaryPath(), exec.Sudo(h)) } // ReplaceK0sTokenPath replaces the config path in the service stub func (l Linux) ReplaceK0sTokenPath(h os.Host, spath string) error { - return h.Exec(fmt.Sprintf("sed -i 's^REPLACEME^%s^g' %s", l.LinuxStaticConstants.K0sJoinTokenPath(), spath)) + return h.Exec(fmt.Sprintf("sed -i 's^REPLACEME^%s^g' %s", l.PathFuncs.K0sJoinTokenPath(), spath)) } // FileContains returns true if a file contains the substring @@ -138,7 +132,7 @@ func (l Linux) KubeconfigPath() string { // KubectlCmdf returns a command line in sprintf manner for running kubectl on the host using the kubeconfig from KubeconfigPath func (l Linux) KubectlCmdf(s string, args ...interface{}) string { - return l.K0sCmdf(`kubectl --kubeconfig "%s" %s`, l.LinuxStaticConstants.KubeconfigPath(), fmt.Sprintf(s, args...)) + return l.K0sCmdf(`kubectl --kubeconfig "%s" %s`, l.PathFuncs.KubeconfigPath(), fmt.Sprintf(s, args...)) } // HTTPStatus makes a HTTP GET request to the url and returns the status code or an error diff --git a/configurer/linux/alpine.go b/configurer/linux/alpine.go index f121a462..b18d0a84 100644 --- a/configurer/linux/alpine.go +++ b/configurer/linux/alpine.go @@ -28,7 +28,7 @@ func init() { }, func() interface{} { linuxType := &Alpine{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/archlinux.go b/configurer/linux/archlinux.go index 99eed14f..8c4c2bd4 100644 --- a/configurer/linux/archlinux.go +++ b/configurer/linux/archlinux.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &Archlinux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/debian.go b/configurer/linux/debian.go index f7e7c47b..b3b59bb4 100644 --- a/configurer/linux/debian.go +++ b/configurer/linux/debian.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &Debian{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/almalinux.go b/configurer/linux/enterpriselinux/almalinux.go index 6992a4b6..3c800133 100644 --- a/configurer/linux/enterpriselinux/almalinux.go +++ b/configurer/linux/enterpriselinux/almalinux.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &AlmaLinux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/amazon.go b/configurer/linux/enterpriselinux/amazon.go index fdf55e3c..de5f0897 100644 --- a/configurer/linux/enterpriselinux/amazon.go +++ b/configurer/linux/enterpriselinux/amazon.go @@ -28,7 +28,7 @@ func init() { }, func() interface{} { linuxType := &AmazonLinux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/centos.go b/configurer/linux/enterpriselinux/centos.go index f8f9edb4..31ec2b59 100644 --- a/configurer/linux/enterpriselinux/centos.go +++ b/configurer/linux/enterpriselinux/centos.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &CentOS{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/fedora.go b/configurer/linux/enterpriselinux/fedora.go index b799f8a3..1412b6ac 100644 --- a/configurer/linux/enterpriselinux/fedora.go +++ b/configurer/linux/enterpriselinux/fedora.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &Fedora{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/oracle.go b/configurer/linux/enterpriselinux/oracle.go index a8ec4ee3..c0f64e6b 100644 --- a/configurer/linux/enterpriselinux/oracle.go +++ b/configurer/linux/enterpriselinux/oracle.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &OracleLinux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/rhel.go b/configurer/linux/enterpriselinux/rhel.go index c8a7b03c..8ca02555 100644 --- a/configurer/linux/enterpriselinux/rhel.go +++ b/configurer/linux/enterpriselinux/rhel.go @@ -19,7 +19,7 @@ func init() { }, func() interface{} { linuxType := &RHEL{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/enterpriselinux/rocky.go b/configurer/linux/enterpriselinux/rocky.go index ac7972a8..9cdc408a 100644 --- a/configurer/linux/enterpriselinux/rocky.go +++ b/configurer/linux/enterpriselinux/rocky.go @@ -20,7 +20,7 @@ func init() { }, func() interface{} { linuxType := &RockyLinux{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/flatcar.go b/configurer/linux/flatcar.go index 9ffbbf47..c5192d48 100644 --- a/configurer/linux/flatcar.go +++ b/configurer/linux/flatcar.go @@ -21,7 +21,7 @@ func init() { }, func() interface{} { linuxType := &Flatcar{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/opensuse.go b/configurer/linux/opensuse.go index bcf21b0d..a6d983c0 100644 --- a/configurer/linux/opensuse.go +++ b/configurer/linux/opensuse.go @@ -18,7 +18,7 @@ func init() { }, func() interface{} { linuxType := &OpenSUSE{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/slackware.go b/configurer/linux/slackware.go index 9a874f8c..ffac60ca 100644 --- a/configurer/linux/slackware.go +++ b/configurer/linux/slackware.go @@ -23,7 +23,7 @@ func init() { }, func() interface{} { linuxType := &Slackware{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/sles.go b/configurer/linux/sles.go index 0313a8a0..ed07da54 100644 --- a/configurer/linux/sles.go +++ b/configurer/linux/sles.go @@ -22,7 +22,7 @@ func init() { }, func() interface{} { linuxType := &SLES{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) diff --git a/configurer/linux/ubuntu.go b/configurer/linux/ubuntu.go index a9350ee1..b59ca5a7 100644 --- a/configurer/linux/ubuntu.go +++ b/configurer/linux/ubuntu.go @@ -18,7 +18,7 @@ func init() { }, func() interface{} { linuxType := &Ubuntu{} - linuxType.LinuxStaticConstants = interface{}(linuxType).(configurer.LinuxStaticConstants) + linuxType.PathFuncs = interface{}(linuxType).(configurer.PathFuncs) return linuxType }, ) From 0eacf6ece7e97464a7ec9a89848bb3c2111d420c Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Mon, 18 Oct 2021 13:56:19 +0200 Subject: [PATCH 5/5] Add test for linux path functions --- configurer/linux/linux_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 configurer/linux/linux_test.go diff --git a/configurer/linux/linux_test.go b/configurer/linux/linux_test.go new file mode 100644 index 00000000..88650a26 --- /dev/null +++ b/configurer/linux/linux_test.go @@ -0,0 +1,26 @@ +package linux + +import ( + "testing" + + "github.com/k0sproject/k0sctl/configurer" + "github.com/stretchr/testify/require" +) + +// TestPaths tests the slightly weird way to perform function overloading +func TestPaths(t *testing.T) { + fc := &Flatcar{} + fc.PathFuncs = interface{}(fc).(configurer.PathFuncs) + + ubuntu := &Ubuntu{} + ubuntu.PathFuncs = interface{}(ubuntu).(configurer.PathFuncs) + + require.Equal(t, "/opt/bin/k0s", fc.K0sBinaryPath()) + require.Equal(t, "/usr/local/bin/k0s", ubuntu.K0sBinaryPath()) + + require.Equal(t, "/opt/bin/k0s --help", fc.K0sCmdf("--help")) + require.Equal(t, "/usr/local/bin/k0s --help", ubuntu.K0sCmdf("--help")) + + require.Equal(t, "/var/lib/k0s/pki/admin.conf", fc.KubeconfigPath()) + require.Equal(t, "/var/lib/k0s/pki/admin.conf", ubuntu.KubeconfigPath()) +}