blob: 3fa253b8e434e43bc8619809958f5747313112f2 [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"
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +04008 "k8s.io/apimachinery/pkg/api/errors"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04009 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10 "k8s.io/client-go/kubernetes"
11 "k8s.io/client-go/rest"
12 "k8s.io/client-go/tools/clientcmd"
13)
14
15type NamespaceCreator interface {
16 Create(name string) error
17}
18
19type realNamespaceCreator struct {
20 clientset *kubernetes.Clientset
21}
22
23func NewOutOfClusterNamespaceCreator(kubeconfig string) (NamespaceCreator, error) {
24 config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
25 if err != nil {
26 return nil, err
27 }
28 clientset, err := kubernetes.NewForConfig(config)
29 if err != nil {
30 return nil, err
31 }
32 return &realNamespaceCreator{clientset}, nil
33}
34
35func NewInClusterNamespaceCreator() (NamespaceCreator, error) {
36 config, err := rest.InClusterConfig()
37 if err != nil {
38 panic(err.Error())
39 }
40 clientset, err := kubernetes.NewForConfig(config)
41 if err != nil {
42 return nil, err
43 }
44 return &realNamespaceCreator{clientset}, nil
45}
46
47func (n *realNamespaceCreator) Create(name string) error {
48 _, err := n.clientset.CoreV1().Namespaces().Create(context.Background(), &corev1.Namespace{
49 TypeMeta: metav1.TypeMeta{
50 Kind: " ",
51 APIVersion: "",
52 },
53 ObjectMeta: metav1.ObjectMeta{
54 Name: name,
55 },
56 }, metav1.CreateOptions{})
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +040057 if err != nil && errors.IsAlreadyExists(err) {
58 return nil
59 }
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040060 return err
61}