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/aws/route53:go_default_library",
|
||||||
"//dnsprovider/pkg/dnsprovider/providers/coredns:go_default_library",
|
"//dnsprovider/pkg/dnsprovider/providers/coredns:go_default_library",
|
||||||
"//dnsprovider/pkg/dnsprovider/providers/google/clouddns: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:go_default_library",
|
||||||
"//protokube/pkg/gossip/dns:go_default_library",
|
"//protokube/pkg/gossip/dns:go_default_library",
|
||||||
"//protokube/pkg/gossip/dns/provider:go_default_library",
|
"//protokube/pkg/gossip/dns/provider:go_default_library",
|
||||||
|
|
|
||||||
|
|
@ -26,14 +26,17 @@ import (
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
|
|
||||||
"k8s.io/kops/dns-controller/pkg/dns"
|
"k8s.io/kops/dns-controller/pkg/dns"
|
||||||
"k8s.io/kops/dns-controller/pkg/watchers"
|
"k8s.io/kops/dns-controller/pkg/watchers"
|
||||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
||||||
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/aws/route53"
|
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/aws/route53"
|
||||||
k8scoredns "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/coredns"
|
k8scoredns "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/coredns"
|
||||||
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/google/clouddns"
|
_ "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/google/clouddns"
|
||||||
|
_ "k8s.io/kops/pkg/resources/digitalocean/dns"
|
||||||
"k8s.io/kops/protokube/pkg/gossip"
|
"k8s.io/kops/protokube/pkg/gossip"
|
||||||
gossipdns "k8s.io/kops/protokube/pkg/gossip/dns"
|
gossipdns "k8s.io/kops/protokube/pkg/gossip/dns"
|
||||||
gossipdnsprovider "k8s.io/kops/protokube/pkg/gossip/dns/provider"
|
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.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.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.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(&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(&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")
|
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 (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/digitalocean/godo"
|
"github.com/digitalocean/godo"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"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:go_default_library",
|
||||||
"//vendor/github.com/digitalocean/godo/context:go_default_library",
|
"//vendor/github.com/digitalocean/godo/context:go_default_library",
|
||||||
"//vendor/github.com/golang/glog: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
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/digitalocean/godo"
|
"github.com/digitalocean/godo"
|
||||||
"github.com/digitalocean/godo/context"
|
"github.com/digitalocean/godo/context"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
|
"golang.org/x/oauth2"
|
||||||
|
|
||||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
||||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider/rrstype"
|
"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
|
// DNS implements dnsprovider.Interface
|
||||||
type DNS struct {
|
type DNS struct {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue