Skip to content

Commit

Permalink
Create empty backup directory when mirror directory is empty
Browse files Browse the repository at this point in the history
Signed-off-by: Philip Laine <philip.laine@gmail.com>
  • Loading branch information
phillebaba committed Oct 13, 2024
1 parent f9d2a10 commit cdffff4
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed

- [#603](https://github.com/spegel-org/spegel/pull/603) Fix append to backup always happening.
- [#604](https://github.com/spegel-org/spegel/pull/604) Create empty backup directory when mirror directory is empty.

### Security

Expand Down
9 changes: 3 additions & 6 deletions pkg/oci/containerd.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,20 +410,17 @@ func validateRegistries(urls []url.URL) error {

func backupConfig(log logr.Logger, fs afero.Fs, configPath string) error {
backupDirPath := path.Join(configPath, backupDir)
_, err := fs.Stat(backupDirPath)
if err != nil && !os.IsNotExist(err) {
ok, err := afero.DirExists(fs, backupDirPath)
if err != nil {
return err
}
if err == nil {
if ok {
return nil
}
files, err := afero.ReadDir(fs, configPath)
if err != nil {
return err
}
if len(files) == 0 {
return nil
}
err = fs.MkdirAll(backupDirPath, 0o755)
if err != nil {
return err
Expand Down
41 changes: 36 additions & 5 deletions pkg/oci/containerd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

eventtypes "github.com/containerd/containerd/api/events"
"github.com/containerd/typeurl/v2"
"github.com/go-logr/logr"
"github.com/spf13/afero"
"github.com/stretchr/testify/require"
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
Expand Down Expand Up @@ -92,6 +93,38 @@ func TestVerifyStatusResponse(t *testing.T) {
}
}

func TestBackupConfig(t *testing.T) {
t.Parallel()

log := logr.Discard()

fs := afero.NewMemMapFs()
err := fs.MkdirAll("/config", 0o755)
require.NoError(t, err)
err = backupConfig(log, fs, "/config")
require.NoError(t, err)
ok, err := afero.DirExists(fs, "/config/_backup/")
require.NoError(t, err)
require.True(t, ok)
files, err := afero.ReadDir(fs, "/config/_backup")
require.NoError(t, err)
require.Empty(t, files)

fs = afero.NewMemMapFs()
err = fs.MkdirAll("/config", 0o755)
require.NoError(t, err)
err = afero.WriteFile(fs, "/config/test.txt", []byte("Hello World"), 0o644)
require.NoError(t, err)
err = backupConfig(log, fs, "/config/")
require.NoError(t, err)
ok, err = afero.DirExists(fs, "/config/_backup/")
require.NoError(t, err)
require.True(t, ok)
files, err = afero.ReadDir(fs, "/config/_backup/")
require.NoError(t, err)
require.Len(t, files, 1)
}

func TestCreateFilter(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -450,11 +483,9 @@ capabilities = ['pull', 'resolve']`,
}
err := AddMirrorConfiguration(context.TODO(), fs, registryConfigPath, tt.registries, tt.mirrors, tt.resolveTags, tt.appendToBackup)
require.NoError(t, err)
if len(tt.existingFiles) == 0 {
ok, err := afero.DirExists(fs, "/etc/containerd/certs.d/_backup")
require.NoError(t, err)
require.False(t, ok)
}
ok, err := afero.DirExists(fs, "/etc/containerd/certs.d/_backup")
require.NoError(t, err)
require.True(t, ok)
err = afero.Walk(fs, registryConfigPath, func(path string, fi iofs.FileInfo, _ error) error {
if fi.IsDir() {
return nil
Expand Down

0 comments on commit cdffff4

Please sign in to comment.