containers-storage: support layer bigdata
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
13260d4bc2
commit
9cefbaec5f
|
|
@ -3,12 +3,85 @@ package main
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/containers/storage"
|
"github.com/containers/storage"
|
||||||
"github.com/containers/storage/pkg/mflag"
|
"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 {
|
func layer(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
|
||||||
matched := []*storage.Layer{}
|
matched := []*storage.Layer{}
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
|
|
@ -106,5 +179,36 @@ func init() {
|
||||||
flags.BoolVar(&jsonOutput, []string{"-json", "j"}, jsonOutput, "Prefer JSON output")
|
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(¶mLayerDataFile, []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(¶mLayerDataFile, []string{"-file", "f"}, paramLayerDataFile, "Read data from 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)
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue