refactor: baseconfig.
This commit is contained in:
parent
886ee86eec
commit
3283611d7f
@ -1,8 +1,6 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/abronan/valkeyrie/store"
|
||||
"github.com/abronan/valkeyrie/store/boltdb"
|
||||
"github.com/ldez/traefik-certs-dumper/dumper"
|
||||
@ -15,7 +13,7 @@ var boltdbCmd = &cobra.Command{
|
||||
Use: "boltdb",
|
||||
Short: "TODO",
|
||||
Long: `TODO`,
|
||||
RunE: boltdbRun,
|
||||
RunE: runE(boltdbRun),
|
||||
}
|
||||
|
||||
func init() {
|
||||
@ -25,25 +23,8 @@ func init() {
|
||||
boltdbCmd.Flags().String("bucket", "traefik", "Bucket for boltdb.")
|
||||
}
|
||||
|
||||
func boltdbRun(cmd *cobra.Command, _ []string) error {
|
||||
// FIXME shared with file and all KVs
|
||||
dumpPath := cmd.Flag("dest").Value.String()
|
||||
|
||||
crtInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
}
|
||||
|
||||
keyInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
}
|
||||
|
||||
subDir, _ := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
|
||||
// ---
|
||||
|
||||
config, err := getBaseConfig(cmd)
|
||||
func boltdbRun(baseConfig *dumper.BaseConfig, cmd *cobra.Command) error {
|
||||
config, err := getKvConfig(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -54,5 +35,5 @@ func boltdbRun(cmd *cobra.Command, _ []string) error {
|
||||
config.Backend = store.BOLTDB
|
||||
boltdb.Register()
|
||||
|
||||
return kv.Dump(config, dumpPath, crtInfo, keyInfo, subDir)
|
||||
return kv.Dump(config, baseConfig)
|
||||
}
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/abronan/valkeyrie/store"
|
||||
"github.com/abronan/valkeyrie/store/consul"
|
||||
"github.com/ldez/traefik-certs-dumper/dumper"
|
||||
@ -15,7 +13,7 @@ var consulCmd = &cobra.Command{
|
||||
Use: "consul",
|
||||
Short: "TODO",
|
||||
Long: `TODO`,
|
||||
RunE: consulRun,
|
||||
RunE: runE(consulRun),
|
||||
}
|
||||
|
||||
func init() {
|
||||
@ -24,25 +22,8 @@ func init() {
|
||||
consulCmd.Flags().String("token", "", "Token for consul.")
|
||||
}
|
||||
|
||||
func consulRun(cmd *cobra.Command, _ []string) error {
|
||||
// FIXME shared with file and all KVs
|
||||
dumpPath := cmd.Flag("dest").Value.String()
|
||||
|
||||
crtInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
}
|
||||
|
||||
keyInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
}
|
||||
|
||||
subDir, _ := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
|
||||
// ---
|
||||
|
||||
config, err := getBaseConfig(cmd)
|
||||
func consulRun(baseConfig *dumper.BaseConfig, cmd *cobra.Command) error {
|
||||
config, err := getKvConfig(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -52,5 +33,5 @@ func consulRun(cmd *cobra.Command, _ []string) error {
|
||||
config.Backend = store.CONSUL
|
||||
consul.Register()
|
||||
|
||||
return kv.Dump(config, dumpPath, crtInfo, keyInfo, subDir)
|
||||
return kv.Dump(config, baseConfig)
|
||||
}
|
||||
|
||||
26
cmd/etcd.go
26
cmd/etcd.go
@ -1,7 +1,6 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/abronan/valkeyrie/store"
|
||||
@ -16,7 +15,7 @@ var etcdCmd = &cobra.Command{
|
||||
Use: "etcd",
|
||||
Short: "TODO",
|
||||
Long: `TODO`,
|
||||
RunE: etcdRun,
|
||||
RunE: runE(etcdRun),
|
||||
}
|
||||
|
||||
func init() {
|
||||
@ -25,25 +24,8 @@ func init() {
|
||||
etcdCmd.Flags().Int("sync-period", 0, "Sync period for etcd in seconds.")
|
||||
}
|
||||
|
||||
func etcdRun(cmd *cobra.Command, _ []string) error {
|
||||
// FIXME shared with file and all KVs
|
||||
dumpPath := cmd.Flag("dest").Value.String()
|
||||
|
||||
crtInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
}
|
||||
|
||||
keyInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
}
|
||||
|
||||
subDir, _ := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
|
||||
// ---
|
||||
|
||||
config, err := getBaseConfig(cmd)
|
||||
func etcdRun(baseConfig *dumper.BaseConfig, cmd *cobra.Command) error {
|
||||
config, err := getKvConfig(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -57,5 +39,5 @@ func etcdRun(cmd *cobra.Command, _ []string) error {
|
||||
config.Backend = store.ETCD
|
||||
etcd.Register()
|
||||
|
||||
return kv.Dump(config, dumpPath, crtInfo, keyInfo, subDir)
|
||||
return kv.Dump(config, baseConfig)
|
||||
}
|
||||
|
||||
30
cmd/file.go
30
cmd/file.go
@ -1,8 +1,6 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/ldez/traefik-certs-dumper/dumper"
|
||||
"github.com/ldez/traefik-certs-dumper/dumper/file"
|
||||
"github.com/spf13/cobra"
|
||||
@ -13,33 +11,11 @@ var fileCmd = &cobra.Command{
|
||||
Use: "file",
|
||||
Short: `Dump the content of the "acme.json" file.`,
|
||||
Long: `Dump the content of the "acme.json" file from Traefik to certificates.`,
|
||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||
// FIXME shared with KV
|
||||
dumpPath := cmd.Flag("dest").Value.String()
|
||||
|
||||
crtInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
}
|
||||
|
||||
keyInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
}
|
||||
|
||||
subDir, _ := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
|
||||
// ---
|
||||
|
||||
RunE: runE(func(baseConfig *dumper.BaseConfig, cmd *cobra.Command) error {
|
||||
acmeFile := cmd.Flag("source").Value.String()
|
||||
|
||||
err := file.Dump(acmeFile, dumpPath, crtInfo, keyInfo, subDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return dumper.Tree(dumpPath, "")
|
||||
},
|
||||
return file.Dump(acmeFile, baseConfig)
|
||||
}),
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
||||
@ -29,7 +29,7 @@ func init() {
|
||||
kvCmd.PersistentFlags().String("tls.ca-cert-file", "", "Root CA file for certificate verification if TLS is enabled.")
|
||||
}
|
||||
|
||||
func getBaseConfig(cmd *cobra.Command) (*kv.BaseConfig, error) {
|
||||
func getKvConfig(cmd *cobra.Command) (*kv.Config, error) {
|
||||
endpoints, err := cmd.Flags().GetStringSlice("endpoints")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -50,7 +50,7 @@ func getBaseConfig(cmd *cobra.Command) (*kv.BaseConfig, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &kv.BaseConfig{
|
||||
return &kv.Config{
|
||||
Endpoints: endpoints,
|
||||
Options: &store.Config{
|
||||
ClientTLS: nil,
|
||||
|
||||
37
cmd/root.go
37
cmd/root.go
@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/ldez/traefik-certs-dumper/dumper"
|
||||
homedir "github.com/mitchellh/go-homedir"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
@ -82,3 +83,39 @@ func initConfig() {
|
||||
fmt.Println("Using config file:", viper.ConfigFileUsed())
|
||||
}
|
||||
}
|
||||
|
||||
func getBaseConfig(cmd *cobra.Command) (*dumper.BaseConfig, error) {
|
||||
subDir, err := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &dumper.BaseConfig{
|
||||
DumpPath: cmd.Flag("dest").Value.String(),
|
||||
CrtInfo: dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
},
|
||||
KeyInfo: dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
},
|
||||
DomainSubDir: subDir,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func runE(apply func(*dumper.BaseConfig, *cobra.Command) error) func(*cobra.Command, []string) error {
|
||||
return func(cmd *cobra.Command, _ []string) error {
|
||||
baseConfig, err := getBaseConfig(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = apply(baseConfig, cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return dumper.Tree(baseConfig.DumpPath, "")
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/abronan/valkeyrie/store"
|
||||
"github.com/abronan/valkeyrie/store/zookeeper"
|
||||
"github.com/ldez/traefik-certs-dumper/dumper"
|
||||
@ -15,32 +13,15 @@ var zookeeperCmd = &cobra.Command{
|
||||
Use: "zookeeper",
|
||||
Short: "TODO",
|
||||
Long: `TODO`,
|
||||
RunE: zookeeperRun,
|
||||
RunE: runE(zookeeperRun),
|
||||
}
|
||||
|
||||
func init() {
|
||||
kvCmd.AddCommand(zookeeperCmd)
|
||||
}
|
||||
|
||||
func zookeeperRun(cmd *cobra.Command, _ []string) error {
|
||||
// FIXME shared with file and all KVs
|
||||
dumpPath := cmd.Flag("dest").Value.String()
|
||||
|
||||
crtInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("crt-name").Value.String(),
|
||||
Ext: cmd.Flag("crt-ext").Value.String(),
|
||||
}
|
||||
|
||||
keyInfo := dumper.FileInfo{
|
||||
Name: cmd.Flag("key-name").Value.String(),
|
||||
Ext: cmd.Flag("key-ext").Value.String(),
|
||||
}
|
||||
|
||||
subDir, _ := strconv.ParseBool(cmd.Flag("domain-subdir").Value.String())
|
||||
|
||||
// ---
|
||||
|
||||
config, err := getBaseConfig(cmd)
|
||||
func zookeeperRun(baseConfig *dumper.BaseConfig, cmd *cobra.Command) error {
|
||||
config, err := getKvConfig(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -48,5 +29,5 @@ func zookeeperRun(cmd *cobra.Command, _ []string) error {
|
||||
config.Backend = store.ZK
|
||||
zookeeper.Register()
|
||||
|
||||
return kv.Dump(config, dumpPath, crtInfo, keyInfo, subDir)
|
||||
return kv.Dump(config, baseConfig)
|
||||
}
|
||||
|
||||
9
dumper/config.go
Normal file
9
dumper/config.go
Normal file
@ -0,0 +1,9 @@
|
||||
package dumper
|
||||
|
||||
// BaseConfig FIXME
|
||||
type BaseConfig struct {
|
||||
DumpPath string
|
||||
CrtInfo FileInfo
|
||||
KeyInfo FileInfo
|
||||
DomainSubDir bool
|
||||
}
|
||||
@ -21,34 +21,34 @@ type FileInfo struct {
|
||||
}
|
||||
|
||||
// Dump FIXME
|
||||
func Dump(data *StoredData, dumpPath string, crtInfo, keyInfo FileInfo, domainSubDir bool) error {
|
||||
if err := os.RemoveAll(dumpPath); err != nil {
|
||||
func Dump(data *StoredData, baseConfig *BaseConfig) error {
|
||||
if err := os.RemoveAll(baseConfig.DumpPath); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !domainSubDir {
|
||||
if err := os.MkdirAll(filepath.Join(dumpPath, certsSubDir), 0755); err != nil {
|
||||
if !baseConfig.DomainSubDir {
|
||||
if err := os.MkdirAll(filepath.Join(baseConfig.DumpPath, certsSubDir), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(filepath.Join(dumpPath, keysSubDir), 0755); err != nil {
|
||||
if err := os.MkdirAll(filepath.Join(baseConfig.DumpPath, keysSubDir), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
privateKeyPem := extractPEMPrivateKey(data.Account)
|
||||
err := ioutil.WriteFile(filepath.Join(dumpPath, keysSubDir, "letsencrypt"+keyInfo.Ext), privateKeyPem, 0666)
|
||||
err := ioutil.WriteFile(filepath.Join(baseConfig.DumpPath, keysSubDir, "letsencrypt"+baseConfig.KeyInfo.Ext), privateKeyPem, 0666)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, cert := range data.Certificates {
|
||||
err := writeCert(dumpPath, cert, crtInfo, domainSubDir)
|
||||
err := writeCert(baseConfig.DumpPath, cert, baseConfig.CrtInfo, baseConfig.DomainSubDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = writeKey(dumpPath, cert, keyInfo, domainSubDir)
|
||||
err = writeKey(baseConfig.DumpPath, cert, baseConfig.KeyInfo, baseConfig.DomainSubDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -8,13 +8,13 @@ import (
|
||||
)
|
||||
|
||||
// Dump FIXME
|
||||
func Dump(acmeFile, dumpPath string, crtInfo, keyInfo dumper.FileInfo, domainSubDir bool) error {
|
||||
func Dump(acmeFile string, baseConfig *dumper.BaseConfig) error {
|
||||
data, err := readFile(acmeFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return dumper.Dump(data, dumpPath, crtInfo, keyInfo, domainSubDir)
|
||||
return dumper.Dump(data, baseConfig)
|
||||
}
|
||||
|
||||
func readFile(acmeFile string) (*dumper.StoredData, error) {
|
||||
|
||||
10
dumper/kv/config.go
Normal file
10
dumper/kv/config.go
Normal file
@ -0,0 +1,10 @@
|
||||
package kv
|
||||
|
||||
import "github.com/abronan/valkeyrie/store"
|
||||
|
||||
// Config FIXME
|
||||
type Config struct {
|
||||
Backend store.Backend
|
||||
Endpoints []string
|
||||
Options *store.Config
|
||||
}
|
||||
@ -14,15 +14,8 @@ import (
|
||||
// FIXME prefix
|
||||
const storeKey = "traefik/acme/account/object"
|
||||
|
||||
// BaseConfig FIXME
|
||||
type BaseConfig struct {
|
||||
Backend store.Backend
|
||||
Endpoints []string
|
||||
Options *store.Config
|
||||
}
|
||||
|
||||
// Dump FIXME
|
||||
func Dump(config *BaseConfig, dumpPath string, crtInfo, keyInfo dumper.FileInfo, domainSubDir bool) error {
|
||||
func Dump(config *Config, baseConfig *dumper.BaseConfig) error {
|
||||
kvStore, err := valkeyrie.NewStore(config.Backend, config.Endpoints, config.Options)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -38,7 +31,7 @@ func Dump(config *BaseConfig, dumpPath string, crtInfo, keyInfo dumper.FileInfo,
|
||||
return err
|
||||
}
|
||||
|
||||
return dumper.Dump(data, dumpPath, crtInfo, keyInfo, domainSubDir)
|
||||
return dumper.Dump(data, baseConfig)
|
||||
}
|
||||
|
||||
func getStoredDataFromGzip(pair *store.KVPair) (*dumper.StoredData, error) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user