mirror of
https://github.com/lxc/incus
synced 2026-08-02 05:26:46 +00:00
100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
//go:build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
yaml "go.yaml.in/yaml/v4"
|
|
|
|
incus "github.com/lxc/incus/v7/client"
|
|
"github.com/lxc/incus/v7/internal/i18n"
|
|
"github.com/lxc/incus/v7/shared/api"
|
|
)
|
|
|
|
func (c *cmdAdminInit) runDump(d incus.InstanceServer) error {
|
|
currentServer, _, err := d.GetServer()
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
|
|
}
|
|
|
|
var config api.InitLocalPreseed
|
|
config.Config = currentServer.Config
|
|
|
|
// Only retrieve networks in the default project as the preseed format doesn't support creating
|
|
// projects at this time.
|
|
networks, err := d.UseProject(api.ProjectDefaultName).GetNetworks()
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server network configuration for project %q: %w"), api.ProjectDefaultName, err)
|
|
}
|
|
|
|
for _, network := range networks {
|
|
// Only list managed networks.
|
|
if !network.Managed {
|
|
continue
|
|
}
|
|
|
|
networksPost := api.InitNetworksProjectPost{}
|
|
networksPost.Config = network.Config
|
|
networksPost.Description = network.Description
|
|
networksPost.Name = network.Name
|
|
networksPost.Type = network.Type
|
|
networksPost.Project = api.ProjectDefaultName
|
|
|
|
config.Networks = append(config.Networks, networksPost)
|
|
}
|
|
|
|
storagePools, err := d.GetStoragePools()
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
|
|
}
|
|
|
|
for _, storagePool := range storagePools {
|
|
storagePoolsPost := api.StoragePoolsPost{}
|
|
storagePoolsPost.Config = storagePool.Config
|
|
storagePoolsPost.Description = storagePool.Description
|
|
storagePoolsPost.Name = storagePool.Name
|
|
storagePoolsPost.Driver = storagePool.Driver
|
|
|
|
config.StoragePools = append(config.StoragePools, storagePoolsPost)
|
|
}
|
|
|
|
profiles, err := d.GetProfiles()
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
|
|
}
|
|
|
|
for _, profile := range profiles {
|
|
profilesPost := api.InitProfileProjectPost{}
|
|
profilesPost.Config = profile.Config
|
|
profilesPost.Description = profile.Description
|
|
profilesPost.Devices = profile.Devices
|
|
profilesPost.Name = profile.Name
|
|
|
|
config.Profiles = append(config.Profiles, profilesPost)
|
|
}
|
|
|
|
projects, err := d.GetProjects()
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
|
|
}
|
|
|
|
for _, project := range projects {
|
|
projectsPost := api.ProjectsPost{}
|
|
projectsPost.Config = project.Config
|
|
projectsPost.Description = project.Description
|
|
projectsPost.Name = project.Name
|
|
|
|
config.Projects = append(config.Projects, projectsPost)
|
|
}
|
|
|
|
out, err := yaml.Dump(config, yaml.WithV2Defaults())
|
|
if err != nil {
|
|
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
|
|
}
|
|
|
|
fmt.Printf("%s\n", out)
|
|
|
|
return nil
|
|
}
|