From 86d8f09bd819208b8c6413af7ead24dd3c9395a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phanie=20Jaumotte?= Date: Tue, 30 Jul 2024 16:18:55 +0200 Subject: [PATCH] Add a parameter to package mark hold --- REFERENCE.md | 17 +++++++++++++---- manifests/init.pp | 6 +++++- manifests/package.pp | 16 +++++++++++++--- spec/classes/000_elasticsearch_init_spec.rb | 13 +++++++++++++ types/multipath.pp | 1 + types/status.pp | 1 + 6 files changed, 46 insertions(+), 8 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 3ec71e538..03cfddab6 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -57,8 +57,8 @@ ### Data types -* [`Elasticsearch::Multipath`](#Elasticsearch--Multipath) -* [`Elasticsearch::Status`](#Elasticsearch--Status) +* [`Elasticsearch::Multipath`](#Elasticsearch--Multipath): Elasticsearch datadir multipath type +* [`Elasticsearch::Status`](#Elasticsearch--Status): Elasticsearch service status type ## Classes @@ -144,6 +144,7 @@ The following parameters are available in the `elasticsearch` class: * [`oss`](#-elasticsearch--oss) * [`package_dir`](#-elasticsearch--package_dir) * [`package_dl_timeout`](#-elasticsearch--package_dl_timeout) +* [`package_hold`](#-elasticsearch--package_hold) * [`package_name`](#-elasticsearch--package_name) * [`package_provider`](#-elasticsearch--package_provider) * [`package_url`](#-elasticsearch--package_url) @@ -508,6 +509,14 @@ Data type: `Integer` For http, https, and ftp downloads, you may set how long the exec resource may take. +##### `package_hold` + +Data type: `Boolean` + +Set to hold to tell Debian apt/Solaris pkg to hold the package version. + +Default value: `false` + ##### `package_name` Data type: `String` @@ -3237,13 +3246,13 @@ Returns: `Any` String ### `Elasticsearch::Multipath` -The Elasticsearch::Multipath data type. +Elasticsearch datadir multipath type Alias of `Variant[Array[Stdlib::Absolutepath], Stdlib::Absolutepath]` ### `Elasticsearch::Status` -The Elasticsearch::Status data type. +Elasticsearch service status type Alias of `Enum['enabled', 'disabled', 'running', 'unmanaged']` diff --git a/manifests/init.pp b/manifests/init.pp index e97ad1217..c245393e2 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -184,6 +184,9 @@ # For http, https, and ftp downloads, you may set how long the exec resource # may take. # +# @param package_hold +# Set to hold to tell Debian apt/Solaris pkg to hold the package version. +# # @param package_name # Name Of the package to install. # @@ -430,12 +433,13 @@ String $default_logging_level = $logging_level, Optional[String] $keystore_password = undef, Optional[Stdlib::Absolutepath] $keystore_path = undef, + Stdlib::Filemode $logdir_mode = '2750', + Boolean $package_hold = false, Optional[Stdlib::Absolutepath] $private_key = undef, Enum['rsa','dsa','ec'] $private_key_type = 'rsa', Boolean $restart_config_change = $restart_on_change, Boolean $restart_package_change = $restart_on_change, Boolean $restart_plugin_change = $restart_on_change, - Stdlib::Filemode $logdir_mode = '2750', ) { #### Validate parameters diff --git a/manifests/package.pp b/manifests/package.pp index 3b956a943..93576854b 100644 --- a/manifests/package.pp +++ b/manifests/package.pp @@ -153,9 +153,19 @@ } if ($elasticsearch::package_provider == 'package') { - package { 'elasticsearch': - ensure => $package_ensure, - name => $elasticsearch::_package_name, + # You cannot use "mark" property while "ensure" is one of ["absent", "purged", "held"] + if $package_ensure in ['absent', 'purged', 'held'] { + package { 'elasticsearch': + ensure => $package_ensure, + name => $elasticsearch::_package_name, + } + } else { + # https://puppet.com/docs/puppet/7/types/package.html#package-attribute-mark + package { 'elasticsearch': + ensure => $package_ensure, + name => $elasticsearch::_package_name, + mark => ($elasticsearch::package_hold ? { true => 'hold', false => 'none', }), + } } exec { 'remove_plugin_dir': diff --git a/spec/classes/000_elasticsearch_init_spec.rb b/spec/classes/000_elasticsearch_init_spec.rb index 38e50426c..598e741f6 100644 --- a/spec/classes/000_elasticsearch_init_spec.rb +++ b/spec/classes/000_elasticsearch_init_spec.rb @@ -435,6 +435,19 @@ with(ensure: 'latest') } end + + describe 'with hold enabled' do + let(:params) do + default_params.merge( + package_hold: true + ) + end + + it { + expect(subject).to contain_package('elasticsearch'). + with(mark: 'hold') + } + end end describe 'running a different user' do diff --git a/types/multipath.pp b/types/multipath.pp index 63dea224d..83f966ff4 100644 --- a/types/multipath.pp +++ b/types/multipath.pp @@ -1 +1,2 @@ +# Elasticsearch datadir multipath type type Elasticsearch::Multipath = Variant[Array[Stdlib::Absolutepath], Stdlib::Absolutepath] diff --git a/types/status.pp b/types/status.pp index e31498bdb..6c13d755e 100644 --- a/types/status.pp +++ b/types/status.pp @@ -1 +1,2 @@ +# Elasticsearch service status type type Elasticsearch::Status = Enum['enabled', 'disabled', 'running', 'unmanaged']