mirror of https://github.com/kubernetes/kops.git
dns-controller: support digitalocean
This commit is contained in:
parent
418f616574
commit
662939e626
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue