Files
canada-kaktus/internal/k8s.go

62 lines
1.2 KiB
Go

package internal
import (
"bytes"
"errors"
"fmt"
"html/template"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
)
func RecreateDnsCrd() error {
k8s_config, err := rest.InClusterConfig()
if err != nil {
return errors.New(fmt.Sprintf("Could not create in cluster k8s config: %v", err))
}
_, err = kubernetes.NewForConfig(k8s_config)
if err != nil {
return errors.New(fmt.Sprintf("Could not create k8s client: %v", err))
}
return nil
}
var CRD_TEMPLATE = `
apiVersion: externaldns.k8s.io/v1alpha1
kind: DNSEndpoint
metadata:
name: {{ .Name }}
annotations:
external.dns/provider: cf
spec:
endpoints:
- dnsName: mail
recordTTL: 180
recordType: A
targets:
- {{ .IP }}
`
type CrdConfig struct {
Name string
IP string
}
func generateCrd(name string, ip string) (string, error) {
config := CrdConfig{
Name: name,
IP: ip,
}
tmpl, err := template.New("crd").Parse(CRD_TEMPLATE)
if err != nil {
return "", errors.New(fmt.Sprintf("Errors in crd template: %s", err.Error()))
}
var buf bytes.Buffer
err = tmpl.Execute(&buf, &config)
if err != nil {
return "", errors.New(fmt.Sprintf("Could not render crd template: %s", err.Error()))
}
return buf.String(), nil
}