diff --git a/pkg/apis/compute/disk.go b/pkg/apis/compute/disk.go index d397d8a178..8ac1e57679 100644 --- a/pkg/apis/compute/disk.go +++ b/pkg/apis/compute/disk.go @@ -359,10 +359,11 @@ type DiskSnapshotpolicyInput struct { } type DiskRebuildInput struct { - BackupId *string `json:"backup_id,allowempty"` - TemplateId *string `json:"template_id,allowempty"` - Size *string `json:"size,allowempty"` - Fs *string `json:"fs,allowempty"` + BackupId *string `json:"backup_id,allowempty"` + TemplateId *string `json:"template_id,allowempty"` + Size *string `json:"size,allowempty"` + Fs *string `json:"fs,allowempty"` + FsFeatures *DiskFsFeatures `json:"fs_features,allowempty"` } type DiskFsExt4Features struct { @@ -370,8 +371,14 @@ type DiskFsExt4Features struct { ReservedBlocksPercentage int `json:"reserved_blocks_percentage"` } +type DiskFsF2fsFeatures struct { + CaseInsensitive bool `json:"case_insensitive"` + OverprovisionRatioPercentage int `json:"overprovision_ratio_percentage"` +} + type DiskFsFeatures struct { Ext4 *DiskFsExt4Features `json:"ext4"` + F2fs *DiskFsF2fsFeatures `json:"f2fs"` } func (d *DiskFsFeatures) String() string { diff --git a/pkg/cloudcommon/cmdline/parser.go b/pkg/cloudcommon/cmdline/parser.go index e4f252271d..190205ddd5 100644 --- a/pkg/cloudcommon/cmdline/parser.go +++ b/pkg/cloudcommon/cmdline/parser.go @@ -166,6 +166,16 @@ func ParseDiskConfig(diskStr string, idx int) (*compute.DiskConfig, error) { return nil, errors.Errorf("invalid feature %s of %s", feature, diskConfig.Fs) } } + if diskConfig.Fs == "f2fs" { + if diskConfig.FsFeatures.F2fs == nil { + diskConfig.FsFeatures.F2fs = &compute.DiskFsF2fsFeatures{} + } + if feature == "casefold" { + diskConfig.FsFeatures.F2fs.CaseInsensitive = true + } else { + return nil, errors.Errorf("invalid feature %s of %s", feature, diskConfig.Fs) + } + } } case "format": if !utils.IsInStringArray(str, osprofile.IMAGE_FORMAT_TYPES) { diff --git a/pkg/compute/container_drivers/volume_mount/disk.go b/pkg/compute/container_drivers/volume_mount/disk.go index 1134192ac0..8cda1d24ae 100644 --- a/pkg/compute/container_drivers/volume_mount/disk.go +++ b/pkg/compute/container_drivers/volume_mount/disk.go @@ -102,6 +102,12 @@ func (d disk) validateCaseInsensitive(disk *models.SDisk, vm *apis.ContainerVolu if !disk.FsFeatures.Ext4.CaseInsensitive { return httperrors.NewInputParameterError("disk(%s) fs_features.ext4.case_insensitive is not set", disk.GetId()) } + if disk.FsFeatures.F2fs == nil { + return httperrors.NewInputParameterError("disk(%s) fs_features.f2fs is not set", disk.GetId()) + } + if !disk.FsFeatures.F2fs.CaseInsensitive { + return httperrors.NewInputParameterError("disk(%s) fs_features.f2fs.case_insensitive is not set", disk.GetId()) + } if vm.Overlay != nil { return httperrors.NewInputParameterError("can't use case_insensitive and overlay at the same time") } diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index fbd595b340..44a13ed70d 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -649,6 +649,14 @@ func (manager *SDiskManager) ValidateFsFeatures(fsType string, feature *api.Disk return httperrors.NewInputParameterError("ext4.reserved_blocks_percentage must in range [1, 99]") } } + if feature.F2fs != nil { + if fsType != "f2fs" { + return httperrors.NewInputParameterError("only f2fs fs can set fs_features.f2fs, current is %q", fsType) + } + if feature.F2fs.OverprovisionRatioPercentage < 0 || feature.F2fs.OverprovisionRatioPercentage >= 100 { + return httperrors.NewInputParameterError("f2fs.reserved_blocks_percentage must in range [1, 99]") + } + } return nil } @@ -3272,6 +3280,15 @@ func (disk *SDisk) resetDiskinfo( if len(disk.FsFormat) == 0 { return errors.Wrap(errors.ErrInvalidStatus, "fs_format must be set") } + if input.Fs != nil { + if disk.FsFeatures != nil { + err := DiskManager.ValidateFsFeatures(*input.Fs, input.FsFeatures) + if err != nil { + return err + } + } + } + if input.TemplateId != nil { if len(*input.TemplateId) > 0 { imageObj, err := CachedimageManager.FetchByIdOrName(ctx, userCred, *input.TemplateId) @@ -3320,6 +3337,7 @@ func (disk *SDisk) resetDiskinfo( } if input.Fs != nil { disk.FsFormat = *input.Fs + disk.FsFeatures = input.FsFeatures } return nil }) diff --git a/pkg/hostman/diskutils/fsutils/fsutils.go b/pkg/hostman/diskutils/fsutils/fsutils.go index 6e141f213a..304ac39d97 100644 --- a/pkg/hostman/diskutils/fsutils/fsutils.go +++ b/pkg/hostman/diskutils/fsutils/fsutils.go @@ -441,7 +441,19 @@ func FormatPartition(path, fs, uuid string, fsFeatures *apis.FsFeatures) error { cmd = []string{"mkfs.xfs", "-f", "-m", "crc=0", "-i", "projid32bit=0", "-n", "ftype=1"} cmdUuid = []string{"xfs_admin", "-U", uuid} case fs == "f2fs": - cmd = []string{"mkfs.f2fs", "-U", uuid, "-O", "extra_attr,inode_checksum,sb_checksum"} + cmd = []string{"mkfs.f2fs", "-U", uuid, "-O"} + options := "extra_attr,inode_checksum,sb_checksum" + if fsFeatures != nil && fsFeatures.F2Fs.CaseInsensitive { + options += ",casefold" + } + cmd = append(cmd, options) + if fsFeatures != nil && fsFeatures.F2Fs.CaseInsensitive { + cmd = append(cmd, "-C", "utf8") + } + + if fsFeatures != nil && fsFeatures.F2Fs.OverprovisionRatioPercentage > 0 { + cmd = append(cmd, "-o", fmt.Sprintf("%d", fsFeatures.F2Fs.OverprovisionRatioPercentage)) + } } if len(cmd) > 0 { diff --git a/pkg/hostman/hostdeployer/apis/deploy.pb.go b/pkg/hostman/hostdeployer/apis/deploy.pb.go index a4f585ae06..8aff2fba47 100644 --- a/pkg/hostman/hostdeployer/apis/deploy.pb.go +++ b/pkg/hostman/hostdeployer/apis/deploy.pb.go @@ -11,12 +11,11 @@ package apis import ( - reflect "reflect" - sync "sync" - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -1326,7 +1325,7 @@ type FsExt4Features struct { unknownFields protoimpl.UnknownFields CaseInsensitive bool `protobuf:"varint,1,opt,name=CaseInsensitive,proto3" json:"CaseInsensitive,omitempty"` - ReservedBlocksPercentage int32 `protobuf:"varint,2,opt,name=ReservedBlocksPercentage,proto3" json:"ReservedBlocksPercentage,omitempty"` + ReservedBlocksPercentage int32 `protobuf:"varint,2,opt,name=OverprovisionRatioPercentage,proto3" json:"OverprovisionRatioPercentage,omitempty"` } func (x *FsExt4Features) Reset() { @@ -1375,18 +1374,74 @@ func (x *FsExt4Features) GetReservedBlocksPercentage() int32 { return 0 } +type FsF2FsFeatures struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CaseInsensitive bool `protobuf:"varint,1,opt,name=CaseInsensitive,proto3" json:"CaseInsensitive,omitempty"` + OverprovisionRatioPercentage int32 `protobuf:"varint,2,opt,name=OverprovisionRatioPercentage,proto3" json:"OverprovisionRatioPercentage,omitempty"` +} + +func (x *FsF2FsFeatures) Reset() { + *x = FsF2FsFeatures{} + if protoimpl.UnsafeEnabled { + mi := &file_deploy_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FsF2FsFeatures) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FsF2FsFeatures) ProtoMessage() {} + +func (x *FsF2FsFeatures) ProtoReflect() protoreflect.Message { + mi := &file_deploy_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FsF2FsFeatures.ProtoReflect.Descriptor instead. +func (*FsF2FsFeatures) Descriptor() ([]byte, []int) { + return file_deploy_proto_rawDescGZIP(), []int{14} +} + +func (x *FsF2FsFeatures) GetCaseInsensitive() bool { + if x != nil { + return x.CaseInsensitive + } + return false +} + +func (x *FsF2FsFeatures) GetOverprovisionRatioPercentage() int32 { + if x != nil { + return x.OverprovisionRatioPercentage + } + return 0 +} + type FsFeatures struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Ext4 *FsExt4Features `protobuf:"bytes,1,opt,name=ext4,proto3" json:"ext4,omitempty"` + F2Fs *FsF2FsFeatures `protobuf:"bytes,2,opt,name=f2fs,proto3" json:"f2fs,omitempty"` } func (x *FsFeatures) Reset() { *x = FsFeatures{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[14] + mi := &file_deploy_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1399,7 +1454,7 @@ func (x *FsFeatures) String() string { func (*FsFeatures) ProtoMessage() {} func (x *FsFeatures) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[14] + mi := &file_deploy_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1412,7 +1467,7 @@ func (x *FsFeatures) ProtoReflect() protoreflect.Message { // Deprecated: Use FsFeatures.ProtoReflect.Descriptor instead. func (*FsFeatures) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{14} + return file_deploy_proto_rawDescGZIP(), []int{15} } func (x *FsFeatures) GetExt4() *FsExt4Features { @@ -1422,6 +1477,13 @@ func (x *FsFeatures) GetExt4() *FsExt4Features { return nil } +func (x *FsFeatures) GetF2Fs() *FsF2FsFeatures { + if x != nil { + return x.F2Fs + } + return nil +} + type FormatFsParams struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1436,7 +1498,7 @@ type FormatFsParams struct { func (x *FormatFsParams) Reset() { *x = FormatFsParams{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[15] + mi := &file_deploy_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1449,7 +1511,7 @@ func (x *FormatFsParams) String() string { func (*FormatFsParams) ProtoMessage() {} func (x *FormatFsParams) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[15] + mi := &file_deploy_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1462,7 +1524,7 @@ func (x *FormatFsParams) ProtoReflect() protoreflect.Message { // Deprecated: Use FormatFsParams.ProtoReflect.Descriptor instead. func (*FormatFsParams) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{15} + return file_deploy_proto_rawDescGZIP(), []int{16} } func (x *FormatFsParams) GetDiskInfo() *DiskInfo { @@ -1507,7 +1569,7 @@ type ReleaseInfo struct { func (x *ReleaseInfo) Reset() { *x = ReleaseInfo{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[16] + mi := &file_deploy_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1520,7 +1582,7 @@ func (x *ReleaseInfo) String() string { func (*ReleaseInfo) ProtoMessage() {} func (x *ReleaseInfo) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[16] + mi := &file_deploy_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1533,7 +1595,7 @@ func (x *ReleaseInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReleaseInfo.ProtoReflect.Descriptor instead. func (*ReleaseInfo) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{16} + return file_deploy_proto_rawDescGZIP(), []int{17} } func (x *ReleaseInfo) GetDistro() string { @@ -1576,7 +1638,7 @@ type SaveToGlanceParams struct { func (x *SaveToGlanceParams) Reset() { *x = SaveToGlanceParams{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[17] + mi := &file_deploy_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1589,7 +1651,7 @@ func (x *SaveToGlanceParams) String() string { func (*SaveToGlanceParams) ProtoMessage() {} func (x *SaveToGlanceParams) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[17] + mi := &file_deploy_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1602,7 +1664,7 @@ func (x *SaveToGlanceParams) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveToGlanceParams.ProtoReflect.Descriptor instead. func (*SaveToGlanceParams) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{17} + return file_deploy_proto_rawDescGZIP(), []int{18} } func (x *SaveToGlanceParams) GetDiskInfo() *DiskInfo { @@ -1631,7 +1693,7 @@ type SaveToGlanceResponse struct { func (x *SaveToGlanceResponse) Reset() { *x = SaveToGlanceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[18] + mi := &file_deploy_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1644,7 +1706,7 @@ func (x *SaveToGlanceResponse) String() string { func (*SaveToGlanceResponse) ProtoMessage() {} func (x *SaveToGlanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[18] + mi := &file_deploy_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1657,7 +1719,7 @@ func (x *SaveToGlanceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveToGlanceResponse.ProtoReflect.Descriptor instead. func (*SaveToGlanceResponse) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{18} + return file_deploy_proto_rawDescGZIP(), []int{19} } func (x *SaveToGlanceResponse) GetOsInfo() string { @@ -1685,7 +1747,7 @@ type ProbeImageInfoPramas struct { func (x *ProbeImageInfoPramas) Reset() { *x = ProbeImageInfoPramas{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[19] + mi := &file_deploy_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1698,7 +1760,7 @@ func (x *ProbeImageInfoPramas) String() string { func (*ProbeImageInfoPramas) ProtoMessage() {} func (x *ProbeImageInfoPramas) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[19] + mi := &file_deploy_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1711,7 +1773,7 @@ func (x *ProbeImageInfoPramas) ProtoReflect() protoreflect.Message { // Deprecated: Use ProbeImageInfoPramas.ProtoReflect.Descriptor instead. func (*ProbeImageInfoPramas) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{19} + return file_deploy_proto_rawDescGZIP(), []int{20} } func (x *ProbeImageInfoPramas) GetDiskInfo() *DiskInfo { @@ -1738,7 +1800,7 @@ type ImageInfo struct { func (x *ImageInfo) Reset() { *x = ImageInfo{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[20] + mi := &file_deploy_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1751,7 +1813,7 @@ func (x *ImageInfo) String() string { func (*ImageInfo) ProtoMessage() {} func (x *ImageInfo) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[20] + mi := &file_deploy_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1764,7 +1826,7 @@ func (x *ImageInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageInfo.ProtoReflect.Descriptor instead. func (*ImageInfo) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{20} + return file_deploy_proto_rawDescGZIP(), []int{21} } func (x *ImageInfo) GetOsInfo() *ReleaseInfo { @@ -1827,7 +1889,7 @@ type EsxiDiskInfo struct { func (x *EsxiDiskInfo) Reset() { *x = EsxiDiskInfo{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[21] + mi := &file_deploy_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1840,7 +1902,7 @@ func (x *EsxiDiskInfo) String() string { func (*EsxiDiskInfo) ProtoMessage() {} func (x *EsxiDiskInfo) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[21] + mi := &file_deploy_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1853,7 +1915,7 @@ func (x *EsxiDiskInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use EsxiDiskInfo.ProtoReflect.Descriptor instead. func (*EsxiDiskInfo) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{21} + return file_deploy_proto_rawDescGZIP(), []int{22} } func (x *EsxiDiskInfo) GetDiskPath() string { @@ -1875,7 +1937,7 @@ type ConnectEsxiDisksParams struct { func (x *ConnectEsxiDisksParams) Reset() { *x = ConnectEsxiDisksParams{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[22] + mi := &file_deploy_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1888,7 +1950,7 @@ func (x *ConnectEsxiDisksParams) String() string { func (*ConnectEsxiDisksParams) ProtoMessage() {} func (x *ConnectEsxiDisksParams) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[22] + mi := &file_deploy_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1901,7 +1963,7 @@ func (x *ConnectEsxiDisksParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectEsxiDisksParams.ProtoReflect.Descriptor instead. func (*ConnectEsxiDisksParams) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{22} + return file_deploy_proto_rawDescGZIP(), []int{23} } func (x *ConnectEsxiDisksParams) GetVddkInfo() *VDDKConInfo { @@ -1929,7 +1991,7 @@ type EsxiDisksConnectionInfo struct { func (x *EsxiDisksConnectionInfo) Reset() { *x = EsxiDisksConnectionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[23] + mi := &file_deploy_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1942,7 +2004,7 @@ func (x *EsxiDisksConnectionInfo) String() string { func (*EsxiDisksConnectionInfo) ProtoMessage() {} func (x *EsxiDisksConnectionInfo) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[23] + mi := &file_deploy_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1955,7 +2017,7 @@ func (x *EsxiDisksConnectionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use EsxiDisksConnectionInfo.ProtoReflect.Descriptor instead. func (*EsxiDisksConnectionInfo) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{23} + return file_deploy_proto_rawDescGZIP(), []int{24} } func (x *EsxiDisksConnectionInfo) GetDisks() []*EsxiDiskInfo { @@ -1979,7 +2041,7 @@ type BootDevices struct { func (x *BootDevices) Reset() { *x = BootDevices{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[24] + mi := &file_deploy_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1992,7 +2054,7 @@ func (x *BootDevices) String() string { func (*BootDevices) ProtoMessage() {} func (x *BootDevices) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[24] + mi := &file_deploy_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2005,7 +2067,7 @@ func (x *BootDevices) ProtoReflect() protoreflect.Message { // Deprecated: Use BootDevices.ProtoReflect.Descriptor instead. func (*BootDevices) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{24} + return file_deploy_proto_rawDescGZIP(), []int{25} } func (x *BootDevices) GetBootOrder() int32 { @@ -2041,7 +2103,7 @@ type OvmfBootOrderParams struct { func (x *OvmfBootOrderParams) Reset() { *x = OvmfBootOrderParams{} if protoimpl.UnsafeEnabled { - mi := &file_deploy_proto_msgTypes[25] + mi := &file_deploy_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2116,7 @@ func (x *OvmfBootOrderParams) String() string { func (*OvmfBootOrderParams) ProtoMessage() {} func (x *OvmfBootOrderParams) ProtoReflect() protoreflect.Message { - mi := &file_deploy_proto_msgTypes[25] + mi := &file_deploy_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,7 +2129,7 @@ func (x *OvmfBootOrderParams) ProtoReflect() protoreflect.Message { // Deprecated: Use OvmfBootOrderParams.ProtoReflect.Descriptor instead. func (*OvmfBootOrderParams) Descriptor() ([]byte, []int) { - return file_deploy_proto_rawDescGZIP(), []int{25} + return file_deploy_proto_rawDescGZIP(), []int{26} } func (x *OvmfBootOrderParams) GetOvmfVarsPath() string { @@ -2287,128 +2349,139 @@ var file_deploy_proto_rawDesc = []byte{ 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, + 0x63, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0x7e, 0x0a, + 0x0e, 0x46, 0x73, 0x46, 0x32, 0x66, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x28, 0x0a, 0x0f, 0x43, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x43, 0x61, 0x73, 0x65, 0x49, 0x6e, + 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x4f, 0x76, 0x65, + 0x72, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x50, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, + 0x74, 0x69, 0x6f, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x0a, 0x46, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x78, 0x74, 0x34, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x46, 0x73, 0x45, 0x78, 0x74, 0x34, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, - 0x04, 0x65, 0x78, 0x74, 0x34, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x46, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, 0x69, 0x73, - 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x73, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x0b, 0x66, 0x73, 0x5f, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x46, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0a, 0x66, - 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x73, 0x74, 0x72, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x5d, 0x0a, 0x12, 0x53, 0x61, - 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x22, 0x65, 0x0a, 0x14, 0x53, 0x61, 0x76, - 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x22, 0x43, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x50, 0x72, 0x61, 0x6d, 0x61, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, 0x69, 0x73, - 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xb2, 0x02, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x0a, 0x07, 0x6f, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x17, 0x0a, 0x07, 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x75, - 0x65, 0x66, 0x69, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x69, 0x73, 0x55, 0x65, 0x66, 0x69, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x6c, 0x76, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x4c, 0x76, - 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x70, - 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x22, 0x2b, 0x0a, 0x0c, 0x45, 0x73, - 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, - 0x73, 0x6b, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, - 0x69, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x22, 0x7d, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x09, 0x76, 0x64, 0x64, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x56, 0x44, 0x44, 0x4b, - 0x43, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, 0x64, 0x64, 0x6b, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x33, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x73, - 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x43, 0x0a, 0x17, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, - 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x28, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x04, 0x65, 0x78, 0x74, 0x34, 0x12, 0x28, 0x0a, 0x04, 0x66, 0x32, 0x66, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x46, 0x73, 0x46, 0x32, 0x66, + 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x04, 0x66, 0x32, 0x66, 0x73, 0x22, + 0xa1, 0x01, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x46, 0x73, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x12, 0x31, 0x0a, 0x0b, 0x66, 0x73, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x46, 0x73, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0a, 0x66, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x73, 0x74, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x73, 0x74, 0x72, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x22, 0x5d, 0x0a, 0x12, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, + 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, + 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x65, 0x0a, 0x14, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, + 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x43, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x62, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x72, 0x61, 0x6d, + 0x61, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0xb2, 0x02, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x0a, + 0x07, 0x6f, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x73, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x75, 0x65, 0x66, 0x69, 0x5f, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x55, + 0x65, 0x66, 0x69, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, + 0x5f, 0x6c, 0x76, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x4c, 0x76, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, + 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, + 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, + 0x17, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, + 0x69, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x49, 0x6e, 0x69, 0x74, 0x22, 0x2b, 0x0a, 0x0c, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x50, 0x61, 0x74, + 0x68, 0x22, 0x7d, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, + 0x44, 0x69, 0x73, 0x6b, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x09, 0x76, + 0x64, 0x64, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x56, 0x44, 0x44, 0x4b, 0x43, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x08, 0x76, 0x64, 0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x0b, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x22, 0x67, 0x0a, 0x0b, 0x42, - 0x6f, 0x6f, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6f, - 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, - 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x65, 0x76, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x44, 0x65, 0x76, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x22, 0x60, 0x0a, 0x13, 0x4f, 0x76, 0x6d, 0x66, 0x42, 0x6f, 0x6f, 0x74, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4f, - 0x76, 0x6d, 0x66, 0x56, 0x61, 0x72, 0x73, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x4f, 0x76, 0x6d, 0x66, 0x56, 0x61, 0x72, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x25, 0x0a, 0x04, 0x64, 0x65, 0x76, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x04, 0x64, 0x65, 0x76, 0x73, 0x32, 0x82, 0x04, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x47, 0x75, 0x65, 0x73, 0x74, 0x46, 0x73, 0x12, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x47, 0x75, 0x65, 0x73, 0x74, 0x46, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x69, - 0x7a, 0x65, 0x46, 0x73, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x69, - 0x7a, 0x65, 0x46, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x46, 0x73, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x46, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x44, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, - 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x53, 0x61, - 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0e, - 0x50, 0x72, 0x6f, 0x62, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, - 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x72, 0x61, 0x6d, 0x61, 0x73, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4f, 0x0a, 0x10, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x12, - 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, - 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1d, 0x2e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x43, 0x0a, 0x17, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x05, 0x64, + 0x69, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, + 0x64, 0x69, 0x73, 0x6b, 0x73, 0x22, 0x67, 0x0a, 0x0b, 0x42, 0x6f, 0x6f, 0x74, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x65, 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x44, 0x65, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x60, + 0x0a, 0x13, 0x4f, 0x76, 0x6d, 0x66, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4f, 0x76, 0x6d, 0x66, 0x56, 0x61, 0x72, + 0x73, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x4f, 0x76, 0x6d, + 0x66, 0x56, 0x61, 0x72, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x65, 0x76, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x42, + 0x6f, 0x6f, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x04, 0x64, 0x65, 0x76, 0x73, + 0x32, 0x82, 0x04, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x40, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x47, 0x75, 0x65, 0x73, 0x74, 0x46, + 0x73, 0x12, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x47, 0x75, 0x65, 0x73, 0x74, 0x46, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x46, 0x73, 0x12, 0x14, + 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x46, 0x73, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x2d, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x46, 0x73, 0x12, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x46, 0x73, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x44, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x72, + 0x61, 0x6d, 0x61, 0x73, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4f, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, + 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, + 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x13, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x73, 0x78, 0x69, 0x44, 0x69, - 0x73, 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x73, 0x78, 0x69, 0x44, - 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x3a, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x6d, 0x66, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x4f, 0x76, 0x6d, 0x66, 0x42, - 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x34, 0x5a, 0x32, 0x79, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x78, 0x2f, 0x6f, 0x6e, 0x65, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x6e, 0x2f, - 0x68, 0x6f, 0x73, 0x74, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, - 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x0b, 0x2e, 0x61, + 0x70, 0x69, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x10, 0x53, 0x65, 0x74, + 0x4f, 0x76, 0x6d, 0x66, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x19, 0x2e, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x4f, 0x76, 0x6d, 0x66, 0x42, 0x6f, 0x6f, 0x74, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x34, 0x5a, 0x32, 0x79, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, + 0x69, 0x6f, 0x2f, 0x78, 0x2f, 0x6f, 0x6e, 0x65, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x6e, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -2423,7 +2496,7 @@ func file_deploy_proto_rawDescGZIP() []byte { return file_deploy_proto_rawDescData } -var file_deploy_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_deploy_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_deploy_proto_goTypes = []interface{}{ (*GuestDesc)(nil), // 0: apis.GuestDesc (*Disk)(nil), // 1: apis.Disk @@ -2439,18 +2512,19 @@ var file_deploy_proto_goTypes = []interface{}{ (*DeployParams)(nil), // 11: apis.DeployParams (*ResizeFsParams)(nil), // 12: apis.ResizeFsParams (*FsExt4Features)(nil), // 13: apis.FsExt4Features - (*FsFeatures)(nil), // 14: apis.FsFeatures - (*FormatFsParams)(nil), // 15: apis.FormatFsParams - (*ReleaseInfo)(nil), // 16: apis.ReleaseInfo - (*SaveToGlanceParams)(nil), // 17: apis.SaveToGlanceParams - (*SaveToGlanceResponse)(nil), // 18: apis.SaveToGlanceResponse - (*ProbeImageInfoPramas)(nil), // 19: apis.ProbeImageInfoPramas - (*ImageInfo)(nil), // 20: apis.ImageInfo - (*EsxiDiskInfo)(nil), // 21: apis.EsxiDiskInfo - (*ConnectEsxiDisksParams)(nil), // 22: apis.ConnectEsxiDisksParams - (*EsxiDisksConnectionInfo)(nil), // 23: apis.EsxiDisksConnectionInfo - (*BootDevices)(nil), // 24: apis.BootDevices - (*OvmfBootOrderParams)(nil), // 25: apis.OvmfBootOrderParams + (*FsF2FsFeatures)(nil), // 14: apis.FsF2fsFeatures + (*FsFeatures)(nil), // 15: apis.FsFeatures + (*FormatFsParams)(nil), // 16: apis.FormatFsParams + (*ReleaseInfo)(nil), // 17: apis.ReleaseInfo + (*SaveToGlanceParams)(nil), // 18: apis.SaveToGlanceParams + (*SaveToGlanceResponse)(nil), // 19: apis.SaveToGlanceResponse + (*ProbeImageInfoPramas)(nil), // 20: apis.ProbeImageInfoPramas + (*ImageInfo)(nil), // 21: apis.ImageInfo + (*EsxiDiskInfo)(nil), // 22: apis.EsxiDiskInfo + (*ConnectEsxiDisksParams)(nil), // 23: apis.ConnectEsxiDisksParams + (*EsxiDisksConnectionInfo)(nil), // 24: apis.EsxiDisksConnectionInfo + (*BootDevices)(nil), // 25: apis.BootDevices + (*OvmfBootOrderParams)(nil), // 26: apis.OvmfBootOrderParams } var file_deploy_proto_depIdxs = []int32{ 2, // 0: apis.GuestDesc.nics:type_name -> apis.Nic @@ -2466,37 +2540,38 @@ var file_deploy_proto_depIdxs = []int32{ 10, // 10: apis.ResizeFsParams.disk_info:type_name -> apis.DiskInfo 3, // 11: apis.ResizeFsParams.vddk_info:type_name -> apis.VDDKConInfo 13, // 12: apis.FsFeatures.ext4:type_name -> apis.FsExt4Features - 10, // 13: apis.FormatFsParams.disk_info:type_name -> apis.DiskInfo - 14, // 14: apis.FormatFsParams.fs_features:type_name -> apis.FsFeatures - 10, // 15: apis.SaveToGlanceParams.disk_info:type_name -> apis.DiskInfo - 16, // 16: apis.SaveToGlanceResponse.release_info:type_name -> apis.ReleaseInfo - 10, // 17: apis.ProbeImageInfoPramas.disk_info:type_name -> apis.DiskInfo - 16, // 18: apis.ImageInfo.os_info:type_name -> apis.ReleaseInfo - 3, // 19: apis.ConnectEsxiDisksParams.vddk_info:type_name -> apis.VDDKConInfo - 21, // 20: apis.ConnectEsxiDisksParams.access_info:type_name -> apis.EsxiDiskInfo - 21, // 21: apis.EsxiDisksConnectionInfo.disks:type_name -> apis.EsxiDiskInfo - 24, // 22: apis.OvmfBootOrderParams.devs:type_name -> apis.BootDevices - 11, // 23: apis.DeployAgent.DeployGuestFs:input_type -> apis.DeployParams - 12, // 24: apis.DeployAgent.ResizeFs:input_type -> apis.ResizeFsParams - 15, // 25: apis.DeployAgent.FormatFs:input_type -> apis.FormatFsParams - 17, // 26: apis.DeployAgent.SaveToGlance:input_type -> apis.SaveToGlanceParams - 19, // 27: apis.DeployAgent.ProbeImageInfo:input_type -> apis.ProbeImageInfoPramas - 22, // 28: apis.DeployAgent.ConnectEsxiDisks:input_type -> apis.ConnectEsxiDisksParams - 23, // 29: apis.DeployAgent.DisconnectEsxiDisks:input_type -> apis.EsxiDisksConnectionInfo - 25, // 30: apis.DeployAgent.SetOvmfBootOrder:input_type -> apis.OvmfBootOrderParams - 9, // 31: apis.DeployAgent.DeployGuestFs:output_type -> apis.DeployGuestFsResponse - 8, // 32: apis.DeployAgent.ResizeFs:output_type -> apis.Empty - 8, // 33: apis.DeployAgent.FormatFs:output_type -> apis.Empty - 18, // 34: apis.DeployAgent.SaveToGlance:output_type -> apis.SaveToGlanceResponse - 20, // 35: apis.DeployAgent.ProbeImageInfo:output_type -> apis.ImageInfo - 23, // 36: apis.DeployAgent.ConnectEsxiDisks:output_type -> apis.EsxiDisksConnectionInfo - 8, // 37: apis.DeployAgent.DisconnectEsxiDisks:output_type -> apis.Empty - 8, // 38: apis.DeployAgent.SetOvmfBootOrder:output_type -> apis.Empty - 31, // [31:39] is the sub-list for method output_type - 23, // [23:31] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 14, // 13: apis.FsFeatures.f2fs:type_name -> apis.FsF2fsFeatures + 10, // 14: apis.FormatFsParams.disk_info:type_name -> apis.DiskInfo + 15, // 15: apis.FormatFsParams.fs_features:type_name -> apis.FsFeatures + 10, // 16: apis.SaveToGlanceParams.disk_info:type_name -> apis.DiskInfo + 17, // 17: apis.SaveToGlanceResponse.release_info:type_name -> apis.ReleaseInfo + 10, // 18: apis.ProbeImageInfoPramas.disk_info:type_name -> apis.DiskInfo + 17, // 19: apis.ImageInfo.os_info:type_name -> apis.ReleaseInfo + 3, // 20: apis.ConnectEsxiDisksParams.vddk_info:type_name -> apis.VDDKConInfo + 22, // 21: apis.ConnectEsxiDisksParams.access_info:type_name -> apis.EsxiDiskInfo + 22, // 22: apis.EsxiDisksConnectionInfo.disks:type_name -> apis.EsxiDiskInfo + 25, // 23: apis.OvmfBootOrderParams.devs:type_name -> apis.BootDevices + 11, // 24: apis.DeployAgent.DeployGuestFs:input_type -> apis.DeployParams + 12, // 25: apis.DeployAgent.ResizeFs:input_type -> apis.ResizeFsParams + 16, // 26: apis.DeployAgent.FormatFs:input_type -> apis.FormatFsParams + 18, // 27: apis.DeployAgent.SaveToGlance:input_type -> apis.SaveToGlanceParams + 20, // 28: apis.DeployAgent.ProbeImageInfo:input_type -> apis.ProbeImageInfoPramas + 23, // 29: apis.DeployAgent.ConnectEsxiDisks:input_type -> apis.ConnectEsxiDisksParams + 24, // 30: apis.DeployAgent.DisconnectEsxiDisks:input_type -> apis.EsxiDisksConnectionInfo + 26, // 31: apis.DeployAgent.SetOvmfBootOrder:input_type -> apis.OvmfBootOrderParams + 9, // 32: apis.DeployAgent.DeployGuestFs:output_type -> apis.DeployGuestFsResponse + 8, // 33: apis.DeployAgent.ResizeFs:output_type -> apis.Empty + 8, // 34: apis.DeployAgent.FormatFs:output_type -> apis.Empty + 19, // 35: apis.DeployAgent.SaveToGlance:output_type -> apis.SaveToGlanceResponse + 21, // 36: apis.DeployAgent.ProbeImageInfo:output_type -> apis.ImageInfo + 24, // 37: apis.DeployAgent.ConnectEsxiDisks:output_type -> apis.EsxiDisksConnectionInfo + 8, // 38: apis.DeployAgent.DisconnectEsxiDisks:output_type -> apis.Empty + 8, // 39: apis.DeployAgent.SetOvmfBootOrder:output_type -> apis.Empty + 32, // [32:40] is the sub-list for method output_type + 24, // [24:32] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_deploy_proto_init() } @@ -2674,7 +2749,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FsFeatures); i { + switch v := v.(*FsF2FsFeatures); i { case 0: return &v.state case 1: @@ -2686,7 +2761,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FormatFsParams); i { + switch v := v.(*FsFeatures); i { case 0: return &v.state case 1: @@ -2698,7 +2773,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReleaseInfo); i { + switch v := v.(*FormatFsParams); i { case 0: return &v.state case 1: @@ -2710,7 +2785,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveToGlanceParams); i { + switch v := v.(*ReleaseInfo); i { case 0: return &v.state case 1: @@ -2722,7 +2797,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveToGlanceResponse); i { + switch v := v.(*SaveToGlanceParams); i { case 0: return &v.state case 1: @@ -2734,7 +2809,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProbeImageInfoPramas); i { + switch v := v.(*SaveToGlanceResponse); i { case 0: return &v.state case 1: @@ -2746,7 +2821,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageInfo); i { + switch v := v.(*ProbeImageInfoPramas); i { case 0: return &v.state case 1: @@ -2758,7 +2833,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EsxiDiskInfo); i { + switch v := v.(*ImageInfo); i { case 0: return &v.state case 1: @@ -2770,7 +2845,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectEsxiDisksParams); i { + switch v := v.(*EsxiDiskInfo); i { case 0: return &v.state case 1: @@ -2782,7 +2857,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EsxiDisksConnectionInfo); i { + switch v := v.(*ConnectEsxiDisksParams); i { case 0: return &v.state case 1: @@ -2794,7 +2869,7 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BootDevices); i { + switch v := v.(*EsxiDisksConnectionInfo); i { case 0: return &v.state case 1: @@ -2806,6 +2881,18 @@ func file_deploy_proto_init() { } } file_deploy_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BootDevices); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_deploy_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OvmfBootOrderParams); i { case 0: return &v.state @@ -2824,7 +2911,7 @@ func file_deploy_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_deploy_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/hostman/hostdeployer/apis/deploy.proto b/pkg/hostman/hostdeployer/apis/deploy.proto index ee7584f2ba..2722f317e2 100644 --- a/pkg/hostman/hostdeployer/apis/deploy.proto +++ b/pkg/hostman/hostdeployer/apis/deploy.proto @@ -151,8 +151,14 @@ message FsExt4Features { int32 ReservedBlocksPercentage = 2; } +message FsF2fsFeatures { + bool CaseInsensitive = 1; + int32 OverprovisionRatioPercentage = 2; +} + message FsFeatures { FsExt4Features ext4 = 1; + FsF2fsFeatures f2fs = 2; } message FormatFsParams { diff --git a/pkg/hostman/hostdeployer/apis/deploy_grpc.pb.go b/pkg/hostman/hostdeployer/apis/deploy_grpc.pb.go index 1f578fb7bb..c696896326 100644 --- a/pkg/hostman/hostdeployer/apis/deploy_grpc.pb.go +++ b/pkg/hostman/hostdeployer/apis/deploy_grpc.pb.go @@ -4,7 +4,6 @@ package apis import ( context "context" - grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/pkg/hostman/storageman/disk_base.go b/pkg/hostman/storageman/disk_base.go index cf941c2fc9..19e7d341b7 100644 --- a/pkg/hostman/storageman/disk_base.go +++ b/pkg/hostman/storageman/disk_base.go @@ -232,6 +232,12 @@ func ConvertDiskFsFeaturesToDeploy(fsFeatures *api.DiskFsFeatures) *deployapi.Fs ReservedBlocksPercentage: int32(fsFeatures.Ext4.ReservedBlocksPercentage), } } + if fsFeatures.F2fs != nil { + ret.F2Fs = &deployapi.FsF2FsFeatures{ + CaseInsensitive: fsFeatures.F2fs.CaseInsensitive, + OverprovisionRatioPercentage: int32((fsFeatures.F2fs.OverprovisionRatioPercentage)), + } + } return ret } diff --git a/pkg/mcclient/options/compute/disks.go b/pkg/mcclient/options/compute/disks.go index 003a069c2d..c4095799e1 100644 --- a/pkg/mcclient/options/compute/disks.go +++ b/pkg/mcclient/options/compute/disks.go @@ -108,14 +108,56 @@ func (o *DiskResetTemplateOptions) Params() (jsonutils.JSONObject, error) { type DiskRebuildOptions struct { options.ResourceIdOptions - BackupId string `help:"disk backup id" json:"backup_id"` - TemplateId string `help:"disk template id" json:"template_id"` - Size string `help:"disk size in MB" json:"size"` - Fs string `help:"disk fs type"` + BackupId string `help:"disk backup id" json:"backup_id"` + TemplateId string `help:"disk template id" json:"template_id"` + Size string `help:"disk size in MB" json:"size"` + Fs string `help:"disk fs type"` + FsFeatureF2fsCaseInsensitive *bool `help:"f2fs enable CaseInsensitive" json:"-"` + FsFeatureF2fsOverprovisionRatioPercentage *int `help:"f2fs OverprovisionRatioPercentage" json:"-"` + FsFeatureExt4CaseInsensitive *bool `help:"ext4 enable CaseInsensitive" json:"-"` + FsFeatureExt4ReservedBlocksPercentage *int `help:"ext4 ReservedBlocksPercentage" json:"-"` } func (o *DiskRebuildOptions) Params() (jsonutils.JSONObject, error) { - return jsonutils.Marshal(o), nil + res := api.DiskRebuildInput{} + if o.BackupId != "" { + res.BackupId = &o.BackupId + } + if o.TemplateId != "" { + res.TemplateId = &o.TemplateId + } + if o.Size != "" { + res.TemplateId = &o.Size + } + if o.Fs != "" { + res.Fs = &o.Fs + } + + if o.FsFeatureExt4CaseInsensitive != nil || o.FsFeatureExt4ReservedBlocksPercentage != nil { + if res.FsFeatures == nil { + res.FsFeatures = &api.DiskFsFeatures{} + } + res.FsFeatures.Ext4 = &api.DiskFsExt4Features{} + if o.FsFeatureExt4CaseInsensitive != nil { + res.FsFeatures.Ext4.CaseInsensitive = *o.FsFeatureExt4CaseInsensitive + } + if o.FsFeatureExt4ReservedBlocksPercentage != nil { + res.FsFeatures.Ext4.ReservedBlocksPercentage = *o.FsFeatureExt4ReservedBlocksPercentage + } + } + if o.FsFeatureF2fsCaseInsensitive != nil || o.FsFeatureF2fsOverprovisionRatioPercentage != nil { + if res.FsFeatures == nil { + res.FsFeatures = &api.DiskFsFeatures{} + } + res.FsFeatures.F2fs = &api.DiskFsF2fsFeatures{} + if o.FsFeatureF2fsCaseInsensitive != nil { + res.FsFeatures.F2fs.CaseInsensitive = *o.FsFeatureF2fsCaseInsensitive + } + if o.FsFeatureF2fsOverprovisionRatioPercentage != nil { + res.FsFeatures.F2fs.OverprovisionRatioPercentage = *o.FsFeatureF2fsOverprovisionRatioPercentage + } + } + return jsonutils.Marshal(res), nil } type DiskListOptions struct {