Remove runtime-bundle image dependencies
Hard-cut banger away from source-checkout runtime bundles as an implicit source of\nimage and host defaults. Managed images now own their full boot set,\nimage build starts from an existing registered image, and daemon startup\nno longer synthesizes a default image from host paths.\n\nResolve Firecracker from PATH or firecracker_bin, make SSH keys config-owned\nwith an auto-managed XDG default, replace the external name generator and\npackage manifests with Go code, and keep the vsock helper as a companion\nbinary instead of a user-managed runtime asset.\n\nUpdate the manual scripts, web/CLI forms, config surface, and docs around\nthe new build/manual flow and explicit image registration semantics.\n\nValidation: GOCACHE=/tmp/banger-gocache go test ./..., bash -n scripts/*.sh,\nand make build.
This commit is contained in:
parent
01c7cb5e65
commit
572bf32424
44 changed files with 1194 additions and 3456 deletions
|
|
@ -86,7 +86,7 @@ type vmSetForm struct {
|
|||
|
||||
type imageBuildForm struct {
|
||||
Name string
|
||||
BaseRootfs string
|
||||
FromImage string
|
||||
Size string
|
||||
KernelPath string
|
||||
InitrdPath string
|
||||
|
|
@ -101,7 +101,6 @@ type imageRegisterForm struct {
|
|||
KernelPath string
|
||||
InitrdPath string
|
||||
ModulesDir string
|
||||
PackagesPath string
|
||||
Docker bool
|
||||
}
|
||||
|
||||
|
|
@ -524,13 +523,7 @@ func (s *Server) handleImageList(w http.ResponseWriter, r *http.Request) error {
|
|||
}
|
||||
|
||||
func (s *Server) handleImageBuildForm(w http.ResponseWriter, r *http.Request) error {
|
||||
cfg := s.backend.Config()
|
||||
return s.renderImageBuildPage(w, r, imageBuildForm{
|
||||
BaseRootfs: cfg.DefaultBaseRootfs,
|
||||
KernelPath: cfg.DefaultKernel,
|
||||
InitrdPath: cfg.DefaultInitrd,
|
||||
ModulesDir: cfg.DefaultModulesDir,
|
||||
}, "")
|
||||
return s.renderImageBuildPage(w, r, imageBuildForm{}, "")
|
||||
}
|
||||
|
||||
func (s *Server) renderImageBuildPage(w http.ResponseWriter, r *http.Request, form imageBuildForm, formErr string) error {
|
||||
|
|
@ -566,12 +559,7 @@ func (s *Server) handleImageBuild(w http.ResponseWriter, r *http.Request) error
|
|||
}
|
||||
|
||||
func (s *Server) handleImageRegisterForm(w http.ResponseWriter, r *http.Request) error {
|
||||
cfg := s.backend.Config()
|
||||
return s.renderImageRegisterPage(w, r, imageRegisterForm{
|
||||
KernelPath: cfg.DefaultKernel,
|
||||
InitrdPath: cfg.DefaultInitrd,
|
||||
ModulesDir: cfg.DefaultModulesDir,
|
||||
}, "")
|
||||
return s.renderImageRegisterPage(w, r, imageRegisterForm{}, "")
|
||||
}
|
||||
|
||||
func (s *Server) renderImageRegisterPage(w http.ResponseWriter, r *http.Request, form imageRegisterForm, formErr string) error {
|
||||
|
|
@ -808,9 +796,6 @@ func (s *Server) pickerRoots() []pickerRoot {
|
|||
if layout.StateDir != "" {
|
||||
roots = append(roots, pickerRoot{Label: "State", Path: layout.StateDir})
|
||||
}
|
||||
if runtimeDir := s.backend.Config().RuntimeDir; runtimeDir != "" {
|
||||
roots = append(roots, pickerRoot{Label: "Runtime", Path: runtimeDir})
|
||||
}
|
||||
result := make([]pickerRoot, 0, len(roots))
|
||||
for _, root := range roots {
|
||||
root.Path = filepath.Clean(root.Path)
|
||||
|
|
@ -998,7 +983,7 @@ func (s *Server) parseImageBuildForm(r *http.Request) (imageBuildForm, api.Image
|
|||
}
|
||||
form := imageBuildForm{
|
||||
Name: strings.TrimSpace(r.FormValue("name")),
|
||||
BaseRootfs: strings.TrimSpace(r.FormValue("base_rootfs")),
|
||||
FromImage: strings.TrimSpace(r.FormValue("from_image")),
|
||||
Size: strings.TrimSpace(r.FormValue("size")),
|
||||
KernelPath: strings.TrimSpace(r.FormValue("kernel_path")),
|
||||
InitrdPath: strings.TrimSpace(r.FormValue("initrd_path")),
|
||||
|
|
@ -1007,7 +992,7 @@ func (s *Server) parseImageBuildForm(r *http.Request) (imageBuildForm, api.Image
|
|||
}
|
||||
params := api.ImageBuildParams{
|
||||
Name: form.Name,
|
||||
BaseRootfs: form.BaseRootfs,
|
||||
FromImage: form.FromImage,
|
||||
Size: form.Size,
|
||||
KernelPath: form.KernelPath,
|
||||
InitrdPath: form.InitrdPath,
|
||||
|
|
@ -1028,7 +1013,6 @@ func (s *Server) parseImageRegisterForm(r *http.Request) (imageRegisterForm, api
|
|||
KernelPath: strings.TrimSpace(r.FormValue("kernel_path")),
|
||||
InitrdPath: strings.TrimSpace(r.FormValue("initrd_path")),
|
||||
ModulesDir: strings.TrimSpace(r.FormValue("modules_dir")),
|
||||
PackagesPath: strings.TrimSpace(r.FormValue("packages_path")),
|
||||
Docker: r.FormValue("docker") == "on",
|
||||
}
|
||||
params := api.ImageRegisterParams{
|
||||
|
|
@ -1038,7 +1022,6 @@ func (s *Server) parseImageRegisterForm(r *http.Request) (imageRegisterForm, api
|
|||
KernelPath: form.KernelPath,
|
||||
InitrdPath: form.InitrdPath,
|
||||
ModulesDir: form.ModulesDir,
|
||||
PackagesPath: form.PackagesPath,
|
||||
Docker: form.Docker,
|
||||
}
|
||||
return form, params, nil
|
||||
|
|
|
|||
|
|
@ -33,20 +33,14 @@
|
|||
{{end}}
|
||||
|
||||
{{define "image_build_content"}}
|
||||
<p class="muted">Build a managed image from a base rootfs, then redirect into the async build progress view.</p>
|
||||
<p class="muted">Build a managed image from an existing registered image, then redirect into the async build progress view.</p>
|
||||
{{if .ErrorMessage}}
|
||||
<div class="inline-error">{{.ErrorMessage}}</div>
|
||||
{{end}}
|
||||
<form method="post" action="/images/build" class="form-grid">
|
||||
{{template "csrf_field" .}}
|
||||
<label><span>Name</span><input type="text" name="name" value="{{.ImageBuildForm.Name}}" placeholder="generated when empty"></label>
|
||||
<label class="picker-field">
|
||||
<span>Base Rootfs</span>
|
||||
<div class="picker-input">
|
||||
<input type="text" name="base_rootfs" value="{{.ImageBuildForm.BaseRootfs}}" data-picker-input>
|
||||
<button type="button" class="button secondary" data-picker-target="base_rootfs" data-picker-kind="file">Browse</button>
|
||||
</div>
|
||||
</label>
|
||||
<label><span>From Image</span><input type="text" name="from_image" value="{{.ImageBuildForm.FromImage}}" placeholder="image id or name"></label>
|
||||
<label><span>Size Override</span><input type="text" name="size" value="{{.ImageBuildForm.Size}}" placeholder="optional"></label>
|
||||
<label class="picker-field">
|
||||
<span>Kernel Path</span>
|
||||
|
|
@ -123,13 +117,6 @@
|
|||
<button type="button" class="button secondary" data-picker-target="modules_dir" data-picker-kind="dir">Browse</button>
|
||||
</div>
|
||||
</label>
|
||||
<label class="picker-field">
|
||||
<span>Packages Manifest</span>
|
||||
<div class="picker-input">
|
||||
<input type="text" name="packages_path" value="{{.ImageRegisterForm.PackagesPath}}" data-picker-input>
|
||||
<button type="button" class="button secondary" data-picker-target="packages_path" data-picker-kind="file">Browse</button>
|
||||
</div>
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="docker" {{if .ImageRegisterForm.Docker}}checked{{end}}>
|
||||
<span>Mark image as Docker-ready</span>
|
||||
|
|
@ -167,7 +154,6 @@
|
|||
<dl>
|
||||
<dt>Created</dt><dd>{{relativeTime .Image.CreatedAt}}</dd>
|
||||
<dt>Updated</dt><dd>{{relativeTime .Image.UpdatedAt}}</dd>
|
||||
<dt>Packages</dt><dd>{{if .Image.PackagesPath}}<code>{{.Image.PackagesPath}}</code>{{else}}-{{end}}</dd>
|
||||
<dt>Artifact Dir</dt><dd>{{if .Image.ArtifactDir}}<code>{{.Image.ArtifactDir}}</code>{{else}}-{{end}}</dd>
|
||||
</dl>
|
||||
</article>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue