containers-storage: support layer bigdata

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2020-12-15 19:38:23 +01:00
parent 13260d4bc2
commit 9cefbaec5f
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED
4 changed files with 164 additions and 0 deletions

View File

@ -3,12 +3,85 @@ package main
import (
"encoding/json"
"fmt"
"io"
"os"
"github.com/containers/storage"
"github.com/containers/storage/pkg/mflag"
)
var (
paramLayerDataFile = ""
)
func listLayerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
layer, err := m.Layer(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
d, err := m.ListLayerBigData(layer.ID)
if jsonOutput {
json.NewEncoder(os.Stdout).Encode(d)
} else {
for _, name := range d {
fmt.Printf("%s\n", name)
}
}
return 0
}
func getLayerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
layer, err := m.Layer(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
output := os.Stdout
if paramLayerDataFile != "" {
f, err := os.Create(paramLayerDataFile)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
return 1
}
output = f
}
b, err := m.LayerBigData(layer.ID, args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
if _, err := io.Copy(output, b); err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
output.Close()
return 0
}
func setLayerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
layer, err := m.Layer(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
input := os.Stdin
if paramLayerDataFile != "" {
f, err := os.Open(paramLayerDataFile)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
return 1
}
input = f
}
err = m.SetLayerBigData(layer.ID, args[1], input)
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
}
return 0
}
func layer(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
matched := []*storage.Layer{}
for _, arg := range args {
@ -106,5 +179,36 @@ func init() {
flags.BoolVar(&jsonOutput, []string{"-json", "j"}, jsonOutput, "Prefer JSON output")
},
},
command{
names: []string{"list-layer-data", "listlayerdata"},
optionsHelp: "[options [...]] layerNameOrID",
usage: "List data items that are attached to a layer",
action: listLayerBigData,
minArgs: 1,
maxArgs: 1,
addFlags: func(flags *mflag.FlagSet, cmd *command) {
flags.BoolVar(&jsonOutput, []string{"-json", "j"}, jsonOutput, "Prefer JSON output")
},
},
command{
names: []string{"get-layer-data", "getlayerdata"},
optionsHelp: "[options [...]] layerID dataName",
usage: "Get data that is attached to a layer",
action: getLayerBigData,
minArgs: 2,
addFlags: func(flags *mflag.FlagSet, cmd *command) {
flags.StringVar(&paramLayerDataFile, []string{"-file", "f"}, paramLayerDataFile, "Write data to file")
},
},
command{
names: []string{"set-layer-data", "setlayerdata"},
optionsHelp: "[options [...]] layerID dataName",
usage: "Set data that is attached to a layer",
action: setLayerBigData,
minArgs: 2,
addFlags: func(flags *mflag.FlagSet, cmd *command) {
flags.StringVar(&paramLayerDataFile, []string{"-file", "f"}, paramLayerDataFile, "Read data from file")
},
},
)
}

View File

@ -0,0 +1,21 @@
## containers-storage-get-layer-data 1 "December 2020"
## NAME
containers-storage get-layer-data - Retrieve lookaside data for a layer
## SYNOPSIS
**containers-storage** **get-layer-data** [*options* [...]] *layerID* *dataName*
## DESCRIPTION
Retrieves a piece of named data which is associated with a layer.
## OPTIONS
**-f | --file** *file*
Write the data to a file instead of stdout.
## EXAMPLE
**containers-storage get-layer-data -f config.json 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 configuration**
## SEE ALSO
containers-storage-set-layer-data(1)

View File

@ -0,0 +1,18 @@
## containers-storage-list-layer-data 1 "December 2020"
## NAME
containers-storage list-layer-data - List lookaside data for an layer
## SYNOPSIS
**containers-storage** **list-layer-data** *layerID*
## DESCRIPTION
List the pieces of named data which are associated with an layer.
## EXAMPLE
**containers-storage list-layer-data 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824**
## SEE ALSO
containers-storage-get-layer-data(1)
containers-storage-get-layer-data-digest(1)
containers-storage-set-layer-data(1)

View File

@ -0,0 +1,21 @@
## containers-storage-set-layer-data 1 "December 2020"
## NAME
containers-storage set-layer-data - Set lookaside data for a layer
## SYNOPSIS
**containers-storage** **set-layer-data** [*options* [...]] *layerID* *dataName*
## DESCRIPTION
Sets a piece of named data which is associated with a layer.
## OPTIONS
**-f | --file** *filename*
Read the data contents from a file instead of stdin.
## EXAMPLE
**containers-storage set-layer-data -f ./config.json 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 configuration**
## SEE ALSO
containers-storage-get-layer-data(1)