Class: Puppet::Provider::ElasticUserRoles

Inherits:
ElasticYaml
  • Object
show all
Defined in:
lib/puppet/provider/elastic_user_roles.rb

Overview

Provider to help manage file-based Shield/X-Pack user/role configuration files.

Class Method Summary collapse

Class Method Details

.parse(text) ⇒ Object

Override the ancestor ‘parse` method to process a users/roles file managed by the Elasticsearch user tools.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/puppet/provider/elastic_user_roles.rb', line 8

def self.parse(text)
  text.split("\n").map(&:strip).select do |line|
    # Strip comments
    not line.start_with? '#' and not line.empty?
  end.map do |line|
    # Turn array of roles into array of users that have the role
    role, users = line.split(':')
    users.split(',').map do |user|
      { user => [role] }
    end
  end.flatten.inject({}) do |hash, user|
    # Gather up user => role hashes by append-merging role lists
    hash.merge(user) { |_, o, n| o + n }
  end.map do |user, roles|
    # Map those hashes into what the provider expects
    {
      :name => user,
      :roles => roles
    }
  end.to_a
end

.skip_record?(_record) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/puppet/provider/elastic_user_roles.rb', line 46

def self.skip_record?(_record)
  false
end

.to_file(records) ⇒ Object

Represent this user/role record as a correctly-formatted config file.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/puppet/provider/elastic_user_roles.rb', line 31

def self.to_file(records)
  debug "Flushing: #{records.inspect}"
  records.map do |record|
    record[:roles].map do |r|
      { [record[:name]] => r }
    end
  end.flatten.map(&:invert).inject({}) do |acc, role|
    acc.merge(role) { |_, o, n| o + n }
  end.delete_if do |_, users|
    users.empty?
  end.map do |role, users|
    "#{role}:#{users.join(',')}"
  end.join("\n") + "\n"
end