Merge pull request #36492 from irfanurrehman/federation-kubefed-todo-3

Automatic merge from submit-queue

[Federation][Bugfix] Make the dns provider configurable in kubefed init

Fixes: Issue #36690 

The design doc PR relating the whole feature for kubefed is at #34484.


cc @kubernetes/sig-cluster-federation @madhusudancs @nikhiljindal
This commit is contained in:
Kubernetes Submit Queue 2016-11-13 17:51:28 -08:00 committed by GitHub
commit 30c830b217
2 changed files with 30 additions and 6 deletions

View File

@ -118,6 +118,7 @@ func NewCmdInit(cmdOut io.Writer, config util.AdminConfig) *cobra.Command {
util.AddSubcommandFlags(cmd) util.AddSubcommandFlags(cmd)
cmd.Flags().String("dns-zone-name", "", "DNS suffix for this federation. Federated Service DNS names are published with this suffix.") cmd.Flags().String("dns-zone-name", "", "DNS suffix for this federation. Federated Service DNS names are published with this suffix.")
cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.") cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.")
cmd.Flags().String("dns-provider", "google-clouddns", "Dns provider to be used for this deployment.")
return cmd return cmd
} }
@ -138,6 +139,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
} }
dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name") dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name")
image := cmdutil.GetFlagString(cmd, "image") image := cmdutil.GetFlagString(cmd, "image")
dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider")
hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig) hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig)
hostClientset, err := hostFactory.ClientSet() hostClientset, err := hostFactory.ClientSet()
@ -210,7 +212,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
} }
// 7. Create federation controller manager // 7. Create federation controller manager
_, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, image, cmKubeconfigName, dnsZoneName) _, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, image, cmKubeconfigName, dnsZoneName, dnsProvider)
if err != nil { if err != nil {
return err return err
} }
@ -479,7 +481,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, image, creden
return clientset.Extensions().Deployments(namespace).Create(dep) return clientset.Extensions().Deployments(namespace).Create(dep)
} }
func createControllerManager(clientset *client.Clientset, namespace, name, cmName, image, kubeconfigName, dnsZoneName string) (*extensions.Deployment, error) { func createControllerManager(clientset *client.Clientset, namespace, name, cmName, image, kubeconfigName, dnsZoneName, dnsProvider string) (*extensions.Deployment, error) {
dep := &extensions.Deployment{ dep := &extensions.Deployment{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Name: cmName, Name: cmName,
@ -503,7 +505,7 @@ func createControllerManager(clientset *client.Clientset, namespace, name, cmNam
"federation-controller-manager", "federation-controller-manager",
"--master=https://federation-apiserver", "--master=https://federation-apiserver",
"--kubeconfig=/etc/federation/controller-manager/kubeconfig", "--kubeconfig=/etc/federation/controller-manager/kubeconfig",
"--dns-provider=gce", fmt.Sprintf("--dns-provider=%s", dnsProvider),
"--dns-provider-config=", "--dns-provider-config=",
fmt.Sprintf("--federation-name=%s", name), fmt.Sprintf("--federation-name=%s", name),
fmt.Sprintf("--zone-name=%s", dnsZoneName), fmt.Sprintf("--zone-name=%s", dnsZoneName),

View File

@ -58,6 +58,7 @@ const (
func TestInitFederation(t *testing.T) { func TestInitFederation(t *testing.T) {
cmdErrMsg := "" cmdErrMsg := ""
dnsProvider := ""
cmdutil.BehaviorOnFatal(func(str string, code int) { cmdutil.BehaviorOnFatal(func(str string, code int) {
cmdErrMsg = str cmdErrMsg = str
}) })
@ -76,6 +77,7 @@ func TestInitFederation(t *testing.T) {
lbIP string lbIP string
image string image string
expectedErr string expectedErr string
dnsProvider string
}{ }{
{ {
federation: "union", federation: "union",
@ -85,14 +87,31 @@ func TestInitFederation(t *testing.T) {
lbIP: "10.20.30.40", lbIP: "10.20.30.40",
image: "example.test/foo:bar", image: "example.test/foo:bar",
expectedErr: "", expectedErr: "",
dnsProvider: "test-dns-provider",
},
{
federation: "union",
kubeconfigGlobal: fakeKubeFiles[0],
kubeconfigExplicit: "",
dnsZoneName: "example.test.",
lbIP: "10.20.30.40",
image: "example.test/foo:bar",
expectedErr: "",
dnsProvider: "", //test for default value of dns provider
}, },
} }
for i, tc := range testCases { for i, tc := range testCases {
cmdErrMsg = "" cmdErrMsg = ""
dnsProvider = ""
buf := bytes.NewBuffer([]byte{}) buf := bytes.NewBuffer([]byte{})
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image) if "" != tc.dnsProvider {
dnsProvider = tc.dnsProvider
} else {
dnsProvider = "google-clouddns" //default value of dns-provider
}
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider)
if err != nil { if err != nil {
t.Fatalf("[%d] unexpected error: %v", i, err) t.Fatalf("[%d] unexpected error: %v", i, err)
} }
@ -108,6 +127,9 @@ 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)
if "" != tc.dnsProvider {
cmd.Flags().Set("dns-provider", tc.dnsProvider)
}
cmd.Run(cmd, []string{tc.federation}) cmd.Run(cmd, []string{tc.federation})
if tc.expectedErr == "" { if tc.expectedErr == "" {
@ -370,7 +392,7 @@ func TestCertsHTTPS(t *testing.T) {
} }
} }
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image string) (cmdutil.Factory, error) { func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, dnsProvider string) (cmdutil.Factory, error) {
svcName := federationName + "-apiserver" svcName := federationName + "-apiserver"
svcUrlPrefix := "/api/v1/namespaces/federation-system/services" svcUrlPrefix := "/api/v1/namespaces/federation-system/services"
credSecretName := svcName + "-credentials" credSecretName := svcName + "-credentials"
@ -597,7 +619,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image s
"federation-controller-manager", "federation-controller-manager",
"--master=https://federation-apiserver", "--master=https://federation-apiserver",
"--kubeconfig=/etc/federation/controller-manager/kubeconfig", "--kubeconfig=/etc/federation/controller-manager/kubeconfig",
"--dns-provider=gce", fmt.Sprintf("--dns-provider=%s", dnsProvider),
"--dns-provider-config=", "--dns-provider-config=",
fmt.Sprintf("--federation-name=%s", federationName), fmt.Sprintf("--federation-name=%s", federationName),
fmt.Sprintf("--zone-name=%s", dnsZoneName), fmt.Sprintf("--zone-name=%s", dnsZoneName),