From 67701297f2bd2eaa58ea0c8c738c5ad50bfa34fe 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 ++++++++++++++++++++++++++------ 3 files changed, 93 insertions(+), 18 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..809618e 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['crictl'], + 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: