Class: Terragov::BuildPaths
- Inherits:
-
Object
- Object
- Terragov::BuildPaths
- Defined in:
- lib/terragov/buildpaths.rb
Instance Method Summary collapse
- #base(options = {}) ⇒ Object
- #build_command(options = {}) ⇒ Object
- #check_var_files(paths = []) ⇒ Object
- #data_paths(options = {}) ⇒ Object
- #data_validation(path) ⇒ Object
Instance Method Details
#base(options = {}) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/terragov/buildpaths.rb', line 5 def base( = {}) environment = ['environment'] data_dir = ['data_dir'] repo_dir = ['repo_dir'] stack = ['stack'] project = ['project'] extra = ['extra'] # Construct variables terraform_dir = File.join(repo_dir, 'terraform') project_dir = File.join(terraform_dir, "projects/#{project}") backend_file = File.join(project_dir, "#{environment}.#{stack}.backend") common_data_dir = File.join(data_dir, "common/#{environment}") all_env_common_data = File.join(data_dir, 'common', 'common.tfvars') all_env_stack_common_data = File.join(data_dir, 'common', "#{stack}.tfvars") common_data = File.join(common_data_dir, 'common.tfvars') stack_common_data = File.join(common_data_dir, "#{stack}.tfvars") project_data_dir = File.join(data_dir, "#{project}/#{environment}") all_env_common_project_data = File.join(data_dir, project, 'common.tfvars') all_env_stack_project_data = File.join(data_dir, project, "#{stack}.tfvars") common_project_data = File.join(project_data_dir, 'common.tfvars') secret_common_project_data = File.join(project_data_dir, 'common.secret.tfvars') stack_project_data = File.join(project_data_dir, "#{stack}.tfvars") secret_project_data = File.join(project_data_dir, "#{stack}.secret.tfvars") # Return hash to enable testing data_paths = { terraform_dir: terraform_dir, project_dir: project_dir, backend_file: backend_file, common_data_dir: common_data_dir, all_env_common_data: all_env_common_data, all_env_stack_common_data: all_env_stack_common_data, common_data: common_data, stack_common_data: stack_common_data, project_data_dir: project_data_dir, all_env_common_project_data: all_env_common_project_data, all_env_stack_project_data: all_env_stack_project_data, common_project_data: common_project_data, secret_common_project_data: secret_common_project_data, stack_project_data: stack_project_data, secret_project_data: secret_project_data } end |
#build_command(options = {}) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/terragov/buildpaths.rb', line 93 def build_command( = {}) paths = base() abort("Error: cannot find main repository (#{paths[:terraform_dir]})") unless data_validation(paths[:terraform_dir]) abort("Error: cannot find project (#{paths[:project_dir]}).") unless data_validation(paths[:project_dir]) abort("Error: cannot find backend file (#{paths[:backend_file]}).\nDid you specify the right stack?") unless data_validation(paths[:backend_file]) var_paths = data_paths() abort("Error: cannot find any var files") unless check_var_files(var_paths) $full_vars = [] data_paths().each do |path| if data_validation(path) # TODO: write sops class if path == paths[:secret_project_data] || path == paths[:secret_common_project_data] $full_vars << "-var-file <(sops -d #{path})" else $full_vars << "-var-file #{path}" end end end # If defining additional Terraform commands, they need to be passed in as one string, # with any hyphens escaped twice so it does not conflict with commander CLI options extra = ['extra'].to_s $full_vars << extra.delete('\\') $full_vars.join(' ') end |
#check_var_files(paths = []) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/terragov/buildpaths.rb', line 76 def check_var_files(paths = []) $path_array = [] paths.each do |path| $path_array << data_validation(path) end if $path_array.include? true return true else puts 'Files checked: ' paths.each do |path| puts path end return false end end |
#data_paths(options = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/terragov/buildpaths.rb', line 58 def data_paths( = {}) # The path order is important for passing the var files in the correct # order to Terraform as that creates the hierarchy for overrides base = self.base() paths = [ base[:all_env_common_data], base[:all_env_stack_common_data], base[:common_data], base[:stack_common_data], base[:all_env_common_project_data], base[:all_env_stack_project_data], base[:common_project_data], base[:secret_common_project_data], base[:stack_project_data], base[:secret_project_data] ] end |
#data_validation(path) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/terragov/buildpaths.rb', line 50 def data_validation(path) if File.exist?(path) true else false end end |