blob: 25a7103e7dea89f22c3df2fb43623896f5b0a67f [file] [log] [blame]
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04001package installer
2
3import (
4 "context"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04005
6 corev1 "k8s.io/api/core/v1"
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +04007 "k8s.io/apimachinery/pkg/api/errors"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04008 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{})
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +040056 if err != nil && errors.IsAlreadyExists(err) {
57 return nil
58 }
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040059 return err
60}