Class: Dome::HieraLookup

Inherits:
Object
  • Object
show all
Defined in:
lib/dome/hiera_lookup.rb

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ HieraLookup

Returns a new instance of HieraLookup.



3
4
5
6
7
8
# File 'lib/dome/hiera_lookup.rb', line 3

def initialize(environment)
  @environment = environment.environment
  @account     = environment.
  @ecosystem   = environment.ecosystem
  @settings    = Dome::Settings.new
end

Instance Method Details

#certificate_directoryObject



87
88
89
# File 'lib/dome/hiera_lookup.rb', line 87

def certificate_directory
  "#{@settings.project_root}/terraform/certs"
end

#configObject



10
11
12
# File 'lib/dome/hiera_lookup.rb', line 10

def config
  @config ||= YAML.load_file(File.join(puppet_dir, 'hiera.yaml')).merge(default_config)
end

#create_certificate_directoryObject



82
83
84
85
# File 'lib/dome/hiera_lookup.rb', line 82

def create_certificate_directory
  puts "Creating certificate directory at #{certificate_directory.colorize(:green)}"
  FileUtils.mkdir_p certificate_directory
end

#default_configObject



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/dome/hiera_lookup.rb', line 14

def default_config
  {
    logger: 'noop',
    yaml: {
      datadir: "#{puppet_dir}/hieradata"
    },
    eyaml: {
      datadir: "#{puppet_dir}/hieradata",
      pkcs7_private_key: eyaml_private_key,
      pkcs7_public_key: eyaml_public_key
    }
  }
end

#extract_certs(certs) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/dome/hiera_lookup.rb', line 72

def extract_certs(certs)
  create_certificate_directory

  certs.each_pair do |key, val|
    directory = "#{certificate_directory}/#{key}"
    puts "Extracting certificate #{key.colorize(:green)} into #{directory.colorize(:green)}"
    File.open(directory, 'w') { |f| f.write(lookup(val)) }
  end
end

#eyaml_private_keyObject



34
35
36
37
38
39
# File 'lib/dome/hiera_lookup.rb', line 34

def eyaml_private_key
  private_key = File.join(puppet_dir, 'keys/private_key.pkcs7.pem')
  raise "Cannot find eyaml private key! Make sure it exists at #{private_key}" unless File.exist?(private_key)
  puts "Found eyaml private key: #{private_key.colorize(:green)}"
  private_key
end

#eyaml_public_keyObject



41
42
43
44
45
46
# File 'lib/dome/hiera_lookup.rb', line 41

def eyaml_public_key
  public_key = File.join(puppet_dir, 'keys/public_key.pkcs7.pem')
  raise "Cannot find eyaml public key! Make sure it exists at #{public_key}" unless File.exist?(public_key)
  puts "Found eyaml public key: #{public_key.colorize(:green)}"
  public_key
end

#lookup(key, default = nil, order_override = nil, resolution_type = :priority) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/dome/hiera_lookup.rb', line 48

def lookup(key, default = nil, order_override = nil, resolution_type = :priority)
  hiera = Hiera.new(config: config)

  hiera_scope = {}
  hiera_scope['ecosystem'] = @ecosystem
  hiera_scope['location']  = 'aeuw1'
  hiera_scope['env']       = @environment

  hiera.lookup(key.to_s, default, hiera_scope, order_override, resolution_type)
end

#puppet_dirObject



28
29
30
31
32
# File 'lib/dome/hiera_lookup.rb', line 28

def puppet_dir
  directory = File.join(@settings.project_root, 'puppet')
  puts "The configured Puppet directory is: #{directory.colorize(:green)}" unless @directory
  @directory ||= directory
end

#secret_env_vars(secret_vars) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/dome/hiera_lookup.rb', line 59

def secret_env_vars(secret_vars)
  secret_vars.each_pair do |key, val|
    hiera_lookup = lookup(val)
    terraform_env_var = "TF_VAR_#{key}"
    ENV[terraform_env_var] = hiera_lookup
    if hiera_lookup
      puts "Setting #{terraform_env_var.colorize(:green)}."
    else
      puts "Hiera lookup failed for '#{val}', so #{terraform_env_var} was not set.".colorize(:red)
    end
  end
end