Merge pull request #642 from kelseyhightower/cleanup_master_configs

Add master.Config type and cleanup master configuration
pull/6/head
Daniel Smith 2014-07-28 12:53:31 -07:00
commit c92e8d38b6
3 changed files with 50 additions and 19 deletions

View File

@ -83,9 +83,23 @@ func main() {
var m *master.Master var m *master.Master
if len(etcdServerList) > 0 { if len(etcdServerList) > 0 {
m = master.New(etcdServerList, machineList, podInfoGetter, cloud, *minionRegexp, client, *healthCheckMinions, *minionCacheTTL) m = master.New(&master.Config{
Client: client,
Cloud: cloud,
EtcdServers: etcdServerList,
HealthCheckMinions: *healthCheckMinions,
Minions: machineList,
MinionCacheTTL: *minionCacheTTL,
MinionRegexp: *minionRegexp,
PodInfoGetter: podInfoGetter,
})
} else { } else {
m = master.NewMemoryServer(machineList, podInfoGetter, cloud, client) m = master.NewMemoryServer(&master.Config{
Client: client,
Cloud: cloud,
Minions: machineList,
PodInfoGetter: podInfoGetter,
})
} }
glog.Fatal(m.Run(net.JoinHostPort(*address, strconv.Itoa(int(*port))), *apiPrefix)) glog.Fatal(m.Run(net.JoinHostPort(*address, strconv.Itoa(int(*port))), *apiPrefix))

View File

@ -95,7 +95,12 @@ func startComponents(manifestURL string) (apiServerURL string) {
cl.Sync = true cl.Sync = true
// Master // Master
m := master.New(servers, machineList, fakePodInfoGetter{}, nil, "", cl, false, 0) m := master.New(&master.Config{
Client: cl,
EtcdServers: servers,
Minions: machineList,
PodInfoGetter: fakePodInfoGetter{},
})
handler.delegate = m.ConstructHandler("/api/v1beta1") handler.delegate = m.ConstructHandler("/api/v1beta1")
controllerManager := controller.MakeReplicationManager(etcdClient, cl) controllerManager := controller.MakeReplicationManager(etcdClient, cl)

View File

@ -31,6 +31,18 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
) )
// Config is a structure used to configure a Master.
type Config struct {
Client *client.Client
Cloud cloudprovider.Interface
EtcdServers []string
HealthCheckMinions bool
Minions []string
MinionCacheTTL time.Duration
MinionRegexp string
PodInfoGetter client.PodInfoGetter
}
// Master contains state for a Kubernetes cluster master/api server. // Master contains state for a Kubernetes cluster master/api server.
type Master struct { type Master struct {
podRegistry registry.PodRegistry podRegistry registry.PodRegistry
@ -42,50 +54,50 @@ type Master struct {
} }
// NewMemoryServer returns a new instance of Master backed with memory (not etcd). // NewMemoryServer returns a new instance of Master backed with memory (not etcd).
func NewMemoryServer(minions []string, podInfoGetter client.PodInfoGetter, cloud cloudprovider.Interface, client *client.Client) *Master { func NewMemoryServer(c *Config) *Master {
m := &Master{ m := &Master{
podRegistry: registry.MakeMemoryRegistry(), podRegistry: registry.MakeMemoryRegistry(),
controllerRegistry: registry.MakeMemoryRegistry(), controllerRegistry: registry.MakeMemoryRegistry(),
serviceRegistry: registry.MakeMemoryRegistry(), serviceRegistry: registry.MakeMemoryRegistry(),
minionRegistry: registry.MakeMinionRegistry(minions), minionRegistry: registry.MakeMinionRegistry(c.Minions),
client: client, client: c.Client,
} }
m.init(cloud, podInfoGetter) m.init(c.Cloud, c.PodInfoGetter)
return m return m
} }
// New returns a new instance of Master connected to the given etcdServer. // New returns a new instance of Master connected to the given etcdServer.
func New(etcdServers, minions []string, podInfoGetter client.PodInfoGetter, cloud cloudprovider.Interface, minionRegexp string, client *client.Client, healthCheckMinions bool, cacheMinionsTTL time.Duration) *Master { func New(c *Config) *Master {
etcdClient := etcd.NewClient(etcdServers) etcdClient := etcd.NewClient(c.EtcdServers)
minionRegistry := minionRegistryMaker(minions, cloud, minionRegexp, healthCheckMinions, cacheMinionsTTL) minionRegistry := minionRegistryMaker(c)
m := &Master{ m := &Master{
podRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry), podRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry),
controllerRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry), controllerRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry),
serviceRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry), serviceRegistry: registry.MakeEtcdRegistry(etcdClient, minionRegistry),
minionRegistry: minionRegistry, minionRegistry: minionRegistry,
client: client, client: c.Client,
} }
m.init(cloud, podInfoGetter) m.init(c.Cloud, c.PodInfoGetter)
return m return m
} }
func minionRegistryMaker(minions []string, cloud cloudprovider.Interface, minionRegexp string, healthCheck bool, cacheTTL time.Duration) registry.MinionRegistry { func minionRegistryMaker(c *Config) registry.MinionRegistry {
var minionRegistry registry.MinionRegistry var minionRegistry registry.MinionRegistry
if cloud != nil && len(minionRegexp) > 0 { if c.Cloud != nil && len(c.MinionRegexp) > 0 {
var err error var err error
minionRegistry, err = registry.MakeCloudMinionRegistry(cloud, minionRegexp) minionRegistry, err = registry.MakeCloudMinionRegistry(c.Cloud, c.MinionRegexp)
if err != nil { if err != nil {
glog.Errorf("Failed to initalize cloud minion registry reverting to static registry (%#v)", err) glog.Errorf("Failed to initalize cloud minion registry reverting to static registry (%#v)", err)
} }
} }
if minionRegistry == nil { if minionRegistry == nil {
minionRegistry = registry.MakeMinionRegistry(minions) minionRegistry = registry.MakeMinionRegistry(c.Minions)
} }
if healthCheck { if c.HealthCheckMinions {
minionRegistry = registry.NewHealthyMinionRegistry(minionRegistry, &http.Client{}) minionRegistry = registry.NewHealthyMinionRegistry(minionRegistry, &http.Client{})
} }
if cacheTTL > 0 { if c.MinionCacheTTL > 0 {
cachingMinionRegistry, err := registry.NewCachingMinionRegistry(minionRegistry, cacheTTL) cachingMinionRegistry, err := registry.NewCachingMinionRegistry(minionRegistry, c.MinionCacheTTL)
if err != nil { if err != nil {
glog.Errorf("Failed to initialize caching layer, ignoring cache.") glog.Errorf("Failed to initialize caching layer, ignoring cache.")
} else { } else {