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:
k8s-merge-robot 2016-06-21 07:45:13 -07:00 committed by GitHub
commit 4468e15fc7
38 changed files with 104 additions and 1 deletions

View File

@ -27,6 +27,11 @@ type Interface interface {
type Zones interface { type Zones interface {
// List returns the managed Zones, or an error if the list operation failed. // List returns the managed Zones, or an error if the list operation failed.
List() ([]Zone, error) 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 { type Zone interface {

View File

@ -18,7 +18,9 @@ package route53
import ( import (
"github.com/aws/aws-sdk-go/service/route53" "github.com/aws/aws-sdk-go/service/route53"
"k8s.io/kubernetes/federation/pkg/dnsprovider" "k8s.io/kubernetes/federation/pkg/dnsprovider"
"k8s.io/kubernetes/pkg/util"
) )
// Compile time check for interface adeherence // Compile time check for interface adeherence
@ -43,3 +45,19 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) {
} }
return zoneList, nil 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
}

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.Change = Change{} var _ interfaces.Change = Change{}
type Change struct{ impl *dns.Change } type Change struct{ impl *dns.Change }

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ChangesCreateCall = ChangesCreateCall{} var _ interfaces.ChangesCreateCall = ChangesCreateCall{}
type ChangesCreateCall struct{ impl *dns.ChangesCreateCall } type ChangesCreateCall struct{ impl *dns.ChangesCreateCall }

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ChangesService = ChangesService{} var _ interfaces.ChangesService = ChangesService{}
type ChangesService struct{ impl *dns.ChangesService } type ChangesService struct{ impl *dns.ChangesService }

View File

@ -133,10 +133,11 @@ type (
ManagedZonesService interface { ManagedZonesService interface {
// NewManagedZonesService(s *Service) *ManagedZonesService // TODO: Add to service if needed // 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 Delete(project string, managedZone string) ManagedZonesDeleteCall
Get(project string, managedZone string) ManagedZonesGetCall Get(project string, managedZone string) ManagedZonesGetCall
List(project string) ManagedZonesListCall List(project string) ManagedZonesListCall
NewManagedZone(dnsName string) ManagedZone
} }
Project interface { Project interface {

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZone = ManagedZone{} var _ interfaces.ManagedZone = ManagedZone{}
type ManagedZone struct{ impl *dns.ManagedZone } type ManagedZone struct{ impl *dns.ManagedZone }

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{} var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{}
type ManagedZonesCreateCall struct{ impl *dns.ManagedZonesCreateCall } type ManagedZonesCreateCall struct{ impl *dns.ManagedZonesCreateCall }

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{} var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{}
type ManagedZonesDeleteCall struct{ impl *dns.ManagedZonesDeleteCall } type ManagedZonesDeleteCall struct{ impl *dns.ManagedZonesDeleteCall }

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{} var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{}
type ManagedZonesGetCall struct{ impl *dns.ManagedZonesGetCall } type ManagedZonesGetCall struct{ impl *dns.ManagedZonesGetCall }

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{} var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{}
type ManagedZonesListCall struct{ impl *dns.ManagedZonesListCall } type ManagedZonesListCall struct{ impl *dns.ManagedZonesListCall }

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{} var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{}
type ManagedZonesListResponse struct{ impl *dns.ManagedZonesListResponse } type ManagedZonesListResponse struct{ impl *dns.ManagedZonesListResponse }

View File

@ -19,8 +19,10 @@ package internal
import ( import (
dns "google.golang.org/api/dns/v1" dns "google.golang.org/api/dns/v1"
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "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{} var _ interfaces.ManagedZonesService = &ManagedZonesService{}
type ManagedZonesService struct{ impl *dns.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 { func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCall {
return &ManagedZonesListCall{m.impl.List(project)} 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}}
}

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSet = ResourceRecordSet{} var _ interfaces.ResourceRecordSet = ResourceRecordSet{}
type ResourceRecordSet struct{ impl *dns.ResourceRecordSet } type ResourceRecordSet struct{ impl *dns.ResourceRecordSet }

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{} var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{}
type ResourceRecordSetsListCall struct { type ResourceRecordSetsListCall struct {

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{} var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{}
type ResourceRecordSetsListResponse struct { type ResourceRecordSetsListResponse struct {

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype" "k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{} var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{}
type ResourceRecordSetsService struct { type ResourceRecordSetsService struct {

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.Service = &Service{} var _ interfaces.Service = &Service{}
type Service struct { type Service struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.Change = &Change{} var _ interfaces.Change = &Change{}
type Change struct { type Change struct {

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ChangesCreateCall = ChangesCreateCall{} var _ interfaces.ChangesCreateCall = ChangesCreateCall{}
type ChangesCreateCall struct { type ChangesCreateCall struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ChangesService = &ChangesService{} var _ interfaces.ChangesService = &ChangesService{}
type ChangesService struct { type ChangesService struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ManagedZone = ManagedZone{} var _ interfaces.ManagedZone = ManagedZone{}
type ManagedZone struct { type ManagedZone struct {

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{} var _ interfaces.ManagedZonesCreateCall = ManagedZonesCreateCall{}
type ManagedZonesCreateCall struct { type ManagedZonesCreateCall struct {

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{} var _ interfaces.ManagedZonesDeleteCall = ManagedZonesDeleteCall{}
type ManagedZonesDeleteCall struct { type ManagedZonesDeleteCall struct {

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{} var _ interfaces.ManagedZonesGetCall = ManagedZonesGetCall{}
type ManagedZonesGetCall struct { type ManagedZonesGetCall struct {

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{} var _ interfaces.ManagedZonesListCall = &ManagedZonesListCall{}
type ManagedZonesListCall struct { type ManagedZonesListCall struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{} var _ interfaces.ManagedZonesListResponse = &ManagedZonesListResponse{}
type ManagedZonesListResponse struct{ ManagedZones_ []interfaces.ManagedZone } type ManagedZonesListResponse struct{ ManagedZones_ []interfaces.ManagedZone }

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ManagedZonesService = &ManagedZonesService{} var _ interfaces.ManagedZonesService = &ManagedZonesService{}
type ManagedZonesService struct { type ManagedZonesService struct {
@ -39,3 +40,7 @@ func (m *ManagedZonesService) Get(project string, managedZone string) interfaces
func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCall { func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCall {
return &ManagedZonesListCall{m, project, nil, nil, ""} return &ManagedZonesListCall{m, project, nil, nil, ""}
} }
func (m *ManagedZonesService) NewManagedZone(dnsName string) interfaces.ManagedZone {
return &ManagedZone{Service: m, Name_: dnsName}
}

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSet = ResourceRecordSet{} var _ interfaces.ResourceRecordSet = ResourceRecordSet{}
type ResourceRecordSet struct { type ResourceRecordSet struct {

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{} var _ interfaces.ResourceRecordSetsListCall = &ResourceRecordSetsListCall{}
type ResourceRecordSetsListCall struct { type ResourceRecordSetsListCall struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{} var _ interfaces.ResourceRecordSetsListResponse = &ResourceRecordSetsListResponse{}
type ResourceRecordSetsListResponse struct { type ResourceRecordSetsListResponse struct {

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype" "k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
) )
// Compile time check for interface adeherence
var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{} var _ interfaces.ResourceRecordSetsService = &ResourceRecordSetsService{}
type ResourceRecordSetsService struct { type ResourceRecordSetsService struct {

View File

@ -18,6 +18,7 @@ package stubs
import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" import "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
// Compile time check for interface adeherence
var _ interfaces.Service = &Service{} var _ interfaces.Service = &Service{}
type Service struct { type Service struct {

View File

@ -17,10 +17,14 @@ limitations under the License.
package clouddns package clouddns
import ( import (
"k8s.io/kubernetes/federation/pkg/dnsprovider"
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype" "k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
) )
// Compile time check for interface adeherence
var _ dnsprovider.ResourceRecordSet = ResourceRecordSet{}
type ResourceRecordSet struct { type ResourceRecordSet struct {
impl interfaces.ResourceRecordSet impl interfaces.ResourceRecordSet
rrsets *ResourceRecordSets rrsets *ResourceRecordSets

View File

@ -24,6 +24,9 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype" "k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
) )
// Compile time check for interface adeherence
var _ dnsprovider.ResourceRecordSets = ResourceRecordSets{}
type ResourceRecordSets struct { type ResourceRecordSets struct {
zone *Zone zone *Zone
impl interfaces.ResourceRecordSetsService impl interfaces.ResourceRecordSetsService

View File

@ -21,6 +21,9 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ dnsprovider.Zone = &Zone{}
type Zone struct { type Zone struct {
impl interfaces.ManagedZone impl interfaces.ManagedZone
zones *Zones zones *Zones

View File

@ -21,6 +21,9 @@ import (
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces"
) )
// Compile time check for interface adeherence
var _ dnsprovider.Zones = Zones{}
type Zones struct { type Zones struct {
impl interfaces.ManagedZonesService impl interfaces.ManagedZonesService
interface_ *Interface interface_ *Interface
@ -39,6 +42,20 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) {
return zoneList, nil 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 { func (zones Zones) project() string {
return zones.interface_.project() return zones.interface_.project()
} }

View File

@ -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.") return fmt.Errorf("the dns provider does not support zone enumeration, which is required for creating dns records.")
} }
s.dnsZones = zones 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 return nil
} }