From eab5000c5734bdd4693e6192d2a67c83ec2aef82 Mon Sep 17 00:00:00 2001 From: Peter van Zetten Date: Mon, 30 Jul 2018 11:30:22 +0100 Subject: [PATCH] Allow arbitrary extra kubeadm config.yaml snippets Provide an extension point `kubeadm_extra_config` to allow configuration of all kubeadm config properties not otherwise explicitly exposed. --- README.md | 6 ++++++ manifests/config.pp | 5 ++++- manifests/init.pp | 5 +++++ manifests/params.pp | 1 + spec/classes/config_spec.rb | 2 ++ spec/classes/service_spec.rb | 10 ++++++---- templates/config.yaml.erb | 1 + 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a9f1e3e6..f0435b7e 100644 --- a/README.md +++ b/README.md @@ -430,6 +430,12 @@ The name of the cloud provider configured in `/etc/kubernetes/cloud-config`. Defaults to `undef`. +#### `kubeadm_extra_config` + +A hash containing extra configuration data to be serialised with `to_yaml` and appended to the config.yaml file used by kubeadm. + +Defaults to `{}`. + #### `kubernetes_apt_location` The APT repo URL for the Kubernetes packages. diff --git a/manifests/config.pp b/manifests/config.pp index 7906a4e4..25bcaeeb 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -29,7 +29,7 @@ String $service_cidr = $kubernetes::service_cidr, String $node_label = $kubernetes::node_label, Optional[String] $cloud_provider = $kubernetes::cloud_provider, - + Hash $kubeadm_extra_config = $kubernetes::kubeadm_extra_config, ) { $kube_dirs = ['/etc/kubernetes','/etc/kubernetes/manifests','/etc/kubernetes/pki','/etc/kubernetes/pki/etcd'] @@ -63,6 +63,9 @@ content => template('kubernetes/etcd/etcd.service.erb'), } + # to_yaml emits a complete YAML document, so we must remove the leading '---' + $kubeadm_extra_config_yaml = regsubst(to_yaml($kubeadm_extra_config), '^---\n', '') + file { '/etc/kubernetes/config.yaml': ensure => present, content => template('kubernetes/config.yaml.erb'), diff --git a/manifests/init.pp b/manifests/init.pp index e3631b74..0fe5ba00 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -194,6 +194,10 @@ # Note: this file is not managed within this module and must be present before bootstrapping the kubernetes controller # Defaults to undef # +# [*kubeadm_extra_config*] +# A hash containing extra configuration data to be serialised with `to_yaml` and appended to the config.yaml file used by kubeadm. +# Defaults to {} +# # [*kubernetes_apt_location*] # The APT repo URL for the Kubernetes packages. # Defaults to https://apt.kubernetes.io @@ -305,6 +309,7 @@ String $node_label = $kubernetes::params::node_label, Optional[String] $controller_address = $kubernetes::params::controller_address, Optional[String] $cloud_provider = $kubernetes::params::cloud_provider, + Hash $kubeadm_extra_config = $kubernetes::params::kubeadm_extra_config, Optional[String] $runc_source = $kubernetes::params::runc_source, Optional[String] $containerd_archive = $kubernetes::params::containerd_archive, Optional[String] $containerd_source = $kubernetes::params::containerd_source, diff --git a/manifests/params.pp b/manifests/params.pp index 4f906028..f5153284 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -58,6 +58,7 @@ $service_cidr = '10.96.0.0/12' $controller_address = undef $cloud_provider = undef +$kubeadm_extra_config = {} $kubernetes_apt_location = 'http://apt.kubernetes.io' $kubernetes_apt_release = "kubernetes-${::lsbdistcodename}" $kubernetes_apt_repos = 'main' diff --git a/spec/classes/config_spec.rb b/spec/classes/config_spec.rb index 884c03a5..edb2005c 100644 --- a/spec/classes/config_spec.rb +++ b/spec/classes/config_spec.rb @@ -31,6 +31,7 @@ 'service_cidr' => '10.96.0.0/12', 'node_label' => 'foo', 'cloud_provider' => 'undef', + 'kubeadm_extra_config' => {'foo' => ['bar', 'baz']}, } end @@ -53,5 +54,6 @@ it { should contain_file('/etc/systemd/system/etcd.service') } it { should contain_file('/etc/kubernetes/config.yaml') } + it { should contain_file('/etc/kubernetes/config.yaml').with_content(/foo:\n- bar\n- baz/) } end end diff --git a/spec/classes/service_spec.rb b/spec/classes/service_spec.rb index 4263cb19..691bbc26 100644 --- a/spec/classes/service_spec.rb +++ b/spec/classes/service_spec.rb @@ -42,8 +42,9 @@ apiserver_extra_arguments => ["foo"], service_cidr => "10.96.0.0/12", node_label => "foo", - cloud_provider => ":undef",} - ' } + cloud_provider => ":undef", + kubeadm_extra_config => {"foo" => ["bar", "baz"]}, + }' } let(:params) do { 'container_runtime' => 'cri_containerd', @@ -89,8 +90,9 @@ apiserver_extra_arguments => ["foo"], service_cidr => "10.96.0.0/12", node_label => "foo", - cloud_provider => ":undef",} - ' } + cloud_provider => ":undef", + kubeadm_extra_config => {"foo" => ["bar", "baz"]}, + }' } let(:params) do { 'container_runtime' => 'docker', diff --git a/templates/config.yaml.erb b/templates/config.yaml.erb index 35869ee8..ca90aa22 100644 --- a/templates/config.yaml.erb +++ b/templates/config.yaml.erb @@ -33,3 +33,4 @@ apiServerCertSANs: <%- if @cloud_provider -%> cloudProvider: <%= @cloud_provider %> <%- end -%> +<%= @kubeadm_extra_config_yaml %> \ No newline at end of file