lib/terragov/cli.rb in terragov-0.2.3 vs lib/terragov/cli.rb in terragov-0.2.4

- old
+ new

@@ -14,31 +14,31 @@ def initialize program :name, 'terragov' program :version, Terragov::VERSION program :description, 'Wrapper for GOV.UK Terraform deployments.' - global_option('-c', "--config-file FILE", 'Specify a config file. Has less precedence than environment variables, which in turn have less precedence than CLI options') do |config_file| + global_option('-c', '--config-file FILE', 'Specify a config file. Has less precedence than environment variables, which in turn have less precedence than CLI options') do |config_file| $config_file = config_file end - global_option('-d', "--data-dir DIRECTORY", String, 'Location of the data directory') do |data_dir| + global_option('-d', '--data-dir DIRECTORY', String, 'Location of the data directory') do |data_dir| $data_dir = data_dir end - global_option( '-e', '--environment STRING', String, 'Select environment') do |environment| + global_option('-e', '--environment STRING', String, 'Select environment') do |environment| $environment = environment end - global_option( '-p', '--project STRING', String, 'Name of the project') do |project| + global_option('-p', '--project STRING', String, 'Name of the project') do |project| $project = project end - global_option( '-r', '--repo-dir DIRECTORY', String, 'Location of the main terraform repository') do |repo_dir| + global_option('-r', '--repo-dir DIRECTORY', String, 'Location of the main terraform repository') do |repo_dir| $repo_dir = repo_dir end - global_option( '-s', '--stack STRING', String, 'Name of the stack') do |stack| + global_option('-s', '--stack STRING', String, 'Name of the stack') do |stack| $stack = stack end global_option('--extra STRING', String, 'Any additional arguments to pass in the following format: --extra \\\\-target resource.foo.') do |extra| $extra = extra @@ -56,54 +56,54 @@ $skip_git_check = skip_git_check end end def data_dir - return $data_dir ? $data_dir : false + $data_dir ? $data_dir : false end def environment - return $environment ? $environment : false + $environment ? $environment : false end def project - return $project ? $project : false + $project ? $project : false end def repo_dir - return $repo_dir ? $repo_dir : false + $repo_dir ? $repo_dir : false end def stack - return $stack ? $stack : false + $stack ? $stack : false end def extra return $extra if $extra end def verbose - return true ? $verbose : false + true ? $verbose : false end def dryrun - return true ? $dryrun : false + true ? $dryrun : false end def skip_git_check - return true ? $skip_git_check : false + true ? $skip_git_check : false end def load_config_file if $config_file || ENV['TERRAGOV_CONFIG_FILE'] file = $config_file || ENV['TERRAGOV_CONFIG_FILE'] $values = YAML.load_file(File.expand_path(file)) - return $values + $values end end - def config(option, file=false, required=true) + def config(option, file = false, required = true) env_var = "TERRAGOV_#{option.upcase}" error_message = "Must set #{option}. Use --help for details." if public_send(option) if file return File.expand_path(public_send(option)) @@ -115,22 +115,22 @@ return File.expand_path(ENV[env_var]) else return ENV[env_var] end elsif !load_config_file.nil? - unless load_config_file[option].nil? - if file - return File.expand_path(load_config_file[option]) - else - return load_config_file[option] - end - else + if load_config_file[option].nil? if required abort(error_message) else return false end + else + if file + return File.expand_path(load_config_file[option]) + else + return load_config_file[option] + end end else if required abort(error_message) else @@ -139,33 +139,33 @@ end end def cmd_options cmd_options_hash = { - "environment" => config('environment'), - "data_dir" => config('data_dir', true), - "project" => config('project'), - "stack" => config('stack'), - "repo_dir" => config('repo_dir', true), - "extra" => extra, + 'environment' => config('environment'), + 'data_dir' => config('data_dir', true), + 'project' => config('project'), + 'stack' => config('stack'), + 'repo_dir' => config('repo_dir', true), + 'extra' => extra } - return cmd_options_hash + cmd_options_hash end - def git_compare_repo_and_data(skip=false) + def git_compare_repo_and_data(skip = false) git_helper = Terragov::Git.new - # FIXME this is confusing as we want to check the repository git status from + # FIXME: this is confusing as we want to check the repository git status from # the root, but the "data" directory is one level down in the repository repo_dir_root = cmd_options['repo_dir'] data_dir_root = File.expand_path(File.join(cmd_options['data_dir'], '../')) repo_dir_branch = git_helper.branch_name(repo_dir_root) data_dir_branch = git_helper.branch_name(data_dir_root) branches = { - "repo_dir" => repo_dir_branch, - "data_dir" => data_dir_branch, + 'repo_dir' => repo_dir_branch, + 'data_dir' => data_dir_branch } unless skip branches.each do |name, branch| unless branch =~ /^master$/ @@ -173,11 +173,11 @@ end end unless git_helper.compare_branch(repo_dir_root, data_dir_root) puts "Warning: repo_dir(#{repo_dir_branch}) and data_dir(#{data_dir_branch}) on different branches" - exit unless HighLine.agree("Do you wish to continue?") + exit unless HighLine.agree('Do you wish to continue?') end end end def run_terraform_cmd(cmd, opt = nil) @@ -188,47 +188,41 @@ be_verbose = config('verbose', false, false) do_dryrun = config('dryrun', false, false) - skip_check = config('skip_git_check', false, false) + skip_check = config('skip_git_check', false, false) git_compare_repo_and_data(skip_check) - if be_verbose - puts cmd_options.to_yaml - end + puts cmd_options.to_yaml if be_verbose - if opt - cmd = "#{cmd} #{opt}" - end + cmd = "#{cmd} #{opt}" if opt Terragov::Terraform.new.execute(cmd, varfiles, backend, project_dir, do_dryrun, be_verbose) end def run command :plan do |c| c.syntax = 'terragov plan' c.description = 'Runs a plan of your code' - c.action do |args, options| - + c.action do |_args, _options| run_terraform_cmd(c.name) end end command :apply do |c| c.syntax = 'terragov apply' c.description = 'Apply your code' - c.action do |args, options| - + c.action do |_args, _options| run_terraform_cmd(c.name) end end command :destroy do |c| c.syntax = 'terragov destroy' c.description = 'Destroy your selected project' c.option '--force', 'Force destroy' - c.action do |args, options| + c.action do |_args, options| if options.force run_terraform_cmd("#{c.name} -force") else run_terraform_cmd(c.name) end @@ -237,15 +231,22 @@ command :clean do |c| c.syntax = 'terragov clean' c.description = 'Clean your directory of any files terraform may have left lying around' c.option '--force', 'Force removal of files' - c.action do |args, options| + c.action do |_args, options| if config('verbose', false, false) puts "Selecting directory #{repo_dir}" end - Terragov::Cleaner.new.delete(repo_dir, /terraform\.tfstate\.backup/, options.force) + files_to_delete = [ + /\.terraform/, + /terraform\.tfstate\.backup/, + ] + + path = config('repo_dir', true) + + Terragov::Cleaner.new.delete(path, files_to_delete, options.force) end end run! end