diff --git a/cmd/apiserver/apiserver.go b/cmd/apiserver/apiserver.go index ed9d418a2d..b38e761da5 100644 --- a/cmd/apiserver/apiserver.go +++ b/cmd/apiserver/apiserver.go @@ -34,6 +34,7 @@ var ( address = flag.String("address", "127.0.0.1", "The address on the local server to listen to. Default 127.0.0.1") apiPrefix = flag.String("api_prefix", "/api/v1beta1", "The prefix for API requests on the server. Default '/api/v1beta1'") cloudProvider = flag.String("cloud_provider", "", "The provider for cloud services. Empty string for no provider.") + minionRegexp = flag.String("minion_regexp", "", "If non empty, and -cloud_provider is specified, a regular expression for matching minion VMs") etcdServerList, machineList util.StringList ) @@ -69,7 +70,7 @@ func main() { var m *master.Master if len(etcdServerList) > 0 { - m = master.New(etcdServerList, machineList, cloud) + m = master.New(etcdServerList, machineList, cloud, *minionRegexp) } else { m = master.NewMemoryServer(machineList, cloud) } diff --git a/cmd/integration/integration.go b/cmd/integration/integration.go index 19dc55170a..4c25e466e2 100644 --- a/cmd/integration/integration.go +++ b/cmd/integration/integration.go @@ -54,7 +54,7 @@ func main() { machineList := []string{"localhost", "machine"} // Master - m := master.New(servers, machineList, nil) + m := master.New(servers, machineList, nil, "") apiserver := httptest.NewServer(m.ConstructHandler("/api/v1beta1")) controllerManager := controller.MakeReplicationManager(etcd.NewClient(servers), client.New(apiserver.URL, nil)) diff --git a/pkg/master/master.go b/pkg/master/master.go index 1985fb33e0..c57d790b64 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -27,6 +27,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/registry" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/coreos/go-etcd/etcd" + "github.com/golang/glog" ) // Master contains state for a Kubernetes cluster master/api server. @@ -53,9 +54,19 @@ func NewMemoryServer(minions []string, cloud cloudprovider.Interface) *Master { } // Returns a new apiserver. -func New(etcdServers, minions []string, cloud cloudprovider.Interface) *Master { +func New(etcdServers, minions []string, cloud cloudprovider.Interface, minionRegexp string) *Master { etcdClient := etcd.NewClient(etcdServers) - minionRegistry := registry.MakeMinionRegistry(minions) + var minionRegistry registry.MinionRegistry + if cloud != nil && len(minionRegexp) > 0 { + var err error + minionRegistry, err = registry.MakeCloudMinionRegistry(cloud, minionRegexp) + if err != nil { + glog.Errorf("Failed to initalize cloud minion registry reverting to static registry (%#v)", err) + minionRegistry = registry.MakeMinionRegistry(minions) + } + } else { + minionRegistry = registry.MakeMinionRegistry(minions) + } m := &Master{ podRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry), controllerRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry),