[Federation][init-10a] Make the federation API server and controller manager image names configurable.

This enables testing non-release images.
This commit is contained in:
Madhusudan.C.S
2016-11-02 00:59:00 -07:00
parent 1de77559f3
commit 8d8eca5f2a
3 changed files with 20 additions and 11 deletions

View File

@@ -27,6 +27,7 @@ go_library(
"//pkg/util/cert/triple:go_default_library", "//pkg/util/cert/triple:go_default_library",
"//pkg/util/intstr:go_default_library", "//pkg/util/intstr:go_default_library",
"//pkg/util/wait:go_default_library", "//pkg/util/wait:go_default_library",
"//pkg/version:go_default_library",
"//vendor:github.com/spf13/cobra", "//vendor:github.com/spf13/cobra",
], ],
) )

View File

@@ -48,6 +48,7 @@ import (
triple "k8s.io/kubernetes/pkg/util/cert/triple" triple "k8s.io/kubernetes/pkg/util/cert/triple"
"k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/intstr"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -92,7 +93,7 @@ var (
"module": "federation-controller-manager", "module": "federation-controller-manager",
} }
hyperkubeImage = "gcr.io/google_containers/hyperkube-amd64:v1.5.0" hyperkubeImageName = "gcr.io/google_containers/hyperkube-amd64"
) )
// NewCmdInit defines the `init` command that bootstraps a federation // NewCmdInit defines the `init` command that bootstraps a federation
@@ -109,8 +110,11 @@ func NewCmdInit(cmdOut io.Writer, config util.AdminConfig) *cobra.Command {
}, },
} }
defaultImage := fmt.Sprintf("%s:%s", hyperkubeImageName, version.Get())
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.")
return cmd return cmd
} }
@@ -129,6 +133,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
return err return err
} }
dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name") dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name")
image := cmdutil.GetFlagString(cmd, "image")
hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig) hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig)
hostClientset, err := hostFactory.ClientSet() hostClientset, err := hostFactory.ClientSet()
@@ -190,13 +195,13 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
} }
// 6. Create federation API server // 6. Create federation API server
_, err = createAPIServer(hostClientset, initFlags.FederationSystemNamespace, serverName, serverCredName, pvc.Name, advertiseAddress) _, err = createAPIServer(hostClientset, initFlags.FederationSystemNamespace, serverName, image, serverCredName, pvc.Name, advertiseAddress)
if err != nil { if err != nil {
return err return err
} }
// 7. Create federation controller manager // 7. Create federation controller manager
_, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, cmKubeconfigName, dnsZoneName) _, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, image, cmKubeconfigName, dnsZoneName)
if err != nil { if err != nil {
return err return err
} }
@@ -356,7 +361,7 @@ func createPVC(clientset *client.Clientset, namespace, svcName string) (*api.Per
return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc) return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc)
} }
func createAPIServer(clientset *client.Clientset, namespace, name, credentialsName, pvcName, advertiseAddress string) (*extensions.Deployment, error) { func createAPIServer(clientset *client.Clientset, namespace, name, image, credentialsName, pvcName, advertiseAddress string) (*extensions.Deployment, error) {
command := []string{ command := []string{
"/hyperkube", "/hyperkube",
"federation-apiserver", "federation-apiserver",
@@ -394,7 +399,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, credentialsNa
Containers: []api.Container{ Containers: []api.Container{
{ {
Name: "apiserver", Name: "apiserver",
Image: hyperkubeImage, Image: image,
Command: command, Command: command,
Ports: []api.ContainerPort{ Ports: []api.ContainerPort{
{ {
@@ -456,7 +461,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, credentialsNa
return clientset.Extensions().Deployments(namespace).Create(dep) return clientset.Extensions().Deployments(namespace).Create(dep)
} }
func createControllerManager(clientset *client.Clientset, namespace, name, cmName, kubeconfigName, dnsZoneName string) (*extensions.Deployment, error) { func createControllerManager(clientset *client.Clientset, namespace, name, cmName, image, kubeconfigName, dnsZoneName string) (*extensions.Deployment, error) {
dep := &extensions.Deployment{ dep := &extensions.Deployment{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Name: cmName, Name: cmName,
@@ -474,7 +479,7 @@ func createControllerManager(clientset *client.Clientset, namespace, name, cmNam
Containers: []api.Container{ Containers: []api.Container{
{ {
Name: "controller-manager", Name: "controller-manager",
Image: hyperkubeImage, Image: image,
Command: []string{ Command: []string{
"/hyperkube", "/hyperkube",
"federation-controller-manager", "federation-controller-manager",

View File

@@ -73,6 +73,7 @@ func TestInitFederation(t *testing.T) {
kubeconfigExplicit string kubeconfigExplicit string
dnsZoneName string dnsZoneName string
lbIP string lbIP string
image string
expectedErr string expectedErr string
}{ }{
{ {
@@ -81,6 +82,7 @@ func TestInitFederation(t *testing.T) {
kubeconfigExplicit: "", kubeconfigExplicit: "",
dnsZoneName: "example.test.", dnsZoneName: "example.test.",
lbIP: "10.20.30.40", lbIP: "10.20.30.40",
image: "example.test/foo:bar",
expectedErr: "", expectedErr: "",
}, },
} }
@@ -89,7 +91,7 @@ func TestInitFederation(t *testing.T) {
cmdErrMsg = "" cmdErrMsg = ""
buf := bytes.NewBuffer([]byte{}) buf := bytes.NewBuffer([]byte{})
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName) hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image)
if err != nil { if err != nil {
t.Fatalf("[%d] unexpected error: %v", i, err) t.Fatalf("[%d] unexpected error: %v", i, err)
} }
@@ -104,6 +106,7 @@ func TestInitFederation(t *testing.T) {
cmd.Flags().Set("kubeconfig", tc.kubeconfigExplicit) cmd.Flags().Set("kubeconfig", tc.kubeconfigExplicit)
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.Run(cmd, []string{tc.federation}) cmd.Run(cmd, []string{tc.federation})
if tc.expectedErr == "" { if tc.expectedErr == "" {
@@ -364,7 +367,7 @@ func TestCertsHTTPS(t *testing.T) {
} }
} }
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string) (cmdutil.Factory, error) { func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image 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"
@@ -492,7 +495,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string)
Containers: []v1.Container{ Containers: []v1.Container{
{ {
Name: "apiserver", Name: "apiserver",
Image: hyperkubeImage, Image: image,
Command: []string{ Command: []string{
"/hyperkube", "/hyperkube",
"federation-apiserver", "federation-apiserver",
@@ -587,7 +590,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string)
Containers: []v1.Container{ Containers: []v1.Container{
{ {
Name: "controller-manager", Name: "controller-manager",
Image: hyperkubeImage, Image: image,
Command: []string{ Command: []string{
"/hyperkube", "/hyperkube",
"federation-controller-manager", "federation-controller-manager",