Add stubDomains to kube-dns configmap for private nameserver
This commit is contained in:
		@@ -42,6 +42,7 @@ import (
 | 
				
			|||||||
	triple "k8s.io/client-go/util/cert/triple"
 | 
						triple "k8s.io/client-go/util/cert/triple"
 | 
				
			||||||
	kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
 | 
						kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
 | 
				
			||||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
						"k8s.io/kubernetes/federation/apis/federation"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns"
 | 
				
			||||||
	"k8s.io/kubernetes/federation/pkg/kubefed/util"
 | 
						"k8s.io/kubernetes/federation/pkg/kubefed/util"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
						"k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
@@ -55,6 +56,7 @@ import (
 | 
				
			|||||||
	"github.com/golang/glog"
 | 
						"github.com/golang/glog"
 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
	"github.com/spf13/pflag"
 | 
						"github.com/spf13/pflag"
 | 
				
			||||||
 | 
						"gopkg.in/gcfg.v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -379,7 +381,7 @@ func (i *initFederation) Run(cmdOut io.Writer, config util.AdminConfig) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	glog.V(4).Info("Creating federation controller manager deployment")
 | 
						glog.V(4).Info("Creating federation controller manager deployment")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = createControllerManager(hostClientset, i.commonOptions.FederationSystemNamespace, i.commonOptions.Name, svc.Name, cmName, i.options.image, cmKubeconfigName, i.options.dnsZoneName, i.options.dnsProvider, sa.Name, dnsProviderSecret, i.options.controllerManagerOverrides, i.options.dryRun)
 | 
						_, err = createControllerManager(hostClientset, i.commonOptions.FederationSystemNamespace, i.commonOptions.Name, svc.Name, cmName, i.options.image, cmKubeconfigName, i.options.dnsZoneName, i.options.dnsProvider, i.options.dnsProviderConfig, sa.Name, dnsProviderSecret, i.options.controllerManagerOverrides, i.options.dryRun)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -847,7 +849,7 @@ func createRoleBindings(clientset client.Interface, namespace, saName, federatio
 | 
				
			|||||||
	return newRole, newRolebinding, err
 | 
						return newRole, newRolebinding, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func createControllerManager(clientset client.Interface, namespace, name, svcName, cmName, image, kubeconfigName, dnsZoneName, dnsProvider, saName string, dnsProviderSecret *api.Secret, argOverrides map[string]string, dryRun bool) (*extensions.Deployment, error) {
 | 
					func createControllerManager(clientset client.Interface, namespace, name, svcName, cmName, image, kubeconfigName, dnsZoneName, dnsProvider, dnsProviderConfig, saName string, dnsProviderSecret *api.Secret, argOverrides map[string]string, dryRun bool) (*extensions.Deployment, error) {
 | 
				
			||||||
	command := []string{
 | 
						command := []string{
 | 
				
			||||||
		"/hyperkube",
 | 
							"/hyperkube",
 | 
				
			||||||
		"federation-controller-manager",
 | 
							"federation-controller-manager",
 | 
				
			||||||
@@ -935,12 +937,19 @@ func createControllerManager(clientset client.Interface, namespace, name, svcNam
 | 
				
			|||||||
		dep.Spec.Template.Spec.ServiceAccountName = saName
 | 
							dep.Spec.Template.Spec.ServiceAccountName = saName
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if dryRun {
 | 
					 | 
				
			||||||
		return dep, nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if dnsProviderSecret != nil {
 | 
						if dnsProviderSecret != nil {
 | 
				
			||||||
		dep = addDNSProviderConfig(dep, dnsProviderSecret.Name)
 | 
							dep = addDNSProviderConfig(dep, dnsProviderSecret.Name)
 | 
				
			||||||
 | 
							if dnsProvider == util.FedDNSProviderCoreDNS {
 | 
				
			||||||
 | 
								var err error
 | 
				
			||||||
 | 
								dep, err = addCoreDNSServerAnnotation(dep, dnsZoneName, dnsProviderConfig)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if dryRun {
 | 
				
			||||||
 | 
							return dep, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return clientset.Extensions().Deployments(namespace).Create(dep)
 | 
						return clientset.Extensions().Deployments(namespace).Create(dep)
 | 
				
			||||||
@@ -1154,3 +1163,15 @@ func addDNSProviderConfig(dep *extensions.Deployment, secretName string) *extens
 | 
				
			|||||||
func authFileContents(username, authSecret string) []byte {
 | 
					func authFileContents(username, authSecret string) []byte {
 | 
				
			||||||
	return []byte(fmt.Sprintf("%s,%s,%s\n", authSecret, username, uuid.NewUUID()))
 | 
						return []byte(fmt.Sprintf("%s,%s,%s\n", authSecret, username, uuid.NewUUID()))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func addCoreDNSServerAnnotation(deployment *extensions.Deployment, dnsZoneName, dnsProviderConfig string) (*extensions.Deployment, error) {
 | 
				
			||||||
 | 
						var cfg coredns.Config
 | 
				
			||||||
 | 
						if err := gcfg.ReadFileInto(&cfg, dnsProviderConfig); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedDNSZoneName] = dnsZoneName
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedNameServer] = cfg.Global.CoreDNSEndpoints
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedDNSProvider] = util.FedDNSProviderCoreDNS
 | 
				
			||||||
 | 
						return deployment, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,7 @@ import (
 | 
				
			|||||||
	"k8s.io/client-go/rest/fake"
 | 
						"k8s.io/client-go/rest/fake"
 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
						"k8s.io/kubernetes/federation/apis/federation"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns"
 | 
				
			||||||
	kubefedtesting "k8s.io/kubernetes/federation/pkg/kubefed/testing"
 | 
						kubefedtesting "k8s.io/kubernetes/federation/pkg/kubefed/testing"
 | 
				
			||||||
	"k8s.io/kubernetes/federation/pkg/kubefed/util"
 | 
						"k8s.io/kubernetes/federation/pkg/kubefed/util"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
@@ -55,6 +56,8 @@ import (
 | 
				
			|||||||
	rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1"
 | 
						rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1"
 | 
				
			||||||
	cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
 | 
						cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
 | 
				
			||||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
						cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gopkg.in/gcfg.v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -74,7 +77,6 @@ const (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestInitFederation(t *testing.T) {
 | 
					func TestInitFederation(t *testing.T) {
 | 
				
			||||||
	cmdErrMsg := ""
 | 
						cmdErrMsg := ""
 | 
				
			||||||
	dnsProvider := "google-clouddns"
 | 
					 | 
				
			||||||
	cmdutil.BehaviorOnFatal(func(str string, code int) {
 | 
						cmdutil.BehaviorOnFatal(func(str string, code int) {
 | 
				
			||||||
		cmdErrMsg = str
 | 
							cmdErrMsg = str
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -97,6 +99,7 @@ func TestInitFederation(t *testing.T) {
 | 
				
			|||||||
		etcdPVCapacity               string
 | 
							etcdPVCapacity               string
 | 
				
			||||||
		etcdPersistence              string
 | 
							etcdPersistence              string
 | 
				
			||||||
		expectedErr                  string
 | 
							expectedErr                  string
 | 
				
			||||||
 | 
							dnsProvider                  string
 | 
				
			||||||
		dnsProviderConfig            string
 | 
							dnsProviderConfig            string
 | 
				
			||||||
		dryRun                       string
 | 
							dryRun                       string
 | 
				
			||||||
		apiserverArgOverrides        string
 | 
							apiserverArgOverrides        string
 | 
				
			||||||
@@ -116,6 +119,7 @@ func TestInitFederation(t *testing.T) {
 | 
				
			|||||||
			etcdPVCapacity:        "5Gi",
 | 
								etcdPVCapacity:        "5Gi",
 | 
				
			||||||
			etcdPersistence:       "true",
 | 
								etcdPersistence:       "true",
 | 
				
			||||||
			expectedErr:           "",
 | 
								expectedErr:           "",
 | 
				
			||||||
 | 
								dnsProvider:           util.FedDNSProviderCoreDNS,
 | 
				
			||||||
			dnsProviderConfig:     "dns-provider.conf",
 | 
								dnsProviderConfig:     "dns-provider.conf",
 | 
				
			||||||
			dryRun:                "",
 | 
								dryRun:                "",
 | 
				
			||||||
			apiserverArgOverrides: "--client-ca-file=override,--log-dir=override",
 | 
								apiserverArgOverrides: "--client-ca-file=override,--log-dir=override",
 | 
				
			||||||
@@ -210,6 +214,9 @@ func TestInitFederation(t *testing.T) {
 | 
				
			|||||||
		tmpDirPath := ""
 | 
							tmpDirPath := ""
 | 
				
			||||||
		buf := bytes.NewBuffer([]byte{})
 | 
							buf := bytes.NewBuffer([]byte{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if tc.dnsProvider == "" {
 | 
				
			||||||
 | 
								tc.dnsProvider = "google-clouddns"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if tc.dnsProviderConfig != "" {
 | 
							if tc.dnsProviderConfig != "" {
 | 
				
			||||||
			tmpfile, err := ioutil.TempFile("", tc.dnsProviderConfig)
 | 
								tmpfile, err := ioutil.TempFile("", tc.dnsProviderConfig)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
@@ -227,7 +234,7 @@ func TestInitFederation(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		defer os.Remove(tmpDirPath)
 | 
							defer os.Remove(tmpDirPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hostFactory, err := fakeInitHostFactory(tc.apiserverServiceType, tc.federation, util.DefaultFederationSystemNamespace, tc.advertiseAddress, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider, tc.dnsProviderConfig, tc.etcdPersistence, tc.etcdPVCapacity, tc.apiserverArgOverrides, tc.cmArgOverrides, tmpDirPath, tc.apiserverEnableHTTPBasicAuth, tc.apiserverEnableTokenAuth, tc.isRBACAPIAvailable)
 | 
							hostFactory, err := fakeInitHostFactory(tc.apiserverServiceType, tc.federation, util.DefaultFederationSystemNamespace, tc.advertiseAddress, tc.lbIP, tc.dnsZoneName, tc.image, tc.dnsProvider, tc.dnsProviderConfig, tc.etcdPersistence, tc.etcdPVCapacity, tc.apiserverArgOverrides, tc.cmArgOverrides, tmpDirPath, tc.apiserverEnableHTTPBasicAuth, tc.apiserverEnableTokenAuth, tc.isRBACAPIAvailable)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
								t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -243,7 +250,7 @@ func TestInitFederation(t *testing.T) {
 | 
				
			|||||||
		cmd.Flags().Set("host-cluster-context", "substrate")
 | 
							cmd.Flags().Set("host-cluster-context", "substrate")
 | 
				
			||||||
		cmd.Flags().Set("dns-zone-name", tc.dnsZoneName)
 | 
							cmd.Flags().Set("dns-zone-name", tc.dnsZoneName)
 | 
				
			||||||
		cmd.Flags().Set("image", tc.image)
 | 
							cmd.Flags().Set("image", tc.image)
 | 
				
			||||||
		cmd.Flags().Set("dns-provider", dnsProvider)
 | 
							cmd.Flags().Set("dns-provider", tc.dnsProvider)
 | 
				
			||||||
		cmd.Flags().Set("apiserver-arg-overrides", tc.apiserverArgOverrides)
 | 
							cmd.Flags().Set("apiserver-arg-overrides", tc.apiserverArgOverrides)
 | 
				
			||||||
		cmd.Flags().Set("controllermanager-arg-overrides", tc.cmArgOverrides)
 | 
							cmd.Flags().Set("controllermanager-arg-overrides", tc.cmArgOverrides)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1043,6 +1050,12 @@ func fakeInitHostFactory(apiserverServiceType v1.ServiceType, federationName, na
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	if dnsProviderConfig != "" {
 | 
						if dnsProviderConfig != "" {
 | 
				
			||||||
		cm = addDNSProviderConfigTest(cm, cmDNSProviderSecret.Name)
 | 
							cm = addDNSProviderConfigTest(cm, cmDNSProviderSecret.Name)
 | 
				
			||||||
 | 
							if dnsProvider == util.FedDNSProviderCoreDNS {
 | 
				
			||||||
 | 
								cm, err = addCoreDNSServerAnnotationTest(cm, dnsZoneName, dnsProviderConfig)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	podList := v1.PodList{}
 | 
						podList := v1.PodList{}
 | 
				
			||||||
@@ -1540,3 +1553,16 @@ func addDNSProviderConfigTest(dep *v1beta1.Deployment, secretName string) *v1bet
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return dep
 | 
						return dep
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Reuse the function addCoreDNSServerAnnotation once that function is converted to use versioned objects.
 | 
				
			||||||
 | 
					func addCoreDNSServerAnnotationTest(deployment *v1beta1.Deployment, dnsZoneName, dnsProviderConfig string) (*v1beta1.Deployment, error) {
 | 
				
			||||||
 | 
						var cfg coredns.Config
 | 
				
			||||||
 | 
						if err := gcfg.ReadFileInto(&cfg, dnsProviderConfig); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedDNSZoneName] = dnsZoneName
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedNameServer] = cfg.Global.CoreDNSEndpoints
 | 
				
			||||||
 | 
						deployment.Annotations[util.FedDNSProvider] = util.FedDNSProviderCoreDNS
 | 
				
			||||||
 | 
						return deployment, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -278,6 +278,7 @@ func createConfigMap(hostClientSet internalclientset.Interface, config util.Admi
 | 
				
			|||||||
				util.FedDomainMapKey: domainMap,
 | 
									util.FedDomainMapKey: domainMap,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							newConfigMap = populateStubDomainsIfRequired(newConfigMap, cmDep.Annotations)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if dryRun {
 | 
							if dryRun {
 | 
				
			||||||
			return newConfigMap, nil
 | 
								return newConfigMap, nil
 | 
				
			||||||
@@ -397,3 +398,15 @@ func getFederationName(hostClientSet internalclientset.Interface, fedNamespace s
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return name, nil
 | 
						return name, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func populateStubDomainsIfRequired(configMap *api.ConfigMap, annotations map[string]string) *api.ConfigMap {
 | 
				
			||||||
 | 
						dnsProvider := annotations[util.FedDNSProvider]
 | 
				
			||||||
 | 
						dnsZoneName := annotations[util.FedDNSZoneName]
 | 
				
			||||||
 | 
						nameServer := annotations[util.FedNameServer]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if dnsProvider != util.FedDNSProviderCoreDNS || dnsZoneName == "" || nameServer == "" {
 | 
				
			||||||
 | 
							return configMap
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						configMap.Data[util.KubeDnsStubDomains] = fmt.Sprintf(`{"%s":["%s"]}`, dnsZoneName, nameServer)
 | 
				
			||||||
 | 
						return configMap
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,10 +42,15 @@ import (
 | 
				
			|||||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
						cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// testFederationName is a name to use for the federation in tests. Since the federation
 | 
					const (
 | 
				
			||||||
// name is recovered from the federation itself, this constant is an appropriate
 | 
						// testFederationName is a name to use for the federation in tests. Since the federation
 | 
				
			||||||
// functional replica.
 | 
						// name is recovered from the federation itself, this constant is an appropriate
 | 
				
			||||||
const testFederationName = "test-federation"
 | 
						// functional replica.
 | 
				
			||||||
 | 
						testFederationName = "test-federation"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						zoneName      = "test-dns-zone"
 | 
				
			||||||
 | 
						coreDNSServer = "11.22.33.44:53"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestJoinFederation(t *testing.T) {
 | 
					func TestJoinFederation(t *testing.T) {
 | 
				
			||||||
	cmdErrMsg := ""
 | 
						cmdErrMsg := ""
 | 
				
			||||||
@@ -69,6 +74,7 @@ func TestJoinFederation(t *testing.T) {
 | 
				
			|||||||
		kubeconfigExplicit string
 | 
							kubeconfigExplicit string
 | 
				
			||||||
		expectedServer     string
 | 
							expectedServer     string
 | 
				
			||||||
		expectedErr        string
 | 
							expectedErr        string
 | 
				
			||||||
 | 
							dnsProvider        string
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			cluster:            "syndicate",
 | 
								cluster:            "syndicate",
 | 
				
			||||||
@@ -79,6 +85,7 @@ func TestJoinFederation(t *testing.T) {
 | 
				
			|||||||
			kubeconfigExplicit: "",
 | 
								kubeconfigExplicit: "",
 | 
				
			||||||
			expectedServer:     "https://10.20.30.40",
 | 
								expectedServer:     "https://10.20.30.40",
 | 
				
			||||||
			expectedErr:        "",
 | 
								expectedErr:        "",
 | 
				
			||||||
 | 
								dnsProvider:        util.FedDNSProviderCoreDNS,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			cluster:            "ally",
 | 
								cluster:            "ally",
 | 
				
			||||||
@@ -138,12 +145,12 @@ func TestJoinFederation(t *testing.T) {
 | 
				
			|||||||
		f := testJoinFederationFactory(tc.cluster, tc.secret, tc.expectedServer)
 | 
							f := testJoinFederationFactory(tc.cluster, tc.secret, tc.expectedServer)
 | 
				
			||||||
		buf := bytes.NewBuffer([]byte{})
 | 
							buf := bytes.NewBuffer([]byte{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hostFactory, err := fakeJoinHostFactory(tc.cluster, tc.clusterCtx, tc.secret, tc.server, tc.token)
 | 
							hostFactory, err := fakeJoinHostFactory(tc.cluster, tc.clusterCtx, tc.secret, tc.server, tc.token, tc.dnsProvider)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
								t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		targetClusterFactory, err := fakeJoinTargetClusterFactory(tc.cluster, tc.clusterCtx)
 | 
							targetClusterFactory, err := fakeJoinTargetClusterFactory(tc.cluster, tc.clusterCtx, tc.dnsProvider)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
								t.Fatalf("[%d] unexpected error: %v", i, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -229,7 +236,7 @@ func testJoinFederationFactory(clusterName, secretName, server string) cmdutil.F
 | 
				
			|||||||
	return f
 | 
						return f
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func fakeJoinHostFactory(clusterName, clusterCtx, secretName, server, token string) (cmdutil.Factory, error) {
 | 
					func fakeJoinHostFactory(clusterName, clusterCtx, secretName, server, token, dnsProvider string) (cmdutil.Factory, error) {
 | 
				
			||||||
	if clusterCtx == "" {
 | 
						if clusterCtx == "" {
 | 
				
			||||||
		clusterCtx = clusterName
 | 
							clusterCtx = clusterName
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -281,13 +288,7 @@ func fakeJoinHostFactory(clusterName, clusterCtx, secretName, server, token stri
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmName := "controller-manager"
 | 
						cmName := "controller-manager"
 | 
				
			||||||
	deploymentList := v1beta1.DeploymentList{
 | 
						deployment := v1beta1.Deployment{
 | 
				
			||||||
		TypeMeta: metav1.TypeMeta{
 | 
					 | 
				
			||||||
			Kind:       "DeploymentList",
 | 
					 | 
				
			||||||
			APIVersion: testapi.Extensions.GroupVersion().String(),
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Items: []v1beta1.Deployment{
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
		TypeMeta: metav1.TypeMeta{
 | 
							TypeMeta: metav1.TypeMeta{
 | 
				
			||||||
			Kind:       "Deployment",
 | 
								Kind:       "Deployment",
 | 
				
			||||||
			APIVersion: testapi.Extensions.GroupVersion().String(),
 | 
								APIVersion: testapi.Extensions.GroupVersion().String(),
 | 
				
			||||||
@@ -296,13 +297,17 @@ func fakeJoinHostFactory(clusterName, clusterCtx, secretName, server, token stri
 | 
				
			|||||||
			Name:      cmName,
 | 
								Name:      cmName,
 | 
				
			||||||
			Namespace: util.DefaultFederationSystemNamespace,
 | 
								Namespace: util.DefaultFederationSystemNamespace,
 | 
				
			||||||
			Annotations: map[string]string{
 | 
								Annotations: map[string]string{
 | 
				
			||||||
						util.FedDomainMapKey:                fmt.Sprintf("%s=%s", clusterCtx, "test-dns-zone"),
 | 
									util.FedDomainMapKey:                fmt.Sprintf("%s=%s", clusterCtx, zoneName),
 | 
				
			||||||
				federation.FederationNameAnnotation: testFederationName,
 | 
									federation.FederationNameAnnotation: testFederationName,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if dnsProvider == util.FedDNSProviderCoreDNS {
 | 
				
			||||||
 | 
							deployment.Annotations[util.FedDNSZoneName] = zoneName
 | 
				
			||||||
 | 
							deployment.Annotations[util.FedNameServer] = coreDNSServer
 | 
				
			||||||
 | 
							deployment.Annotations[util.FedDNSProvider] = util.FedDNSProviderCoreDNS
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						deploymentList := v1beta1.DeploymentList{Items: []v1beta1.Deployment{deployment}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	f, tf, codec, _ := cmdtesting.NewAPIFactory()
 | 
						f, tf, codec, _ := cmdtesting.NewAPIFactory()
 | 
				
			||||||
	extensionCodec := testapi.Extensions.Codec()
 | 
						extensionCodec := testapi.Extensions.Codec()
 | 
				
			||||||
@@ -346,12 +351,12 @@ func fakeJoinHostFactory(clusterName, clusterCtx, secretName, server, token stri
 | 
				
			|||||||
	return f, nil
 | 
						return f, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func fakeJoinTargetClusterFactory(clusterName, clusterCtx string) (cmdutil.Factory, error) {
 | 
					func fakeJoinTargetClusterFactory(clusterName, clusterCtx, dnsProvider string) (cmdutil.Factory, error) {
 | 
				
			||||||
	if clusterCtx == "" {
 | 
						if clusterCtx == "" {
 | 
				
			||||||
		clusterCtx = clusterName
 | 
							clusterCtx = clusterName
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	configmapObject := v1.ConfigMap{
 | 
						configmapObject := &v1.ConfigMap{
 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Name:      util.KubeDnsConfigmapName,
 | 
								Name:      util.KubeDnsConfigmapName,
 | 
				
			||||||
			Namespace: metav1.NamespaceSystem,
 | 
								Namespace: metav1.NamespaceSystem,
 | 
				
			||||||
@@ -361,9 +366,17 @@ func fakeJoinTargetClusterFactory(clusterName, clusterCtx string) (cmdutil.Facto
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		Data: map[string]string{
 | 
							Data: map[string]string{
 | 
				
			||||||
			util.FedDomainMapKey: fmt.Sprintf("%s=%s", clusterCtx, "test-dns-zone"),
 | 
								util.FedDomainMapKey: fmt.Sprintf("%s=%s", clusterCtx, zoneName),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if dnsProvider == util.FedDNSProviderCoreDNS {
 | 
				
			||||||
 | 
							annotations := map[string]string{
 | 
				
			||||||
 | 
								util.FedDNSProvider: util.FedDNSProviderCoreDNS,
 | 
				
			||||||
 | 
								util.FedDNSZoneName: zoneName,
 | 
				
			||||||
 | 
								util.FedNameServer:  coreDNSServer,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							configmapObject = populateStubDomainsIfRequiredTest(configmapObject, annotations)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	f, tf, codec, _ := cmdtesting.NewAPIFactory()
 | 
						f, tf, codec, _ := cmdtesting.NewAPIFactory()
 | 
				
			||||||
	ns := dynamic.ContentConfig().NegotiatedSerializer
 | 
						ns := dynamic.ContentConfig().NegotiatedSerializer
 | 
				
			||||||
@@ -383,10 +396,10 @@ func fakeJoinTargetClusterFactory(clusterName, clusterCtx string) (cmdutil.Facto
 | 
				
			|||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return nil, err
 | 
										return nil, err
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if !apiequality.Semantic.DeepEqual(got, configmapObject) {
 | 
									if !apiequality.Semantic.DeepEqual(&got, configmapObject) {
 | 
				
			||||||
					return nil, fmt.Errorf("Unexpected configmap object\n\tDiff: %s", diff.ObjectGoPrintDiff(got, configmapObject))
 | 
										return nil, fmt.Errorf("Unexpected configmap object\n\tDiff: %s", diff.ObjectGoPrintDiff(&got, configmapObject))
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(codec, &configmapObject)}, nil
 | 
									return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(codec, configmapObject)}, nil
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				return nil, fmt.Errorf("unexpected request: %#v\n%#v", req.URL, req)
 | 
									return nil, fmt.Errorf("unexpected request: %#v\n%#v", req.URL, req)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -413,3 +426,16 @@ func fakeCluster(clusterName, secretName, server string) federationapi.Cluster {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Reuse the function populateStubDomainsIfRequired once that function is converted to use versioned objects.
 | 
				
			||||||
 | 
					func populateStubDomainsIfRequiredTest(configMap *v1.ConfigMap, annotations map[string]string) *v1.ConfigMap {
 | 
				
			||||||
 | 
						dnsProvider := annotations[util.FedDNSProvider]
 | 
				
			||||||
 | 
						dnsZoneName := annotations[util.FedDNSZoneName]
 | 
				
			||||||
 | 
						nameServer := annotations[util.FedNameServer]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if dnsProvider != util.FedDNSProviderCoreDNS || dnsZoneName == "" || nameServer == "" {
 | 
				
			||||||
 | 
							return configMap
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						configMap.Data[util.KubeDnsStubDomains] = fmt.Sprintf(`{"%s":["%s"]}`, dnsZoneName, nameServer)
 | 
				
			||||||
 | 
						return configMap
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,10 +111,10 @@ func (u *unjoinFederation) Run(f cmdutil.Factory, cmdOut, cmdErr io.Writer, conf
 | 
				
			|||||||
			// We anyways continue to try and delete the config map but with above warning
 | 
								// We anyways continue to try and delete the config map but with above warning
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// We need to ensure deleting the config map created in the deregistered cluster
 | 
							// We need to ensure updating the config map created in the deregistered cluster
 | 
				
			||||||
		// This configmap was created when the cluster joined this federation to aid
 | 
							// This configmap was created/updated when the cluster joined this federation to aid
 | 
				
			||||||
		// the kube-dns of that cluster to aid service discovery.
 | 
							// the kube-dns of that cluster to aid service discovery.
 | 
				
			||||||
		err = deleteConfigMapFromCluster(hostClientset, secret, cluster, u.commonOptions.FederationSystemNamespace)
 | 
							err = updateConfigMapFromCluster(hostClientset, secret, cluster, u.commonOptions.FederationSystemNamespace)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			fmt.Fprintf(cmdErr, "WARNING: Encountered error in deleting kube-dns configmap, %v", err)
 | 
								fmt.Fprintf(cmdErr, "WARNING: Encountered error in deleting kube-dns configmap, %v", err)
 | 
				
			||||||
			// We anyways continue to print success message but with above warning
 | 
								// We anyways continue to print success message but with above warning
 | 
				
			||||||
@@ -162,7 +162,7 @@ func popCluster(f cmdutil.Factory, name string) (*federationapi.Cluster, error)
 | 
				
			|||||||
	return cluster, rh.Delete("", name)
 | 
						return cluster, rh.Delete("", name)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func deleteConfigMapFromCluster(hostClientset internalclientset.Interface, secret *api.Secret, cluster *federationapi.Cluster, fedSystemNamespace string) error {
 | 
					func updateConfigMapFromCluster(hostClientset internalclientset.Interface, secret *api.Secret, cluster *federationapi.Cluster, fedSystemNamespace string) error {
 | 
				
			||||||
	clientset, err := getClientsetFromCluster(secret, cluster)
 | 
						clientset, err := getClientsetFromCluster(secret, cluster)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -182,12 +182,20 @@ func deleteConfigMapFromCluster(hostClientset internalclientset.Interface, secre
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if _, ok := configMap.Data[util.FedDomainMapKey]; !ok {
 | 
						needUpdate := false
 | 
				
			||||||
		return nil
 | 
						if _, ok := configMap.Data[util.FedDomainMapKey]; ok {
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
		configMap.Data[util.FedDomainMapKey] = removeConfigMapString(configMap.Data[util.FedDomainMapKey], domainMap)
 | 
							configMap.Data[util.FedDomainMapKey] = removeConfigMapString(configMap.Data[util.FedDomainMapKey], domainMap)
 | 
				
			||||||
 | 
							needUpdate = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if _, ok := configMap.Data[util.KubeDnsStubDomains]; ok {
 | 
				
			||||||
 | 
							delete(configMap.Data, util.KubeDnsStubDomains)
 | 
				
			||||||
 | 
							needUpdate = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if needUpdate {
 | 
				
			||||||
		_, err = clientset.Core().ConfigMaps(metav1.NamespaceSystem).Update(configMap)
 | 
							_, err = clientset.Core().ConfigMaps(metav1.NamespaceSystem).Update(configMap)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,11 @@ const (
 | 
				
			|||||||
	// Used in and to create the kube-dns configmap storing the zone info
 | 
						// Used in and to create the kube-dns configmap storing the zone info
 | 
				
			||||||
	FedDomainMapKey       = "federations"
 | 
						FedDomainMapKey       = "federations"
 | 
				
			||||||
	KubeDnsConfigmapName  = "kube-dns"
 | 
						KubeDnsConfigmapName  = "kube-dns"
 | 
				
			||||||
 | 
						FedDNSZoneName        = "dns-zone-name"
 | 
				
			||||||
 | 
						FedNameServer         = "nameserver"
 | 
				
			||||||
 | 
						FedDNSProvider        = "dns-provider"
 | 
				
			||||||
 | 
						FedDNSProviderCoreDNS = "coredns"
 | 
				
			||||||
 | 
						KubeDnsStubDomains    = "stubDomains"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DefaultFederationSystemNamespace is the namespace in which
 | 
						// DefaultFederationSystemNamespace is the namespace in which
 | 
				
			||||||
	// federation system components are hosted.
 | 
						// federation system components are hosted.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user