diff --git a/REFERENCE.md b/REFERENCE.md
index aaee151c4..0ad959862 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -2179,13 +2179,15 @@ Default value: `'present'`
##### `password`
-Data type: `String`
+Data type: `Optional[String]`
Password for the given user. A plaintext password will be managed
with the esusers utility and requires a refresh to update, while
a hashed password from the esusers utility will be managed manually
in the uses file.
+Default value: `undef`
+
##### `roles`
Data type: `Array`
diff --git a/manifests/user.pp b/manifests/user.pp
index dfd412c7b..56cc4569a 100644
--- a/manifests/user.pp
+++ b/manifests/user.pp
@@ -23,26 +23,36 @@
# @author Gavin Williams
#
define elasticsearch::user (
- String $password,
- Enum['absent', 'present'] $ensure = 'present',
- Array $roles = [],
+ Optional[String] $password = undef,
+ Enum['absent', 'present'] $ensure = 'present',
+ Array $roles = [],
) {
- if $password =~ /^\$2a\$/ {
- elasticsearch_user_file { $name:
- ensure => $ensure,
- configdir => $elasticsearch::configdir,
- hashed_password => $password,
- before => Elasticsearch_user_roles[$name],
- }
- } else {
+ if $ensure == 'absent' {
elasticsearch_user { $name:
- ensure => $ensure,
+ ensure => 'absent',
configdir => $elasticsearch::configdir,
- password => $password,
- before => Elasticsearch_user_roles[$name],
}
}
-
+ else {
+ if $password == undef {
+ fail('elasticsearch::user: password must be provided when ensure => present')
+ }
+ if $password =~ /^\$2a\$/ {
+ elasticsearch_user_file { $name:
+ ensure => present,
+ configdir => $elasticsearch::configdir,
+ hashed_password => $password,
+ before => Elasticsearch_user_roles[$name],
+ }
+ } else {
+ elasticsearch_user { $name:
+ ensure => present,
+ configdir => $elasticsearch::configdir,
+ password => $password,
+ before => Elasticsearch_user_roles[$name],
+ }
+ }
+ }
elasticsearch_user_roles { $name:
ensure => $ensure,
roles => $roles,
diff --git a/spec/defines/007_elasticsearch_user_spec.rb b/spec/defines/007_elasticsearch_user_spec.rb
index 54b62782e..b1ae46b76 100644
--- a/spec/defines/007_elasticsearch_user_spec.rb
+++ b/spec/defines/007_elasticsearch_user_spec.rb
@@ -86,6 +86,31 @@ class { 'elasticsearch': }
include_examples 'class', :systemd
end
+
+ context "with ensure => 'absent' and no password" do
+ let(:params) do
+ {
+ ensure: 'absent',
+ roles: []
+ }
+ end
+
+ it { is_expected.to compile }
+
+ it do
+ expect(subject).to contain_elasticsearch_user('elastic').with(
+ 'ensure' => 'absent',
+ 'configdir' => '/etc/elasticsearch'
+ )
+ end
+
+ it do
+ expect(subject).to contain_elasticsearch_user_roles('elastic').with(
+ 'ensure' => 'absent',
+ 'roles' => []
+ )
+ end
+ end
end
end
end