installer: create namespaces with kube client
diff --git a/core/installer/kube.go b/core/installer/kube.go
new file mode 100644
index 0000000..bf22f40
--- /dev/null
+++ b/core/installer/kube.go
@@ -0,0 +1,58 @@
+package installer
+
+import (
+ "context"
+ "fmt"
+
+ corev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/clientcmd"
+)
+
+type NamespaceCreator interface {
+ Create(name string) error
+}
+
+type realNamespaceCreator struct {
+ clientset *kubernetes.Clientset
+}
+
+func NewOutOfClusterNamespaceCreator(kubeconfig string) (NamespaceCreator, error) {
+ config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
+ if err != nil {
+ return nil, err
+ }
+ clientset, err := kubernetes.NewForConfig(config)
+ if err != nil {
+ return nil, err
+ }
+ return &realNamespaceCreator{clientset}, nil
+}
+
+func NewInClusterNamespaceCreator() (NamespaceCreator, error) {
+ config, err := rest.InClusterConfig()
+ if err != nil {
+ panic(err.Error())
+ }
+ clientset, err := kubernetes.NewForConfig(config)
+ if err != nil {
+ return nil, err
+ }
+ return &realNamespaceCreator{clientset}, nil
+}
+
+func (n *realNamespaceCreator) Create(name string) error {
+ _, err := n.clientset.CoreV1().Namespaces().Create(context.Background(), &corev1.Namespace{
+ TypeMeta: metav1.TypeMeta{
+ Kind: " ",
+ APIVersion: "",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: name,
+ },
+ }, metav1.CreateOptions{})
+ fmt.Printf("++++ Created ns: %s %+v\n", name, err)
+ return err
+}