dns-controller: support digitalocean

This commit is contained in:
andrewsykim 2018-02-24 13:48:43 -05:00
parent 418f616574
commit 662939e626
5 changed files with 54 additions and 4 deletions

View File

@ -12,6 +12,7 @@ go_library(
"//dnsprovider/pkg/dnsprovider/providers/aws/route53:go_default_library",
"//dnsprovider/pkg/dnsprovider/providers/coredns:go_default_library",
"//dnsprovider/pkg/dnsprovider/providers/google/clouddns:go_default_library",
"//pkg/resources/digitalocean/dns:go_default_library",
"//protokube/pkg/gossip:go_default_library",
"//protokube/pkg/gossip/dns:go_default_library",
"//protokube/pkg/gossip/dns/provider:go_default_library",

View File

@ -26,14 +26,17 @@ import (
"github.com/golang/glog"
"github.com/spf13/pflag"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/kops/dns-controller/pkg/dns"
"k8s.io/kops/dns-controller/pkg/watchers"
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/aws/route53"
k8scoredns "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/coredns"
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/google/clouddns"
_ "k8s.io/kops/pkg/resources/digitalocean/dns"
"k8s.io/kops/protokube/pkg/gossip"
gossipdns "k8s.io/kops/protokube/pkg/gossip/dns"
gossipdnsprovider "k8s.io/kops/protokube/pkg/gossip/dns/provider"
@ -58,7 +61,7 @@ func main() {
flags.BoolVar(&watchIngress, "watch-ingress", true, "Configure hostnames found in ingress resources")
flags.StringSliceVar(&gossipSeeds, "gossip-seed", gossipSeeds, "If set, will enable gossip zones and seed using the provided addresses")
flags.StringSliceVarP(&zones, "zone", "z", []string{}, "Configure permitted zones and their mappings")
flags.StringVar(&dnsProviderID, "dns", "aws-route53", "DNS provider we should use (aws-route53, google-clouddns, coredns, gossip)")
flags.StringVar(&dnsProviderID, "dns", "aws-route53", "DNS provider we should use (aws-route53, google-clouddns, digitalocean, coredns, gossip)")
flags.StringVar(&gossipListen, "gossip-listen", "0.0.0.0:3998", "The address on which to listen if gossip is enabled")
flags.StringVar(&gossipSecret, "gossip-secret", gossipSecret, "Secret to use to secure gossip")
flags.StringVar(&watchNamespace, "watch-namespace", "", "Limits the functionality for pods, services and ingress to specific namespace, by default all")

View File

@ -18,14 +18,13 @@ package digitalocean
import (
"errors"
"fmt"
"os"
"github.com/digitalocean/godo"
"github.com/golang/glog"
"golang.org/x/oauth2"
"fmt"
"k8s.io/api/core/v1"
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
"k8s.io/kops/pkg/apis/kops"

View File

@ -11,6 +11,7 @@ go_library(
"//vendor/github.com/digitalocean/godo:go_default_library",
"//vendor/github.com/digitalocean/godo/context:go_default_library",
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/golang.org/x/oauth2:go_default_library",
],
)

View File

@ -17,18 +17,64 @@ limitations under the License.
package dns
import (
"errors"
"fmt"
"io"
"os"
"github.com/digitalocean/godo"
"github.com/digitalocean/godo/context"
"github.com/golang/glog"
"golang.org/x/oauth2"
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
"k8s.io/kops/dnsprovider/pkg/dnsprovider/rrstype"
)
const ipPlaceholder = "203.0.113.123"
const (
ipPlaceholder = "203.0.113.123"
providerName = "digitalocean"
)
func init() {
dnsprovider.RegisterDnsProvider(providerName, func(config io.Reader) (dnsprovider.Interface, error) {
client, err := newClient()
if err != nil {
return nil, err
}
return NewProvider(client), nil
})
}
// TokenSource implements oauth2.TokenSource
type TokenSource struct {
AccessToken string
}
// Token() returns oauth2.Token
func (t *TokenSource) Token() (*oauth2.Token, error) {
token := &oauth2.Token{
AccessToken: t.AccessToken,
}
return token, nil
}
func newClient() (*godo.Client, error) {
accessToken := os.Getenv("DO_ACCESS_TOKEN")
if accessToken == "" {
return nil, errors.New("DO_ACCESS_TOKEN is required")
}
tokenSource := &TokenSource{
AccessToken: accessToken,
}
oauthClient := oauth2.NewClient(oauth2.NoContext, tokenSource)
return godo.NewClient(oauthClient), nil
}
// DNS implements dnsprovider.Interface
type DNS struct {