62 lines
1.2 KiB
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
|
|
}
|