refactor: baseconfig.

This commit is contained in:
Fernandez Ludovic 2019-04-20 17:19:45 +02:00
parent 886ee86eec
commit 3283611d7f
12 changed files with 89 additions and 139 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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() {

View File

@ -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,

View File

@ -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, "")
}
}

View File

@ -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
View File

@ -0,0 +1,9 @@
package dumper
// BaseConfig FIXME
type BaseConfig struct {
DumpPath string
CrtInfo FileInfo
KeyInfo FileInfo
DomainSubDir bool
}

View File

@ -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
}

View File

@ -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
View 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
}

View File

@ -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) {