blob: db2fb8547827b184d603f85cd4048c89ff1bfd44 [file] [log] [blame]
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04001package installer
2
3import (
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +04004 "bytes"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04005 "context"
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +04006 "fmt"
gioe72b54f2024-04-22 10:44:41 +04007 "io"
8 "net/http"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04009
10 corev1 "k8s.io/api/core/v1"
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +040011 "k8s.io/apimachinery/pkg/api/errors"
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040012 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13 "k8s.io/client-go/kubernetes"
14 "k8s.io/client-go/rest"
15 "k8s.io/client-go/tools/clientcmd"
16)
17
18type NamespaceCreator interface {
19 Create(name string) error
20}
21
Giorgi Lekveishvili1caed362023-12-13 16:29:43 +040022type ZoneInfo struct {
23 Zone string
24 Records string
25}
26
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040027type ZoneStatusFetcher interface {
gioe72b54f2024-04-22 10:44:41 +040028 Fetch(addr string) (string, error)
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040029}
30
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040031type realNamespaceCreator struct {
32 clientset *kubernetes.Clientset
33}
34
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040035func (n *realNamespaceCreator) Create(name string) error {
36 _, err := n.clientset.CoreV1().Namespaces().Create(context.Background(), &corev1.Namespace{
37 TypeMeta: metav1.TypeMeta{
38 Kind: " ",
39 APIVersion: "",
40 },
41 ObjectMeta: metav1.ObjectMeta{
42 Name: name,
43 },
44 }, metav1.CreateOptions{})
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +040045 if err != nil && errors.IsAlreadyExists(err) {
46 return nil
47 }
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040048 return err
49}
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040050
gioe72b54f2024-04-22 10:44:41 +040051// TODO(gio): take http client
52type realZoneStatusFetcher struct{}
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040053
gioe72b54f2024-04-22 10:44:41 +040054func (f *realZoneStatusFetcher) Fetch(addr string) (string, error) {
55 fmt.Printf("--- %s\n", addr)
56 resp, err := http.Get(addr)
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040057 if err != nil {
gioe72b54f2024-04-22 10:44:41 +040058 return "", err
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040059 }
gioe72b54f2024-04-22 10:44:41 +040060 var buf bytes.Buffer
61 if _, err := io.Copy(&buf, resp.Body); err != nil {
62 return "", err
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040063 }
gioe72b54f2024-04-22 10:44:41 +040064 return buf.String(), nil
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040065}
66
67func NewNamespaceCreator(kubeconfig string) (NamespaceCreator, error) {
68 clientset, err := NewKubeConfig(kubeconfig)
69 if err != nil {
70 return nil, err
71 }
72 return &realNamespaceCreator{clientset}, nil
73}
74
75func NewZoneStatusFetcher(kubeconfig string) (ZoneStatusFetcher, error) {
gioe72b54f2024-04-22 10:44:41 +040076 return &realZoneStatusFetcher{}, nil
Giorgi Lekveishvilicd9e42c2023-12-13 09:49:44 +040077}
78
79func NewKubeConfig(kubeconfig string) (*kubernetes.Clientset, error) {
80 if kubeconfig == "" {
81 config, err := rest.InClusterConfig()
82 if err != nil {
83 return nil, err
84 }
85 return kubernetes.NewForConfig(config)
86
87 } else {
88 config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
89 if err != nil {
90 return nil, err
91 }
92 return kubernetes.NewForConfig(config)
93 }
94}