diff --git a/upup/models/config/components/kube-apiserver/kube-apiserver.options b/upup/models/config/components/kube-apiserver/kube-apiserver.options index 21ffe6a1d8..231dbf7c2f 100644 --- a/upup/models/config/components/kube-apiserver/kube-apiserver.options +++ b/upup/models/config/components/kube-apiserver/kube-apiserver.options @@ -14,4 +14,5 @@ KubeAPIServer: TokenAuthFile: /srv/kubernetes/known_tokens.csv LogLevel: 2 AllowPrivileged: true - Image: {{ Image "kube-apiserver" }} \ No newline at end of file + Image: {{ Image "kube-apiserver" }} + APIServerCount: {{ APIServerCount }} \ No newline at end of file diff --git a/upup/pkg/fi/cloudup/template_functions.go b/upup/pkg/fi/cloudup/template_functions.go index 293b08c514..da642398e9 100644 --- a/upup/pkg/fi/cloudup/template_functions.go +++ b/upup/pkg/fi/cloudup/template_functions.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/golang/glog" "k8s.io/kops/upup/pkg/api" + "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/util/pkg/vfs" "math/big" "net" @@ -98,6 +99,8 @@ func (tf *TemplateFunctions) AddTo(dest template.FuncMap) { dest["GetInstanceGroup"] = tf.GetInstanceGroup dest["CloudTags"] = tf.CloudTags + + dest["APIServerCount"] = tf.APIServerCount } func (tf *TemplateFunctions) EtcdClusterMemberTags(etcd *api.EtcdClusterSpec, m *api.EtcdMemberSpec) map[string]string { @@ -240,3 +243,19 @@ func (tf *TemplateFunctions) GetInstanceGroup(name string) (*api.InstanceGroup, } return nil, fmt.Errorf("InstanceGroup %q not found", name) } + +// APIServerCount returns the value for the kubeapiserver --apiserver-count flag +func (tf *TemplateFunctions) APIServerCount() int { + count := 0 + for _, ig := range tf.instanceGroups { + if !ig.IsMaster() { + continue + } + size := fi.IntValue(ig.Spec.MaxSize) + if size == 0 { + size = fi.IntValue(ig.Spec.MinSize) + } + count += size + } + return count +}