blob: bf22f40c859c4233985fe0b25337fd770126f8c1 [file] [log] [blame]
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04001package installer
2
3import (
4 "context"
5 "fmt"
6
7 corev1 "k8s.io/api/core/v1"
8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9 "k8s.io/client-go/kubernetes"
10 "k8s.io/client-go/rest"
11 "k8s.io/client-go/tools/clientcmd"
12)
13
14type NamespaceCreator interface {
15 Create(name string) error
16}
17
18type realNamespaceCreator struct {
19 clientset *kubernetes.Clientset
20}
21
22func NewOutOfClusterNamespaceCreator(kubeconfig string) (NamespaceCreator, error) {
23 config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
24 if err != nil {
25 return nil, err
26 }
27 clientset, err := kubernetes.NewForConfig(config)
28 if err != nil {
29 return nil, err
30 }
31 return &realNamespaceCreator{clientset}, nil
32}
33
34func NewInClusterNamespaceCreator() (NamespaceCreator, error) {
35 config, err := rest.InClusterConfig()
36 if err != nil {
37 panic(err.Error())
38 }
39 clientset, err := kubernetes.NewForConfig(config)
40 if err != nil {
41 return nil, err
42 }
43 return &realNamespaceCreator{clientset}, nil
44}
45
46func (n *realNamespaceCreator) Create(name string) error {
47 _, err := n.clientset.CoreV1().Namespaces().Create(context.Background(), &corev1.Namespace{
48 TypeMeta: metav1.TypeMeta{
49 Kind: " ",
50 APIVersion: "",
51 },
52 ObjectMeta: metav1.ObjectMeta{
53 Name: name,
54 },
55 }, metav1.CreateOptions{})
56 fmt.Printf("++++ Created ns: %s %+v\n", name, err)
57 return err
58}