Class: Entitlement::NumberedEntry

Inherits:
Entry
  • Object
show all
Includes:
EasyType::Helpers
Defined in:
lib/entitlement/numbered_entry.rb

Overview

This class allows you to specify the number of nodes to use the module on.

Direct Known Subclasses

NodeGroupEntry

Instance Attribute Summary

Attributes inherited from Entry

#file

Class Method Summary collapse

Instance Method Summary collapse

Methods included from EasyType::Helpers

#camelize, #convert_csv_data_to_hash, #get_puppet_file, included

Methods inherited from Entry

#days_left, #expiring?, #notify_if_expiring, #purgable?

Constructor Details

#initialize(modules, from, to, filename_string, number, server = nil, license_id = 'none', warn_number = nil, &proc) ⇒ NumberedEntry

rubocop: disable Metrics/ParameterLists



36
37
38
39
40
41
42
43
44
# File 'lib/entitlement/numbered_entry.rb', line 36

def initialize(modules, from, to, filename_string, number, server = nil, license_id = 'none', warn_number = nil, &proc)
  super(modules, from, to, &proc)
  @number            = number
  @warn_number       = warn_number
  @licensed_server   = server || ''
  @licensed_servers  = server.split(',').map(&:strip)
  @license_id        = license_id
  @registered_server = self.class.puppet_server
end

Class Method Details

.puppet_serverObject



21
22
23
24
25
26
27
28
29
30
# File 'lib/entitlement/numbered_entry.rb', line 21

def self.puppet_server
  server = if in_bolt?
    yaml_data = File.read('/tmp/run_info.yaml')
    data = Puppet::Util::Yaml.safe_load(yaml_data, [Symbol])
    data[:puppet_server]
  else
    Puppet.settings[:server]
  end
  server
end

Instance Method Details

#inspectObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/entitlement/numbered_entry.rb', line 57

def inspect
  super
  puts "License ID  : #{@license_id}"
  puts "entitled    : #{@number}"
  puts "Warn at     : #{@warn_number}" if @warn_number
  puts "on server   : #{@licensed_server}" if @licensed_server
  @modules.collect {|m| m.split('#').first}.uniq.each do | module_name|
    puts "module  : #{module_name}"
    registered_nodes = Array(registered_nodes_for(module_name, @licensed_server))
    valid            = registered_nodes.include?(current_node)
    puts "  registered             : #{registered_nodes.size}"
    puts "  on nodes               : #{registered_nodes.join(',')}"
    puts "  valid on current node  : #{valid}"
  end
end

#invalid_puppetserver?Boolean

Returns:

  • (Boolean)


97
98
99
100
101
102
103
# File 'lib/entitlement/numbered_entry.rb', line 97

def invalid_puppetserver?
  #
  # For now allow all puppetservers when we are using bolt. Bolt
  # cannot see which puppetserver was used.
  #
  [@registered_server] - @licensed_servers == [@registered_server]
end

#puppetserver_in_hosts_file?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/entitlement/numbered_entry.rb', line 105

def puppetserver_in_hosts_file?
  Resolv::Hosts.new().getaddresses(@registered_server).any?
end

#registered_licensesObject



109
110
111
112
113
# File 'lib/entitlement/numbered_entry.rb', line 109

def registered_licenses
  node_data.keys
rescue
  []
end

#registered_modulesObject



115
116
117
118
119
# File 'lib/entitlement/numbered_entry.rb', line 115

def registered_modules
  node_data[@license_id].keys
rescue
  []
end

#registered_nodes_for(module_name, puppet_server) ⇒ Object



121
122
123
124
125
# File 'lib/entitlement/numbered_entry.rb', line 121

def registered_nodes_for(module_name, puppet_server)
  node_data[@license_id][module_name][puppet_server] || []
rescue
  []
end

#valid?(module_name, _resources = nil) ⇒ Boolean

rubocop: enable Metrics/ParameterLists

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
# File 'lib/entitlement/numbered_entry.rb', line 47

def valid?(module_name, _resources = nil)
  begin
    @module_name = module_name.split('#').first
  rescue
    @module_name = module_name
  end
  Puppet.debug "Found a Numbered entitlement with id #{@license_id} allowing usage on #{@number} nodes,served from #{@registered_server}...."
  super(module_name) ? valid_node?(current_node) : false
end

#valid_node?(node) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/entitlement/numbered_entry.rb', line 73

def valid_node?(node)
  if puppetserver_in_hosts_file?
    Puppet.err "Entitlement doesn't support puppetserver #{@registered_server} in host file."
    return false
  end
  if invalid_puppetserver?
    Puppet.debug "License #{@license_id} is only valid on puppet server(s) #{@licensed_server}. Now running on #{@registered_server}, so skipping this one."
    return false
  end
  unless enough_nodes?
    Puppet.err "Your node list for module #{@module_name} contains more nodes then entitled. Only using first #{@number}. Please make the list compliant."
  else
    Puppet.warn_once :license, :usage_overdrawn, "Using module #{@module_name} on more then #{@warn_number} nodes. Make sure you are using the software within license limits." if above_warning_level?
  end
  unless validated_registered_nodes.include?(node)
    Puppet.debug :license, :not_registered, "Node #{node} is not registered in the node list for module #{@module_name} with license id #{@license_id}."
    return false
  else
    Puppet.debug "Node #{node} is registered in the node list for module #{@module_name} in #{ENTITLEMENTS_URL}"
  end
  Puppet.debug "Your node list for module #{@module_name} is compliant."
  true
end