forked from spotahome/redis-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[DEVOPS-658] Decouple clients and flags from main
- Loading branch information
Julio Chana
committed
Apr 9, 2018
1 parent
79469f8
commit 69da7be
Showing
3 changed files
with
109 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package utils | ||
|
||
import ( | ||
"flag" | ||
"path/filepath" | ||
|
||
"github.com/spotahome/redis-operator/operator/redisfailover" | ||
"k8s.io/client-go/util/homedir" | ||
) | ||
|
||
// CMDFlags are the flags used by the cmd | ||
// TODO: improve flags. | ||
type CMDFlags struct { | ||
KubeConfig string | ||
Development bool | ||
Debug bool | ||
ListenAddr string | ||
MetricsPath string | ||
} | ||
|
||
// Init initializes and parse the flags | ||
func (c *CMDFlags) Init() { | ||
kubehome := filepath.Join(homedir.HomeDir(), ".kube", "config") | ||
// register flags | ||
flag.StringVar(&c.KubeConfig, "kubeconfig", kubehome, "kubernetes configuration path, only used when development mode enabled") | ||
flag.BoolVar(&c.Development, "development", false, "development flag will allow to run the operator outside a kubernetes cluster") | ||
flag.BoolVar(&c.Debug, "debug", false, "enable debug mode") | ||
flag.StringVar(&c.ListenAddr, "listen-address", ":9710", "Address to listen on for metrics.") | ||
flag.StringVar(&c.MetricsPath, "metrics-path", "/metrics", "Path to serve the metrics.") | ||
|
||
// Parse flags | ||
flag.Parse() | ||
} | ||
|
||
// ToRedisOperatorConfig convert the flags to redisfailover config | ||
func (c *CMDFlags) ToRedisOperatorConfig() redisfailover.Config { | ||
return redisfailover.Config{ | ||
Labels: map[string]string{}, | ||
ListenAddress: c.ListenAddr, | ||
MetricsPath: c.MetricsPath, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package utils | ||
|
||
import ( | ||
"fmt" | ||
|
||
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" | ||
"k8s.io/client-go/kubernetes" | ||
"k8s.io/client-go/rest" | ||
"k8s.io/client-go/tools/clientcmd" | ||
|
||
redisfailoverclientset "github.com/spotahome/redis-operator/client/k8s/clientset/versioned" | ||
) | ||
|
||
// LoadKubernetesConfig loads kubernetes configuration based on flags. | ||
func LoadKubernetesConfig(flags *CMDFlags) (*rest.Config, error) { | ||
var cfg *rest.Config | ||
// If devel mode then use configuration flag path. | ||
if flags.Development { | ||
config, err := clientcmd.BuildConfigFromFlags("", flags.KubeConfig) | ||
if err != nil { | ||
return nil, fmt.Errorf("could not load configuration: %s", err) | ||
} | ||
cfg = config | ||
} else { | ||
config, err := rest.InClusterConfig() | ||
if err != nil { | ||
return nil, fmt.Errorf("error loading kubernetes configuration inside cluster, check app is running outside kubernetes cluster or run in development mode: %s", err) | ||
} | ||
cfg = config | ||
} | ||
|
||
return cfg, nil | ||
} | ||
|
||
// CreateKubernetesClients create the clients to connect to kubernetes | ||
func CreateKubernetesClients(flags *CMDFlags) (kubernetes.Interface, redisfailoverclientset.Interface, apiextensionsclientset.Interface, error) { | ||
config, err := LoadKubernetesConfig(flags) | ||
if err != nil { | ||
return nil, nil, nil, err | ||
} | ||
|
||
clientset, err := kubernetes.NewForConfig(config) | ||
if err != nil { | ||
return nil, nil, nil, err | ||
} | ||
customClientset, err := redisfailoverclientset.NewForConfig(config) | ||
if err != nil { | ||
return nil, nil, nil, err | ||
} | ||
|
||
aeClientset, err := apiextensionsclientset.NewForConfig(config) | ||
if err != nil { | ||
return nil, nil, nil, err | ||
} | ||
|
||
return clientset, customClientset, aeClientset, nil | ||
} |