Skip to content

Commit

Permalink
support cluster reset event
Browse files Browse the repository at this point in the history
Signed-off-by: Nianyu Shen <[email protected]>
  • Loading branch information
nianyush committed Sep 27, 2024
1 parent 28f027e commit e811001
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 74 deletions.
4 changes: 2 additions & 2 deletions Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ ARG BASE_IMAGE=quay.io/kairos/core-opensuse-leap:v2.4.3
ARG IMAGE_REPOSITORY=quay.io/kairos

ARG LUET_VERSION=0.35.1
ARG GOLINT_VERSION=v1.56.2
ARG GOLANG_VERSION=1.22
ARG GOLINT_VERSION=v1.61.0
ARG GOLANG_VERSION=1.23

ARG RKE2_VERSION=latest
ARG BASE_IMAGE_NAME=$(echo $BASE_IMAGE | grep -o [^/]*: | rev | cut -c2- | rev)
Expand Down
9 changes: 4 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
module github.com/c3os-io/c3os/provider-rke2

go 1.22.5
go 1.23.1

require (
github.com/kairos-io/kairos-sdk v0.4.2
github.com/mudler/yip v1.9.4
github.com/kairos-io/kairos-sdk v0.5.0
github.com/mudler/go-pluggable v0.0.0-20230126220627-7710299a0ae5
github.com/mudler/yip v1.10.0
github.com/sirupsen/logrus v1.9.3
gopkg.in/yaml.v3 v3.0.1
sigs.k8s.io/yaml v1.4.0
Expand All @@ -19,14 +20,12 @@ require (
github.com/itchyny/gojq v0.12.16 // indirect
github.com/itchyny/timefmt-go v0.1.6 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/mudler/go-pluggable v0.0.0-20230126220627-7710299a0ae5 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/twpayne/go-vfs/v4 v4.3.0 // indirect
golang.org/x/sys v0.24.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
10 changes: 4 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ github.com/itchyny/gojq v0.12.16 h1:yLfgLxhIr/6sJNVmYfQjTIv0jGctu6/DgDoivmxTr7g=
github.com/itchyny/gojq v0.12.16/go.mod h1:6abHbdC2uB9ogMS38XsErnfqJ94UlngIJGlRAIj4jTM=
github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q=
github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg=
github.com/kairos-io/kairos-sdk v0.4.2 h1:tq0a6R9qSotatFt20q/+oIHJSN+XTQWji4XgHk5Vvlw=
github.com/kairos-io/kairos-sdk v0.4.2/go.mod h1:1x8VaVt1ppXxQUlNyDRksoDglR423hxfEtjx6qWDO7w=
github.com/kairos-io/kairos-sdk v0.5.0 h1:CtYz2WXe5huKkjPSro2J1kiLVjDr6T9909uckK17Bqw=
github.com/kairos-io/kairos-sdk v0.5.0/go.mod h1:RO5ad3gCd2O2zJE5mEnPHLUy/+fRKKQL4fe7xV6FtyA=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
Expand All @@ -51,8 +51,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mudler/go-pluggable v0.0.0-20230126220627-7710299a0ae5 h1:FaZD86+A9mVt7lh9glAryzQblMsbJYU2VnrdZ8yHlTs=
github.com/mudler/go-pluggable v0.0.0-20230126220627-7710299a0ae5/go.mod h1:WmKcT8ONmhDQIqQ+HxU+tkGWjzBEyY/KFO8LTGCu4AI=
github.com/mudler/yip v1.9.4 h1:yaiPKWG5kt/DTNCf7ZGfyWdb1j5c06zYqWF3F+SVKsE=
github.com/mudler/yip v1.9.4/go.mod h1:nqf8JFCq7a7rIkm7cSs+SOc8QbiyvVJ/xLbUw4GgzFs=
github.com/mudler/yip v1.10.0 h1:MwEIySEfSRRwTUz2BmQQpRn6+M7jqVGf/OldsepBvz0=
github.com/mudler/yip v1.10.0/go.mod h1:gwH7iGcr1Jimox2xKtN2AprEO00GzY7smvuycqCL7+Y=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
Expand Down Expand Up @@ -127,8 +127,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU=
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
Expand Down
6 changes: 5 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"github.com/c3os-io/c3os/provider-rke2/pkg/provider"
"github.com/kairos-io/kairos-sdk/clusterplugin"
"github.com/mudler/go-pluggable"
"github.com/sirupsen/logrus"
)

Expand All @@ -11,7 +12,10 @@ func main() {
Provider: provider.ClusterProvider,
}

if err := plugin.Run(); err != nil {
if err := plugin.Run(pluggable.FactoryPlugin{
EventType: clusterplugin.EventClusterReset,
PluginHandler: provider.HandleClusterReset,
}); err != nil {
logrus.Fatal(err)
}
}
12 changes: 0 additions & 12 deletions pkg/provider/mount.tmpl

This file was deleted.

49 changes: 1 addition & 48 deletions pkg/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import (
"net"
"path/filepath"
"strings"
"text/template"

_ "embed"

"github.com/c3os-io/c3os/provider-rke2/pkg/constants"
"github.com/c3os-io/c3os/provider-rke2/pkg/types"
"github.com/kairos-io/kairos-sdk/clusterplugin"
Expand All @@ -18,15 +18,9 @@ import (
kyaml "sigs.k8s.io/yaml"
)

//go:embed mount.tmpl
var mountTemplate string

func ClusterProvider(cluster clusterplugin.Cluster) yip.YipConfig {
var stages []yip.Stage
clusterRootPath := getClusterRootPath(cluster)
if len(clusterRootPath) > 0 && clusterRootPath != "/" {
stages = append(stages, rootPathMountStage(clusterRootPath))
}

rke2Config := types.RKE2Config{
Token: cluster.ClusterToken,
Expand Down Expand Up @@ -210,44 +204,3 @@ func getNodeCIDR() string {
func getClusterRootPath(cluster clusterplugin.Cluster) string {
return cluster.ProviderOptions[constants.ClusterRootPath]
}

func rootPathMountStage(rootPath string) yip.Stage {
mps := []types.MountPoint{
{
Name: "etc-rancher",
Source: filepath.Join(rootPath, "etc/rancher"),
Target: "/etc/rancher",
},
{
Name: "var-lib-rancher",
Source: filepath.Join(rootPath, "var/lib/rancher"),
Target: "/var/lib/rancher",
},
}

stage := yip.Stage{
Name: "Mount K3s data, conf directories",
}
for _, mp := range mps {
stage.Files = append(stage.Files, yip.File{
Path: filepath.Join(constants.RunSystemdSystemDir, fmt.Sprintf("%s.mount", mp.Name)),
Permissions: 0644,
Content: parseMountUnitFile(mp),
})

stage.Commands = append(stage.Commands,
fmt.Sprintf("mkdir -p %s", mp.Source),
fmt.Sprintf("mkdir -p %s", mp.Target),
fmt.Sprintf("systemctl enable --now %s.mount", mp.Name),
)
}

return stage
}

func parseMountUnitFile(mp types.MountPoint) string {
mount, _ := template.New("mount").Parse(mountTemplate)
var buf bytes.Buffer
_ = mount.Execute(&buf, mp)
return buf.String()
}
44 changes: 44 additions & 0 deletions pkg/provider/reset.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package provider

import (
"encoding/json"
"fmt"
"os/exec"
"path/filepath"

"github.com/kairos-io/kairos-sdk/bus"
"github.com/kairos-io/kairos-sdk/clusterplugin"
"github.com/mudler/go-pluggable"
"gopkg.in/yaml.v3"
)

func HandleClusterReset(event *pluggable.Event) pluggable.EventResponse {
var payload bus.EventPayload
var config clusterplugin.Config
var response pluggable.EventResponse

// parse the boot payload
if err := json.Unmarshal([]byte(event.Data), &payload); err != nil {
response.Error = fmt.Sprintf("failed to parse boot event: %s", err.Error())
return response
}

// parse config from boot payload
if err := yaml.Unmarshal([]byte(payload.Config), &config); err != nil {
response.Error = fmt.Sprintf("failed to parse config from boot event: %s", err.Error())
return response
}

if config.Cluster == nil {
return response
}

clusterRootPath := getClusterRootPath(*config.Cluster)
cmd := exec.Command("/bin/sh", "-c", filepath.Join(clusterRootPath, "/opt/rke2/scripts", "rke2-uninstall.sh"))
output, err := cmd.CombinedOutput()
if err != nil {
response.Error = fmt.Sprintf("failed to reset cluster: %s", string(output))
}

return response
}

0 comments on commit e811001

Please sign in to comment.