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 }