From 0cab643c8e3fc033d9ff8250edc9711cd59b8dd6 Mon Sep 17 00:00:00 2001 From: olavst-spk Date: Thu, 30 May 2024 14:55:39 +0200 Subject: [PATCH] Unpack cni_plugins, crictl & etcd to folders in /opt and use symlinks Makes the installation of cni_plugins, crictl & etcd similar to the way the main k8s binaries are installed. The archives are unpacked to folders in /opt and symlinked to /usr/local/bin . The target folder is unique per version, making it possible to update these components. Fixes #95. --- manifests/install/cni_plugins.pp | 36 +++++++++++++++++---- manifests/install/crictl.pp | 31 ++++++++++++++++-- manifests/server/etcd/setup.pp | 44 +++++++++++++++++++++----- spec/classes/server/etcd/setup_spec.rb | 21 ++++++++++-- 4 files changed, 111 insertions(+), 21 deletions(-) diff --git a/manifests/install/cni_plugins.pp b/manifests/install/cni_plugins.pp index 50715a9..cd90006 100644 --- a/manifests/install/cni_plugins.pp +++ b/manifests/install/cni_plugins.pp @@ -19,7 +19,13 @@ '/etc/cni': ; '/etc/cni/net.d': ; - '/opt/cni': ; + } + + file { '/opt/cni': + ensure => stdlib::ensure($ensure, 'directory'), + purge => true, + recurse => true, + force => true, } case $method { @@ -27,20 +33,36 @@ $_url = k8s::format_url($download_url_template, { version => $version, }) + $_target = "/opt/cni/${version}"; + $_tarball_target = '/opt/cni/archives'; - file { '/opt/cni/bin': - ensure => directory, + file { $_target: + ensure => stdlib::ensure($ensure, 'directory'), + } + + file { $_tarball_target: + ensure => stdlib::ensure($ensure, 'directory'), + purge => true, + recurse => true, } archive { 'cni-plugins': ensure => $ensure, - path => "/tmp/cni-plugins-linux-${version}.tgz", + path => "${_tarball_target}/cni-plugins-linux-${version}.tgz", source => $_url, extract => true, - extract_path => '/opt/cni/bin', - creates => '/opt/cni/bin/bridge', + extract_path => $_target, + creates => "${_target}/bridge", cleanup => true, - require => File['/opt/cni/bin'], + } + + file { '/opt/cni/bin': + ensure => stdlib::ensure($ensure, 'link'), + mode => '0755', + replace => true, + force => true, + target => $_target, + require => Archive['cni-plugins'], } } 'package':{ diff --git a/manifests/install/crictl.pp b/manifests/install/crictl.pp index 9abd559..7b1b644 100644 --- a/manifests/install/crictl.pp +++ b/manifests/install/crictl.pp @@ -31,20 +31,45 @@ $config_require = Package[$pkg] } else { + file { '/opt/cri-tools': + ensure => stdlib::ensure($ensure, 'directory'), + purge => true, + recurse => true, + force => true, + } + $_url = k8s::format_url($download_url_template, { version => $version, }) + $_target = "/opt/cri-tools/${version}"; + $_tarball_target = '/opt/cri-tools/archives'; + + file { $_target: + ensure => stdlib::ensure($ensure, 'directory'), + } + + file { $_tarball_target: + ensure => stdlib::ensure($ensure, 'directory'), + } archive { 'crictl': ensure => $ensure, - path => "/tmp/crictl-${version}-linux.tar.gz", + path => "${_tarball_target}/crictl-${version}-linux.tar.gz", source => $_url, extract => true, - extract_path => '/usr/local/bin', - creates => '/usr/local/bin/crictl', + extract_path => $_target, + creates => "${_target}/crictl", cleanup => true, } + file { '/usr/local/bin/crictl': + ensure => stdlib::ensure($ensure, 'link'), + mode => '0755', + replace => true, + target => "${_target}/crictl", + require => Archive['crictl'], + } + $config_require = Archive['crictl'] } diff --git a/manifests/server/etcd/setup.pp b/manifests/server/etcd/setup.pp index da774e3..f1159e2 100644 --- a/manifests/server/etcd/setup.pp +++ b/manifests/server/etcd/setup.pp @@ -78,24 +78,52 @@ Optional[Integer[0, 65535]] $gid = undef, ) { if $install == 'archive' { + file { '/opt/etcd': + ensure => stdlib::ensure($ensure, 'directory'), + purge => true, + recurse => true, + force => true, + } + $_url = k8s::format_url($archive_template, { version => $version, }) $_file = basename($_url) + $_target = "/opt/etcd/${version}"; + $_tarball_target = '/opt/etcd/archives'; + + file { $_target: + ensure => stdlib::ensure($ensure, 'directory'), + } - archive { "/var/tmp/${_file}": + file { $_tarball_target: + ensure => stdlib::ensure($ensure, 'directory'), + } + + archive { 'etcd': ensure => $ensure, + path => "${_tarball_target}/${_file}", source => $_url, extract => true, extract_command => 'tar xfz %s --strip-components=1', - extract_path => '/usr/local/bin', + extract_path => $_target, cleanup => true, - creates => ['/usr/local/bin/etcd', '/usr/local/bin/etcdctl'], - notify => Service['etcd'], + creates => ["${_target}/etcd", "${_target}/etcdctl"], + } + + file { '/usr/local/bin/etcd': + ensure => stdlib::ensure($ensure, 'link'), + mode => '0755', + replace => true, + target => "${_target}/etcd", + require => Archive['etcd'], + notify => Service['etcd'], } - if $ensure == 'absent' { - file { ['/usr/local/bin/etcd', '/usr/local/bin/etcdctl']: - ensure => 'absent', - } + file { '/usr/local/bin/etcdctl': + ensure => stdlib::ensure($ensure, 'link'), + mode => '0755', + replace => true, + target => "${_target}/etcdctl", + require => Archive['etcd'], } group { $group: diff --git a/spec/classes/server/etcd/setup_spec.rb b/spec/classes/server/etcd/setup_spec.rb index 1c39e69..024d6a5 100644 --- a/spec/classes/server/etcd/setup_spec.rb +++ b/spec/classes/server/etcd/setup_spec.rb @@ -31,15 +31,30 @@ class { '::k8s::server::etcd': it { is_expected.to compile } it do - is_expected.to contain_archive('/var/tmp/etcd-v3.6.0-linux-amd64.tar.gz').with( + is_expected.to contain_archive('etcd').with( ensure: 'present', + path: '/opt/etcd/archives/etcd-v3.6.0-linux-amd64.tar.gz', source: 'https://storage.googleapis.com/etcd/v3.6.0/etcd-v3.6.0-linux-amd64.tar.gz', extract: true, extract_command: 'tar xfz %s --strip-components=1', - extract_path: '/usr/local/bin', + extract_path: '/opt/etcd/3.6.0', cleanup: true, - creates: ['/usr/local/bin/etcd', '/usr/local/bin/etcdctl'] + creates: ['/opt/etcd/3.6.0/etcd', '/opt/etcd/3.6.0/etcdctl'] + ) + + is_expected.to contain_file('/usr/local/bin/etcd').with( + ensure: 'link', + mode: '0755', + replace: true, + target: '/opt/etcd/3.6.0/etcd' ).that_notifies('Service[etcd]') + + is_expected.to contain_file('/usr/local/bin/etcdctl').with( + ensure: 'link', + mode: '0755', + replace: true, + target: '/opt/etcd/3.6.0/etcdctl' + ) end it { is_expected.to contain_user('etcd') }