diff --git a/client/incus_instances.go b/client/incus_instances.go index 0c67167aeb..7856f8ff8b 100644 --- a/client/incus_instances.go +++ b/client/incus_instances.go @@ -3385,17 +3385,27 @@ func (r *ProtocolIncus) GetInstanceNVRAMGUID(name string, guid string) (map[stri } // GetRawInstanceNVRAMGUIDVar gets raw OVMF variables from an instance. -func (r *ProtocolIncus) GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) ([]byte, error) { +func (r *ProtocolIncus) GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) ([]byte, uint32, error) { if !r.HasExtension("instance_nvram") { - return nil, errors.New(`The server is missing the required "instance_nvram" API extension`) + return nil, 0, errors.New(`The server is missing the required "instance_nvram" API extension`) } resp, err := r.getInstanceNVRAM(name, guid, varName, "application/octet-stream") if err != nil { - return nil, err + return nil, 0, err } - return io.ReadAll(resp.Body) + attributes, err := strconv.ParseUint(resp.Header.Get("X-Incus-attributes"), 10, 32) + if err != nil { + return nil, 0, err + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + return nil, 0, err + } + + return data, uint32(attributes), err } // GetInstanceNVRAMGUIDVar gets interpreted OVMF variables from an instance. diff --git a/client/interfaces.go b/client/interfaces.go index 7856090cc0..dae37d5fce 100644 --- a/client/interfaces.go +++ b/client/interfaces.go @@ -181,7 +181,7 @@ type InstanceServer interface { RepairInstance(name string, repair api.InstanceDebugRepairPost) (err error) GetInstanceNVRAM(name string) (vars map[string]map[string]*api.InstanceNVRAMVariable, err error) GetInstanceNVRAMGUID(name string, guid string) (vars map[string]*api.InstanceNVRAMVariable, err error) - GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) (resp []byte, err error) + GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) (resp []byte, attributes uint32, err error) GetInstanceNVRAMGUIDVar(name string, guid string, varName string) (resp *api.InstanceNVRAMVariable, ETag string, err error) DeleteInstanceNVRAMGUIDVar(name string, guid string, varName string) error UpdateRawInstanceNVRAMGUIDVar(name string, guid string, varName string, data []byte, attributes uint32, timestamp int64) error diff --git a/cmd/incus/low_level.go b/cmd/incus/low_level.go index 26de8fe7a3..54d74958f0 100644 --- a/cmd/incus/low_level.go +++ b/cmd/incus/low_level.go @@ -623,7 +623,7 @@ func (c *cmdLowLevelNVRAMGet) run(cmd *cobra.Command, args []string) error { } if c.flagRaw { - resp, err := d.GetRawInstanceNVRAMGUIDVar(instanceName, guid, varName) + resp, _, err := d.GetRawInstanceNVRAMGUIDVar(instanceName, guid, varName) if err != nil { return fmt.Errorf(i18n.G("Failed to get instance UEFI variable: %w"), err) }