Class: ProspectusTerraform::Lookup

Inherits:
Object
  • Object
show all
Defined in:
lib/prospectus_terraform/providers.rb

Overview

Lookup object to find providers

Constant Summary collapse

PROVIDER_REGEX =
/provider\.(?<key>[\w-]+) (?<value>[\d.]+)$/.freeze
REPO_REGEX =

rubocop:disable Metrics/LineLength

%r{^  // provider\.(?<key>[\w-]+) (?<value>[\w-]+\/[\w-]+)}.freeze

Instance Method Summary collapse

Instance Method Details

#cmd_nameObject



23
24
25
# File 'lib/prospectus_terraform/providers.rb', line 23

def cmd_name
  'terraform-config-inspect --json'
end

#config_jsonObject



16
17
18
19
20
21
# File 'lib/prospectus_terraform/providers.rb', line 16

def config_json
  return @config_json if @config_json
  stdout, stderr, status = Open3.capture3(cmd_name)
  raise("#{cmd_name} failed") unless status.success? && stderr.empty?
  @config_json = stdout
end

#default_repo(name) ⇒ Object



45
46
47
# File 'lib/prospectus_terraform/providers.rb', line 45

def default_repo(name)
  "terraform-providers/terraform-provider-#{name}"
end

#match_to_hash(lines, regex) ⇒ Object



41
42
43
# File 'lib/prospectus_terraform/providers.rb', line 41

def match_to_hash(lines, regex)
  lines.map { |x| x.match(regex) }.compact.map { |x| [x[1], x[2]] }.to_h
end

#providersObject



27
28
29
30
31
# File 'lib/prospectus_terraform/providers.rb', line 27

def providers
  @providers ||= JSON.parse(config_json)['required_providers'].map do |k, v|
    [k, v.first]
  end
end

#repo_linesObject



37
38
39
# File 'lib/prospectus_terraform/providers.rb', line 37

def repo_lines
  @repo_lines ||= File.read('main.tf').lines
end

#reposObject



33
34
35
# File 'lib/prospectus_terraform/providers.rb', line 33

def repos
  @repos ||= match_to_hash(repo_lines, REPO_REGEX)
end

#resultsObject



10
11
12
13
14
# File 'lib/prospectus_terraform/providers.rb', line 10

def results
  @results ||= providers.map do |name, version|
    [name, version, repos[name] || default_repo(name)]
  end
end