From c1604d84b80d5a2474e3ccbd7eb1d277af4a4741 Mon Sep 17 00:00:00 2001 From: Quinton Hoole Date: Sun, 19 Jun 2016 12:12:18 -0700 Subject: [PATCH] Added managed zone creation to all dnsproviders. --- federation/pkg/dnsprovider/dns.go | 5 +++++ .../dnsprovider/providers/aws/route53/zones.go | 18 ++++++++++++++++++ .../google/clouddns/internal/change.go | 1 + .../clouddns/internal/changes_create_call.go | 1 + .../clouddns/internal/changes_service.go | 1 + .../clouddns/internal/interfaces/interfaces.go | 3 ++- .../google/clouddns/internal/managed_zone.go | 1 + .../internal/managed_zone_create_call.go | 1 + .../internal/managed_zones_delete_call.go | 1 + .../internal/managed_zones_get_call.go | 1 + .../internal/managed_zones_list_call.go | 1 + .../internal/managed_zones_list_response.go | 1 + .../clouddns/internal/managed_zones_service.go | 6 ++++++ .../google/clouddns/internal/rrset.go | 1 + .../clouddns/internal/rrsets_list_call.go | 1 + .../clouddns/internal/rrsets_list_response.go | 1 + .../google/clouddns/internal/rrsets_service.go | 1 + .../google/clouddns/internal/service.go | 1 + .../google/clouddns/internal/stubs/change.go | 1 + .../internal/stubs/changes_create_call.go | 1 + .../clouddns/internal/stubs/changes_service.go | 1 + .../clouddns/internal/stubs/managed_zone.go | 1 + .../internal/stubs/managed_zone_create_call.go | 1 + .../stubs/managed_zones_delete_call.go | 1 + .../internal/stubs/managed_zones_get_call.go | 1 + .../internal/stubs/managed_zones_list_call.go | 1 + .../stubs/managed_zones_list_response.go | 1 + .../internal/stubs/managed_zones_service.go | 5 +++++ .../google/clouddns/internal/stubs/rrset.go | 1 + .../internal/stubs/rrsets_list_call.go | 1 + .../internal/stubs/rrsets_list_response.go | 1 + .../clouddns/internal/stubs/rrsets_service.go | 1 + .../google/clouddns/internal/stubs/service.go | 1 + .../providers/google/clouddns/rrset.go | 4 ++++ .../providers/google/clouddns/rrsets.go | 3 +++ .../providers/google/clouddns/zone.go | 3 +++ .../providers/google/clouddns/zones.go | 17 +++++++++++++++++ .../service/servicecontroller.go | 13 +++++++++++++ 38 files changed, 104 insertions(+), 1 deletion(-) diff --git a/federation/pkg/dnsprovider/dns.go b/federation/pkg/dnsprovider/dns.go index 4e32850bf16..787367599a8 100644 --- a/federation/pkg/dnsprovider/dns.go +++ b/federation/pkg/dnsprovider/dns.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/aws/route53/zones.go b/federation/pkg/dnsprovider/providers/aws/route53/zones.go index 288147686bb..e836e5406ef 100644 --- a/federation/pkg/dnsprovider/providers/aws/route53/zones.go +++ b/federation/pkg/dnsprovider/providers/aws/route53/zones.go @@ -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 +} diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/change.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/change.go index 7b2a2edffaf..a77cadc0d1f 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/change.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/change.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_create_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_create_call.go index 6877ebe14ff..4fa335147e3 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_create_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_create_call.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_service.go index 3d8b7834912..9fcc8b897a4 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/changes_service.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces/interfaces.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces/interfaces.go index 2e7aab9d150..43e050fc887 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces/interfaces.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces/interfaces.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone.go index 9336ea090eb..5f1d3af318e 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone_create_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone_create_call.go index dc7c09e05f5..376decc4c8f 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone_create_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zone_create_call.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_delete_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_delete_call.go index 7bc398c166e..6fe25343ab7 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_delete_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_delete_call.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_get_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_get_call.go index ca1f5a412ea..36ba601a522 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_get_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_get_call.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_call.go index 6c0ec65ba27..32e8e6320ec 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_call.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_response.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_response.go index 27b734d9059..a98d992850d 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_response.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_list_response.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_service.go index 91ea5cce008..62d2587df90 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/managed_zones_service.go @@ -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}} +} diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrset.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrset.go index 5925cbe51e6..e880727f352 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrset.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrset.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_call.go index fc30be6d768..6a5857609ab 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_response.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_response.go index af4aa87e252..d12137bba49 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_response.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_list_response.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_service.go index ba1832cd451..99cb5deebcf 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/rrsets_service.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/service.go index d3854fb6225..a35c71f47d5 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/service.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/change.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/change.go index 2c103974974..4a455c8ac43 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/change.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/change.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_create_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_create_call.go index 6e81506cf39..9e573d16386 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_create_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_create_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_service.go index 1f764890722..c3844d8f4ad 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/changes_service.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone.go index 4391efd31af..6eb03fd93ab 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone_create_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone_create_call.go index fe4ef7cc882..21021ae0e9f 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone_create_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zone_create_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_delete_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_delete_call.go index e63fb74da26..0ef377b6fd7 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_delete_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_delete_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_get_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_get_call.go index 6fe75c04a83..b661303be41 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_get_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_get_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_call.go index d57815c79cd..c29806b4a2a 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_response.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_response.go index b949612f0c7..372f3b8f4c5 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_response.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_list_response.go @@ -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 } diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_service.go index 85b0087ea6d..9d849da7758 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/managed_zones_service.go @@ -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} +} diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrset.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrset.go index bef4de8c920..a2377dc2d0e 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrset.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrset.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_call.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_call.go index 0bdbafcc54d..8fb5d0ff9ee 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_call.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_call.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_response.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_response.go index 0e0b20a7f78..3b6ee5fb2ee 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_response.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_list_response.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_service.go index 753f31e42c3..c24a416e775 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/rrsets_service.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/service.go b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/service.go index ac7c48367a1..c1a2b736e32 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/service.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs/service.go @@ -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 { diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/rrset.go b/federation/pkg/dnsprovider/providers/google/clouddns/rrset.go index 40176b35706..a4582c01faf 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/rrset.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/rrset.go @@ -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 diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go b/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go index 2ec6cddf6bc..7216bec8f9c 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go @@ -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 diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/zone.go b/federation/pkg/dnsprovider/providers/google/clouddns/zone.go index 824df344c36..09d5048f652 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/zone.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/zone.go @@ -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 diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/zones.go b/federation/pkg/dnsprovider/providers/google/clouddns/zones.go index d2046812b5e..2cd7f21fe45 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/zones.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/zones.go @@ -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() } diff --git a/federation/pkg/federation-controller/service/servicecontroller.go b/federation/pkg/federation-controller/service/servicecontroller.go index cf9e1513e3f..0857d4d8319 100644 --- a/federation/pkg/federation-controller/service/servicecontroller.go +++ b/federation/pkg/federation-controller/service/servicecontroller.go @@ -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 }