Bugfix: cloning a site overlay when parent dir does not exist
Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
@@ -17,14 +17,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
- Restore default idempotency of `PUT /api/nodes/{id}`
|
||||
- `DELETE /api/overlays/{name}?force=true` can delete overlays that are in use
|
||||
|
||||
### Changed
|
||||
|
||||
- `warewulfd` overlay autobuild rebuilds overlays after node discovery. #1468
|
||||
### Fixed
|
||||
|
||||
- Improved netplan support. #1873
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed a bug when cloning an overlay to site when parent is missing
|
||||
|
||||
## v4.6.2, 2025-07-09
|
||||
|
||||
### Added
|
||||
|
||||
@@ -68,8 +68,8 @@ func (overlay Overlay) CloneSiteOverlay() (siteOverlay Overlay, err error) {
|
||||
if siteOverlay.Exists() {
|
||||
return siteOverlay, fmt.Errorf("site overlay already exists: %s", siteOverlay.Name())
|
||||
}
|
||||
if !util.IsDir(filepath.Dir(overlay.Path())) {
|
||||
if err := os.MkdirAll(filepath.Dir(overlay.Path()), 0o755); err != nil {
|
||||
if !util.IsDir(filepath.Dir(siteOverlay.Path())) {
|
||||
if err := os.MkdirAll(filepath.Dir(siteOverlay.Path()), 0o755); err != nil {
|
||||
return siteOverlay, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -330,7 +330,7 @@ func FindOverlays() (overlayList []string) {
|
||||
files = append(files, distfiles...)
|
||||
}
|
||||
if sitefiles, err := os.ReadDir(controller.Paths.SiteOverlaydir()); err != nil {
|
||||
wwlog.Warn("error reading overalys from %s: %s", controller.Paths.SiteOverlaydir(), err)
|
||||
wwlog.Warn("error reading overlays from %s: %s", controller.Paths.SiteOverlaydir(), err)
|
||||
} else {
|
||||
files = append(files, sitefiles...)
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ func TestOverlayAPI(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.NoError(t, resp.Body.Close())
|
||||
|
||||
assert.JSONEq(t, `{"files":["/email.ww"], "site":false}`, string(body))
|
||||
assert.JSONEq(t, `{"files":["/email.ww"], "site":true}`, string(body))
|
||||
|
||||
// get again
|
||||
req, err = http.NewRequest(http.MethodGet, srv.URL+"/api/overlays/testoverlay/file?path=email.ww", nil)
|
||||
@@ -155,7 +155,7 @@ func TestOverlayAPI(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.NoError(t, resp.Body.Close())
|
||||
|
||||
assert.JSONEq(t, `{"test":{"files":null, "site":true},"testoverlay":{"files":["/email.ww"], "site":false}}`, string(body))
|
||||
assert.JSONEq(t, `{"test":{"files":null, "site":true},"testoverlay":{"files":["/email.ww"], "site":true}}`, string(body))
|
||||
})
|
||||
|
||||
t.Run("test delete overlay file", func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user