mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 20:20:16 +08:00
cmd and fs: Added new command settier which performs storage tier changes on
supported remotes
This commit is contained in:
parent
9594fd0a0c
commit
7accd30da8
|
@ -47,6 +47,7 @@ import (
|
|||
_ "github.com/ncw/rclone/cmd/rmdir"
|
||||
_ "github.com/ncw/rclone/cmd/rmdirs"
|
||||
_ "github.com/ncw/rclone/cmd/serve"
|
||||
_ "github.com/ncw/rclone/cmd/settier"
|
||||
_ "github.com/ncw/rclone/cmd/sha1sum"
|
||||
_ "github.com/ncw/rclone/cmd/size"
|
||||
_ "github.com/ncw/rclone/cmd/sync"
|
||||
|
|
54
cmd/settier/settier.go
Normal file
54
cmd/settier/settier.go
Normal file
|
@ -0,0 +1,54 @@
|
|||
package settier
|
||||
|
||||
import (
|
||||
"github.com/ncw/rclone/cmd"
|
||||
"github.com/ncw/rclone/fs/operations"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cmd.Root.AddCommand(commandDefintion)
|
||||
}
|
||||
|
||||
var commandDefintion = &cobra.Command{
|
||||
Use: "settier tier remote:path",
|
||||
Short: `Changes storage class/tier of objects in remote.`,
|
||||
Long: `
|
||||
rclone settier changes storage tier or class at remote if supported.
|
||||
Few cloud storage services provides different storage classes on objects,
|
||||
for example AWS S3 and Glacier, Azure Blob storage - Hot, Cool and Archive,
|
||||
Google Cloud Storage, Regional Storage, Nearline, Coldline etc.
|
||||
|
||||
Note that, certain tier chages make objects not available to access immediately.
|
||||
For example tiering to archive in azure blob storage makes objects in frozen state,
|
||||
user can restore by setting tier to Hot/Cool, similarly S3 to Glacier makes object
|
||||
inaccessible.true
|
||||
|
||||
You can use it to tier single object
|
||||
|
||||
rclone settier Cool remote:path/file
|
||||
|
||||
Or use rclone filters to set tier on only specific files
|
||||
|
||||
rclone --include "*.txt" settier Hot remote:path/dir
|
||||
|
||||
Or just provide remote directory and all files in directory will be tiered
|
||||
|
||||
rclone settier tier remote:path/dir
|
||||
`,
|
||||
Run: func(command *cobra.Command, args []string) {
|
||||
cmd.CheckArgs(2, 2, command, args)
|
||||
tier := args[0]
|
||||
input := args[1:]
|
||||
fsrc := cmd.NewFsSrc(input)
|
||||
cmd.Run(false, false, command, func() error {
|
||||
isSupported := fsrc.Features().SetTier
|
||||
if !isSupported {
|
||||
return errors.Errorf("Remote %s does not support settier", fsrc.Name())
|
||||
}
|
||||
|
||||
return operations.SetTier(fsrc, tier)
|
||||
})
|
||||
},
|
||||
}
|
|
@ -1407,6 +1407,21 @@ func CopyFile(fdst fs.Fs, fsrc fs.Fs, dstFileName string, srcFileName string) (e
|
|||
return moveOrCopyFile(fdst, fsrc, dstFileName, srcFileName, true)
|
||||
}
|
||||
|
||||
// SetTier changes tier of object in remote
|
||||
func SetTier(fsrc fs.Fs, tier string) error {
|
||||
return ListFn(fsrc, func(o fs.Object) {
|
||||
objImpl, ok := o.(fs.SetTierer)
|
||||
if !ok {
|
||||
fs.Errorf(fsrc, "Remote object does not implement SetTier")
|
||||
return
|
||||
}
|
||||
err := objImpl.SetTier(tier)
|
||||
if err != nil {
|
||||
fs.Errorf(fsrc, "Failed to do SetTier, %v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// ListFormat defines files information print format
|
||||
type ListFormat struct {
|
||||
separator string
|
||||
|
|
Loading…
Reference in New Issue
Block a user