mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
feat(region,host,climc): support container post image overlay (#21942)
This commit is contained in:
@@ -23,9 +23,11 @@ import (
|
||||
"github.com/cheggaaa/pb/v3"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/util/printutils"
|
||||
|
||||
"yunion.io/x/onecloud/cmd/climc/shell"
|
||||
imageapi "yunion.io/x/onecloud/pkg/apis/image"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modules/identity"
|
||||
modules "yunion.io/x/onecloud/pkg/mcclient/modules/image"
|
||||
@@ -62,6 +64,9 @@ type ImageOptionalOptions struct {
|
||||
DisableUsbKbd bool `help:"Disable usb keyboard on this image(for hypervisor kvm)"`
|
||||
BootMode string `help:"UEFI support" choices:"UEFI|BIOS"`
|
||||
VdiProtocol string `help:"VDI protocol" choices:"vnc|spice"`
|
||||
// for container usage
|
||||
UsedByPostOverlay bool `help:"Used by container post-overlay"`
|
||||
InternalPathMap []string `help:"Internal path map, e.g. 'com.taobao.taobao/10.42.12/data/data/com.taobao.taobao:/data/data/com.taobao.taobao'"`
|
||||
}
|
||||
|
||||
func addImageOptionalOptions(s *mcclient.ClientSession, params *jsonutils.JSONDict, args ImageOptionalOptions) error {
|
||||
@@ -106,50 +111,65 @@ func addImageOptionalOptions(s *mcclient.ClientSession, params *jsonutils.JSONDi
|
||||
}
|
||||
params.Add(jsonutils.NewString(projectId), "owner")
|
||||
}
|
||||
keyProperties := "properties"
|
||||
if len(args.OsType) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsType), "properties", "os_type")
|
||||
params.Add(jsonutils.NewString(args.OsType), keyProperties, "os_type")
|
||||
}
|
||||
if len(args.OsDist) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsDist), "properties", "os_distribution")
|
||||
params.Add(jsonutils.NewString(args.OsDist), keyProperties, "os_distribution")
|
||||
}
|
||||
if len(args.OsVersion) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsVersion), "properties", "os_version")
|
||||
params.Add(jsonutils.NewString(args.OsVersion), keyProperties, "os_version")
|
||||
}
|
||||
if len(args.OsCodename) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsCodename), "properties", "os_codename")
|
||||
params.Add(jsonutils.NewString(args.OsCodename), keyProperties, "os_codename")
|
||||
}
|
||||
if len(args.OsArch) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsArch), "properties", "os_arch")
|
||||
params.Add(jsonutils.NewString(args.OsArch), keyProperties, "os_arch")
|
||||
params.Add(jsonutils.NewString(args.OsArch), "os_arch")
|
||||
}
|
||||
if len(args.OsLang) > 0 {
|
||||
params.Add(jsonutils.NewString(args.OsLang), "properties", "os_language")
|
||||
params.Add(jsonutils.NewString(args.OsLang), keyProperties, "os_language")
|
||||
}
|
||||
if args.Preference > 0 {
|
||||
params.Add(jsonutils.NewString(fmt.Sprintf("%d", args.Preference)), "properties", "preference")
|
||||
}
|
||||
if len(args.Notes) > 0 {
|
||||
params.Add(jsonutils.NewString(args.Notes), "properties", "notes")
|
||||
params.Add(jsonutils.NewString(args.Notes), keyProperties, "notes")
|
||||
}
|
||||
if len(args.DiskDriver) > 0 {
|
||||
params.Add(jsonutils.NewString(args.DiskDriver), "properties", "disk_driver")
|
||||
params.Add(jsonutils.NewString(args.DiskDriver), keyProperties, "disk_driver")
|
||||
}
|
||||
if len(args.NetDriver) > 0 {
|
||||
params.Add(jsonutils.NewString(args.NetDriver), "properties", "net_driver")
|
||||
params.Add(jsonutils.NewString(args.NetDriver), keyProperties, "net_driver")
|
||||
}
|
||||
if len(args.Hypervisor) > 0 {
|
||||
params.Add(jsonutils.NewString(strings.Join(args.Hypervisor, ",")), "properties", "hypervisor")
|
||||
}
|
||||
if args.DisableUsbKbd {
|
||||
params.Add(jsonutils.NewString("true"), "properties", "disable_usb_kbd")
|
||||
params.Add(jsonutils.NewString("true"), keyProperties, "disable_usb_kbd")
|
||||
}
|
||||
if args.BootMode == "UEFI" {
|
||||
params.Add(jsonutils.JSONTrue, "properties", "uefi_support")
|
||||
params.Add(jsonutils.JSONTrue, keyProperties, "uefi_support")
|
||||
} else if args.BootMode == "BIOS" {
|
||||
params.Add(jsonutils.JSONFalse, "properties", "uefi_support")
|
||||
params.Add(jsonutils.JSONFalse, keyProperties, "uefi_support")
|
||||
}
|
||||
if len(args.VdiProtocol) > 0 {
|
||||
params.Add(jsonutils.NewString(args.VdiProtocol), "properties", "vdi_protocol")
|
||||
params.Add(jsonutils.NewString(args.VdiProtocol), keyProperties, "vdi_protocol")
|
||||
}
|
||||
if args.UsedByPostOverlay {
|
||||
params.Add(jsonutils.NewString("true"), keyProperties, imageapi.IMAGE_USED_BY_POST_OVERLAY)
|
||||
}
|
||||
if len(args.InternalPathMap) > 0 {
|
||||
dirMap := make(map[string]string)
|
||||
for _, dir := range args.InternalPathMap {
|
||||
parts := strings.Split(dir, ":")
|
||||
if len(parts) != 2 {
|
||||
return errors.Errorf("internal dir format error: %s", dir)
|
||||
}
|
||||
dirMap[parts[0]] = parts[1]
|
||||
}
|
||||
params.Add(jsonutils.NewString(jsonutils.Marshal(dirMap).String()), keyProperties, imageapi.IMAGE_INTERNAL_PATH_MAP)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user