mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #27695 from quinton-hoole/2016-06-17-create-federation-dns-zone-if-missing
Automatic merge from submit-queue Create federation dns zone if missing 1. Added Zones.Add() method to generic dnsprovider interface, as well as Google and AWS implementations. 2. Automatically add the configured zone name to the dnsprovider if it does not already exist.
This commit is contained in:
commit
4468e15fc7
@ -27,6 +27,11 @@ type Interface interface {
|
||||
type Zones interface {
|
||||
// List returns the managed Zones, or an error if the list operation failed.
|
||||
List() ([]Zone, error)
|
||||
// Add creates and returns a new managed zone, or an error if the operation failed
|
||||
Add(Zone) (Zone, error)
|
||||
// New allocates a new Zone, which can then be passed to Add()
|
||||
// Arguments are as per the Zone interface below.
|
||||
New(name string) (Zone, error)
|
||||
}
|
||||
|
||||
type Zone interface {
|
||||
|
@ -18,7 +18,9 @@ package route53
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/service/route53"
|
||||
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
@ -43,3 +45,19 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) {
|
||||
}
|
||||
return zoneList, nil
|
||||
}
|
||||
|
||||
func (zones Zones) Add(zone dnsprovider.Zone) (dnsprovider.Zone, error) {
|
||||
dnsName := zone.Name()
|
||||
input := route53.CreateHostedZoneInput{Name: &dnsName}
|
||||
output, err := zones.interface_.service.CreateHostedZone(&input)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Zone{output.HostedZone, &zones}, nil
|
||||
}
|
||||
|
||||
func (zones Zones) New(name string) (dnsprovider.Zone, error) {
|
||||
id := string(util.NewUUID())
|
||||
managedZone := route53.HostedZone{Id: &id, Name: &name}
|
||||
return &Zone{&managedZone, &zones}, nil
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.Change = Change{}
|
||||
|
||||
type Change struct{ impl *dns.Change }
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ChangesCreateCall = ChangesCreateCall{}
|
||||
|
||||
type ChangesCreateCall struct{ impl *dns.ChangesCreateCall }
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ChangesService = ChangesService{}
|
||||
|
||||
type ChangesService struct{ impl *dns.ChangesService }
|
||||
|
@ -133,10 +133,11 @@ type (
|
||||
|
||||
ManagedZonesService interface {
|
||||
// NewManagedZonesService(s *Service) *ManagedZonesService // TODO: Add to service if needed
|
||||
Create(project string, managedzone ManagedZone) ManagedZonesCreateCall
|
||||
Create(project string, managedZone ManagedZone) ManagedZonesCreateCall
|
||||
Delete(project string, managedZone string) ManagedZonesDeleteCall
|
||||
Get(project string, managedZone string) ManagedZonesGetCall
|
||||
List(project string) ManagedZonesListCall
|
||||
NewManagedZone(dnsName string) ManagedZone
|
||||
}
|
||||
|
||||
Project interface {
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZone = ManagedZone{}
|
||||
|
||||
type ManagedZone struct{ impl *dns.ManagedZone }
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{}
|
||||
|
||||
type ManagedZonesCreateCall struct{ impl *dns.ManagedZonesCreateCall }
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{}
|
||||
|
||||
type ManagedZonesDeleteCall struct{ impl *dns.ManagedZonesDeleteCall }
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{}
|
||||
|
||||
type ManagedZonesGetCall struct{ impl *dns.ManagedZonesGetCall }
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{}
|
||||
|
||||
type ManagedZonesListCall struct{ impl *dns.ManagedZonesListCall }
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{}
|
||||
|
||||
type ManagedZonesListResponse struct{ impl *dns.ManagedZonesListResponse }
|
||||
|
@ -19,8 +19,10 @@ package internal
|
||||
import (
|
||||
dns "google.golang.org/api/dns/v1"
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesService = &ManagedZonesService{}
|
||||
|
||||
type ManagedZonesService struct{ impl *dns.ManagedZonesService }
|
||||
@ -40,3 +42,7 @@ func (m *ManagedZonesService) Get(project, managedZone string) interfaces.Manage
|
||||
func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCall {
|
||||
return &ManagedZonesListCall{m.impl.List(project)}
|
||||
}
|
||||
|
||||
func (m *ManagedZonesService) NewManagedZone(dnsName string) interfaces.ManagedZone {
|
||||
return &ManagedZone{impl: &dns.ManagedZone{Name: string(util.NewUUID()), DnsName: dnsName}}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSet = ResourceRecordSet{}
|
||||
|
||||
type ResourceRecordSet struct{ impl *dns.ResourceRecordSet }
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{}
|
||||
|
||||
type ResourceRecordSetsListCall struct {
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{}
|
||||
|
||||
type ResourceRecordSetsListResponse struct {
|
||||
|
@ -22,6 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{}
|
||||
|
||||
type ResourceRecordSetsService struct {
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.Service = &Service{}
|
||||
|
||||
type Service struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.Change = &Change{}
|
||||
|
||||
type Change struct {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ChangesCreateCall = ChangesCreateCall{}
|
||||
|
||||
type ChangesCreateCall struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ChangesService = &ChangesService{}
|
||||
|
||||
type ChangesService struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZone = ManagedZone{}
|
||||
|
||||
type ManagedZone struct {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{}
|
||||
|
||||
type ManagedZonesCreateCall struct {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{}
|
||||
|
||||
type ManagedZonesDeleteCall struct {
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{}
|
||||
|
||||
type ManagedZonesGetCall struct {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{}
|
||||
|
||||
type ManagedZonesListCall struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{}
|
||||
|
||||
type ManagedZonesListResponse struct{ ManagedZones_ []interfaces.ManagedZone }
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ManagedZonesService = &ManagedZonesService{}
|
||||
|
||||
type ManagedZonesService struct {
|
||||
@ -39,3 +40,7 @@ func (m *ManagedZonesService) Get(project string, managedZone string) interfaces
|
||||
func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCall {
|
||||
return &ManagedZonesListCall{m, project, nil, nil, ""}
|
||||
}
|
||||
|
||||
func (m *ManagedZonesService) NewManagedZone(dnsName string) interfaces.ManagedZone {
|
||||
return &ManagedZone{Service: m, Name_: dnsName}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSet = ResourceRecordSet{}
|
||||
|
||||
type ResourceRecordSet struct {
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{}
|
||||
|
||||
type ResourceRecordSetsListCall struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{}
|
||||
|
||||
type ResourceRecordSetsListResponse struct {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{}
|
||||
|
||||
type ResourceRecordSetsService struct {
|
||||
|
@ -18,6 +18,7 @@ package stubs
|
||||
|
||||
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ interfaces.Service = &Service{}
|
||||
|
||||
type Service struct {
|
||||
|
@ -17,10 +17,14 @@ limitations under the License.
|
||||
package clouddns
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ dnsprovider.ResourceRecordSet = ResourceRecordSet{}
|
||||
|
||||
type ResourceRecordSet struct {
|
||||
impl interfaces.ResourceRecordSet
|
||||
rrsets *ResourceRecordSets
|
||||
|
@ -24,6 +24,9 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ dnsprovider.ResourceRecordSets = ResourceRecordSets{}
|
||||
|
||||
type ResourceRecordSets struct {
|
||||
zone *Zone
|
||||
impl interfaces.ResourceRecordSetsService
|
||||
|
@ -21,6 +21,9 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ dnsprovider.Zone = &Zone{}
|
||||
|
||||
type Zone struct {
|
||||
impl interfaces.ManagedZone
|
||||
zones *Zones
|
||||
|
@ -21,6 +21,9 @@ import (
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
|
||||
)
|
||||
|
||||
// Compile time check for interface adeherence
|
||||
var _ dnsprovider.Zones = Zones{}
|
||||
|
||||
type Zones struct {
|
||||
impl interfaces.ManagedZonesService
|
||||
interface_ *Interface
|
||||
@ -39,6 +42,20 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) {
|
||||
return zoneList, nil
|
||||
}
|
||||
|
||||
func (zones Zones) Add(zone dnsprovider.Zone) (dnsprovider.Zone, error) {
|
||||
managedZone := zones.impl.NewManagedZone(zone.Name())
|
||||
response, err := zones.impl.Create(zones.project(), managedZone).Do()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Zone{response, &zones}, nil
|
||||
}
|
||||
|
||||
func (zones Zones) New(name string) (dnsprovider.Zone, error) {
|
||||
managedZone := zones.impl.NewManagedZone(name)
|
||||
return &Zone{managedZone, &zones}, nil
|
||||
}
|
||||
|
||||
func (zones Zones) project() string {
|
||||
return zones.interface_.project()
|
||||
}
|
||||
|
@ -263,6 +263,19 @@ func (s *ServiceController) init() error {
|
||||
return fmt.Errorf("the dns provider does not support zone enumeration, which is required for creating dns records.")
|
||||
}
|
||||
s.dnsZones = zones
|
||||
if _, err := getDnsZone(s.zoneName, s.dnsZones); err != nil {
|
||||
glog.Infof("DNS zone %q not found. Creating DNS zone %q.", s.zoneName, s.zoneName)
|
||||
managedZone, err := s.dnsZones.New(s.zoneName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
zone, err := s.dnsZones.Add(managedZone)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
glog.Infof("DNS zone %q successfully created. Note that DNS resolution will not work until you have registered this name with "+
|
||||
"a DNS registrar and they have changed the authoritative name servers for your domain to point to your DNS provider.", zone.Name())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user