Skip to content

Commit

Permalink
Merge pull request #382 from kairos-io/fix-uki-upgrade
Browse files Browse the repository at this point in the history
Skip dirs in copyArtifactSetRole and replace only basename
  • Loading branch information
jimmykarily authored Jun 18, 2024
2 parents fd2f83d + 046f687 commit 81f9756
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 4 deletions.
22 changes: 18 additions & 4 deletions pkg/uki/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"io"
"os"
"path/filepath"
"strings"

"github.com/kairos-io/kairos-agent/v2/pkg/constants"
Expand Down Expand Up @@ -35,9 +36,17 @@ func overwriteArtifactSetRole(fs v1.FS, dir, oldRole, newRole string, logger sdk
}

// copy the source file but rename the base name to as
func copyArtifact(source, oldRole, newRole string) (string, error) {
newName := strings.ReplaceAll(source, oldRole, newRole)
return newName, copyFile(source, newName)
func copyArtifact(fs v1.FS, source, oldRole, newRole string) (string, error) {
dir := filepath.Dir(source)
base := filepath.Base(source)

// Replace the substring in the base name
newBase := strings.ReplaceAll(base, oldRole, newRole)

// Join the directory and the new base name
newName := filepath.Join(dir, newBase)

return newName, fsutils.Copy(fs, source, newName)
}

func removeArtifactSetWithRole(fs v1.FS, artifactDir, role string) error {
Expand All @@ -55,11 +64,16 @@ func copyArtifactSetRole(fs v1.FS, artifactDir, oldRole, newRole string, logger
if err != nil {
return err
}

if info.IsDir() {
return nil
}

if !strings.HasPrefix(info.Name(), oldRole) {
return nil
}

newPath, err := copyArtifact(path, oldRole, newRole)
newPath, err := copyArtifact(fs, path, oldRole, newRole)
if err != nil {
return fmt.Errorf("copying artifact from %s to %s: %w", path, newPath, err)
}
Expand Down
64 changes: 64 additions & 0 deletions pkg/uki/common_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package uki

import (
"bytes"
"os"

cnst "github.com/kairos-io/kairos-agent/v2/pkg/constants"
fsutils "github.com/kairos-io/kairos-agent/v2/pkg/utils/fs"
sdkTypes "github.com/kairos-io/kairos-sdk/types"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/twpayne/go-vfs/v4"
"github.com/twpayne/go-vfs/v4/vfst"
)

var _ = Describe("Common functions tests", func() {
Describe("copyArtifactSetRole", func() {
var fs vfs.FS
var err error
var memLog *bytes.Buffer
var logger sdkTypes.KairosLogger

BeforeEach(func() {
fs, _, err = vfst.NewTestFS(map[string]interface{}{})
Expect(err).ToNot(HaveOccurred())

logger = sdkTypes.NewBufferLogger(memLog)
logger.SetLevel("debug")

Expect(fsutils.MkdirAll(fs, "/active", cnst.DirPerm)).ToNot(HaveOccurred())
Expect(fsutils.MkdirAll(fs, "/other", cnst.DirPerm)).ToNot(HaveOccurred())

f, err := fs.Create("/other/active.efi")
Expect(err).ToNot(HaveOccurred())

_, err = os.Stat(f.Name())
Expect(err).ToNot(HaveOccurred())

f, err = fs.Create("/other/other.efi")
Expect(err).ToNot(HaveOccurred())

_, err = os.Stat(f.Name())
Expect(err).ToNot(HaveOccurred())
})

It("skips directories", func() {
err = copyArtifactSetRole(fs, "/", "active", "passive", logger)
Expect(err).ToNot(HaveOccurred())
})

It("replaces only the base file name", func() {
err = copyArtifactSetRole(fs, "/other", "other", "newother", logger)
Expect(err).ToNot(HaveOccurred())

glob, _ := fs.Glob("/other/*")
Expect(glob).To(HaveExactElements([]string{
"/other/active.efi",
"/other/newother.efi",
"/other/other.efi",
}))
})
})
})
13 changes: 13 additions & 0 deletions pkg/uki/suite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package uki_test

import (
"testing"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

func TestActionSuite(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Uki test suite")
}

0 comments on commit 81f9756

Please sign in to comment.