From 318f37ce0f95cf043029df36bac33a146e06dbe0 Mon Sep 17 00:00:00 2001 From: mfanjie Date: Mon, 13 Jun 2016 13:25:31 +0800 Subject: [PATCH] add federation-name and zone-name as controller manager flags --- .../app/controllermanager.go | 2 +- .../app/options/options.go | 6 ++++++ .../dnsprovider/providers/google/clouddns/rrsets.go | 2 +- federation/pkg/federation-controller/service/dns.go | 9 ++++----- .../service/servicecontroller.go | 11 ++++++++++- hack/verify-flags/known-flags.txt | 2 ++ 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/federation/cmd/federation-controller-manager/app/controllermanager.go b/federation/cmd/federation-controller-manager/app/controllermanager.go index ee0b169949b..b3a666030d5 100644 --- a/federation/cmd/federation-controller-manager/app/controllermanager.go +++ b/federation/cmd/federation-controller-manager/app/controllermanager.go @@ -121,7 +121,7 @@ func StartControllers(s *options.CMServer, restClientCfg *restclient.Config) err glog.Fatalf("Cloud provider could not be initialized: %v", err) } scClientset := federationclientset.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, servicecontroller.UserAgentName)) - servicecontroller := servicecontroller.New(scClientset, dns) + servicecontroller := servicecontroller.New(scClientset, dns, s.FederationName, s.ZoneName) if err := servicecontroller.Run(s.ConcurrentServiceSyncs, wait.NeverStop); err != nil { glog.Errorf("Failed to start service controller: %v", err) } diff --git a/federation/cmd/federation-controller-manager/app/options/options.go b/federation/cmd/federation-controller-manager/app/options/options.go index 05863e92953..af3930800c6 100644 --- a/federation/cmd/federation-controller-manager/app/options/options.go +++ b/federation/cmd/federation-controller-manager/app/options/options.go @@ -35,6 +35,10 @@ type ControllerManagerConfiguration struct { Port int `json:"port"` // address is the IP address to serve on (set to 0.0.0.0 for all interfaces). Address string `json:"address"` + // federation name. + FederationName string `json:"federationName"` + // zone name, like example.com. + ZoneName string `json:"zoneName"` // dnsProvider is the provider for dns services. DnsProvider string `json:"dnsProvider"` // dnsConfigFile is the path to the dns provider configuration file. @@ -90,6 +94,8 @@ func NewCMServer() *CMServer { func (s *CMServer) AddFlags(fs *pflag.FlagSet) { fs.IntVar(&s.Port, "port", s.Port, "The port that the controller-manager's http service runs on") fs.Var(componentconfig.IPVar{Val: &s.Address}, "address", "The IP address to serve on (set to 0.0.0.0 for all interfaces)") + fs.StringVar(&s.FederationName, "federation-name", s.FederationName, "Federation name.") + fs.StringVar(&s.ZoneName, "zone-name", s.ZoneName, "Zone name, like example.com.") fs.IntVar(&s.ConcurrentServiceSyncs, "concurrent-service-syncs", s.ConcurrentServiceSyncs, "The number of service syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load") fs.DurationVar(&s.ClusterMonitorPeriod.Duration, "cluster-monitor-period", s.ClusterMonitorPeriod.Duration, "The period for syncing ClusterStatus in ClusterController.") fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go b/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go index 3a03820ef33..1fae25bb506 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/rrsets.go @@ -58,7 +58,7 @@ func (rrsets ResourceRecordSets) Add(rrset dnsprovider.ResourceRecordSet) (dnspr func (rrsets ResourceRecordSets) Remove(rrset dnsprovider.ResourceRecordSet) error { service := rrsets.zone.zones.interface_.service.Changes() - deletions := []interfaces.ResourceRecordSet{rrset.(ResourceRecordSet).impl} + deletions := []interfaces.ResourceRecordSet{rrset.(*ResourceRecordSet).impl} change := service.NewChange([]interfaces.ResourceRecordSet{}, deletions) newChange, err := service.Create(rrsets.project(), rrsets.zone.impl.Name(), change).Do() if err != nil { diff --git a/federation/pkg/federation-controller/service/dns.go b/federation/pkg/federation-controller/service/dns.go index 9f1574e9f2e..f3d4e378454 100644 --- a/federation/pkg/federation-controller/service/dns.go +++ b/federation/pkg/federation-controller/service/dns.go @@ -85,8 +85,7 @@ func (s *ServiceController) getClusterZoneNames(clusterName string) (zones []str // getFederationDNSZoneName returns the name of the managed DNS Zone configured for this federation func (s *ServiceController) getFederationDNSZoneName() (string, error) { - return "example.com", nil // TODO: quinton: Get this from the federation configuration. - // Note: For unit testing this must match the domain populated in the test/stub dnsprovider. + return s.zoneName, nil } // getDnsZone is a hack around the fact that dnsprovider does not yet support a Get() method, only a List() method. TODO: Fix that. @@ -254,12 +253,12 @@ func (s *ServiceController) ensureDnsRecords(clusterName string, cachedService * // the state of the service when we last successfully sync'd it's DNS records. // So this time around we only need to patch that (add new records, remove deleted records, and update changed records. // - if s.dns == nil { - return nil - } if s == nil { return fmt.Errorf("nil ServiceController passed to ServiceController.ensureDnsRecords(clusterName: %s, cachedService: %v)", clusterName, cachedService) } + if s.dns == nil { + return nil + } if cachedService == nil { return fmt.Errorf("nil cachedService passed to ServiceController.ensureDnsRecords(clusterName: %s, cachedService: %v)", clusterName, cachedService) } diff --git a/federation/pkg/federation-controller/service/servicecontroller.go b/federation/pkg/federation-controller/service/servicecontroller.go index 5a097bb14b4..32ea24a00bc 100644 --- a/federation/pkg/federation-controller/service/servicecontroller.go +++ b/federation/pkg/federation-controller/service/servicecontroller.go @@ -101,6 +101,7 @@ type ServiceController struct { dns dnsprovider.Interface federationClient federation_release_1_3.Interface federationName string + zoneName string // each federation should be configured with a single zone (e.g. "mycompany.com") dnsZones dnsprovider.Zones serviceCache *serviceCache @@ -123,7 +124,7 @@ type ServiceController struct { // New returns a new service controller to keep DNS provider service resources // (like Kubernetes Services and DNS server records for service discovery) in sync with the registry. -func New(federationClient federation_release_1_3.Interface, dns dnsprovider.Interface) *ServiceController { +func New(federationClient federation_release_1_3.Interface, dns dnsprovider.Interface, federationName, zoneName string) *ServiceController { broadcaster := record.NewBroadcaster() // federationClient event is not supported yet // broadcaster.StartRecordingToSink(&unversioned_core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) @@ -132,6 +133,8 @@ func New(federationClient federation_release_1_3.Interface, dns dnsprovider.Inte s := &ServiceController{ dns: dns, federationClient: federationClient, + federationName: federationName, + zoneName: zoneName, serviceCache: &serviceCache{fedServiceMap: make(map[string]*cachedService)}, clusterCache: &clusterClientCache{ rwlock: sync.Mutex{}, @@ -246,6 +249,12 @@ func (s *ServiceController) Run(workers int, stopCh <-chan struct{}) error { } func (s *ServiceController) init() error { + if s.federationName == "" { + return fmt.Errorf("ServiceController should not be run without federationName.") + } + if s.zoneName == "" { + return fmt.Errorf("ServiceController should not be run without zoneName.") + } if s.dns == nil { return fmt.Errorf("ServiceController should not be run without a dnsprovider.") } diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index 4411ef7069a..db06c19d75e 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -158,6 +158,7 @@ fake-clientset federated-api-burst federated-api-qps federated-kube-context +federation-name file-check-frequency file-suffix file_content_in_loop @@ -473,3 +474,4 @@ watch-only whitelist-override-label windows-line-endings www-prefix +zone-name