class Ridoku::ConfigWizard
Attributes
fields[RW]
Public Class Methods
new()
click to toggle source
# File lib/ridoku/config_wizard.rb, line 7 def initialize self.fields = { service_role_arn: :arn_string, instance_profile_arn: :arn_string, ssh_key: :path } end
Protected Class Methods
fetch_input(output, required = {}, info = {})
click to toggle source
# File lib/ridoku/config_wizard.rb, line 110 def fetch_input(output, required = {}, info = {}) info ||= {} info.merge!({ ssh_key: <<-EOF Key files (such as SSH keys) should be provided by file path. In the case of GIT repository SSH keys (custom cookbooks, application respository), these should be to the private keys. I recommend generating keys specifically for each use, so that the keys can be easily tracked and removed if necessary, without requiring you replace your keys on every machine you access. Enter 's' or 'skip' if you wish to keep the currently configured value. EOF }) recurse_required(required, output, info) end
get_response(user, key, value)
click to toggle source
Handle getting the response from the user and validating input.
# File lib/ridoku/config_wizard.rb, line 149 def get_response(user, key, value) done = false while !done begin val = validate_response(key, value, $stdin.gets.chomp) user[key] = val unless val == :skip done = true rescue ArgumentError => e $stdout.puts e.to_s $stdout.puts 'Retry?' res = $stdin.gets done = (res.match(/^(Y|y)/) == nil) end end end
help_text()
click to toggle source
# File lib/ridoku/config_wizard.rb, line 83 def help_text help = <<-EOF Configuration Wizard: In order to get ridoku configured with your OpsWorks account, Ridoku must collect pertinent required info. The wizard can be run at any time after the first with the command line option of `--wizard`. Values to be configured: ssh_key: Path to the SSH key to be used for git repositories (cook books, apps, etc). It is recommended that this be generated separately from your personal SSH keys so that they can be revoked effecting other logins. service_role_arn: If a valid service_role_arn cannot be found, Ridoku will attempt to generate one for you. If you've already used OpsWorks, Ridoku should be able to find the necessary Roles for you. instance_role_arn: If a valid instance_role_arn cannot be found, Ridoku will attempt to generate one for you. If you've already used OpsWorks, Ridoku should be able to find the necessary Roles for you. EOF end
info_for(key, info)
click to toggle source
Print warning info associated with a particular attributes.
# File lib/ridoku/config_wizard.rb, line 189 def info_for(key, info) return $stdout.colorize(info[key], :bold) if info.key?(key) '' end
recurse_required(req, user, info, buffer = '')
click to toggle source
Recurse through required hash to collected all necessary information.
# File lib/ridoku/config_wizard.rb, line 129 def recurse_required(req, user, info, buffer = '') req.each do |k,v| if v.is_a?(Hash) buffer += info_for(k, info) buffer += "In #{$stdout.colorize(k, :bold)}:" recurse_required(v, user[k] ||= {}, info, buffer) buffer = '' else next if user[k] $stdout.puts '-'*80 $stdout.puts buffer if buffer.length > 0 info_block = info_for(k, info) $stdout.puts info_block if info_block.length > 0 $stdout.puts "For #{$stdout.colorize(k, :bold)} (#{$stdout.colorize(v, :red)}):" get_response(user, k, v) end end end
validate_response(key, expect, value)
click to toggle source
Validate input is as expected.
# File lib/ridoku/config_wizard.rb, line 166 def validate_response(key, expect, value) return :skip if value.match(%r(s|skip)) case key when :ssh_key value.gsub!(%r(^~), ENV['HOME']) if value.match(%r(^~)) fail ArgumentError.new('Invalid input provided.') unless File.exists?(value) || value == '' end case expect when :arn_string fail ArgumentError.new('Invalid ARN provided.') unless value.match(/^.*:.*:.*:.*:([0-9]+):.*$||/) when :array value = value.split(%r([^\\](:|\|))) end value end
Public Instance Methods
run()
click to toggle source
# File lib/ridoku/config_wizard.rb, line 15 def run $stdout.puts $stdout.colorize(ConfigWizard.help_text, :bold) $stdout.puts "Do you wish to run the wizard now? [#{$stdout.colorize('Y', :bold)}|n]" res = $stdin.gets if res.match(%r(^[Nn])) Base.config[:local_init] = true Base.save_config(::RUNCOM) exit 1 end sra_info = <<-EOF Service Role ARN is used to access OpsWorks and issue commands on your behalf. No suitable role was found. Please enter the appropriate Role used to issue commands on OpsWorks. Leave the field blank to attempt to generate one or to refresh from account credentials. 's' or 'skip' if you wish to use existing values. #{$stdout.colorize('Current Service ARN:', [:white, :bold])} #{$stdout.colorize(Base.config[:service_arn], :green)} EOF inst_info = <<-EOF Instance Profile ARN is used to for each instance created for OpsWorks. Please enter the appropriate default Role used for instance profiles. Leave the field blank to attempt to generate one or to refresh from account credentials. 's' or 'skip' if you wish to use existing values. #{$stdout.colorize('Current Instance ARN:', [:white, :bold])} #{$stdout.colorize(Base.config[:instance_arn], :green)} EOF info = { service_role_arn: sra_info, instance_profile_arn: inst_info } ConfigWizard.fetch_input(Base.config, fields, info) case Base.config[:service_role_arn] when '' Base.config.delete(:service_arn) Base.configure_service_roles when 's', 'skip' else Base.config[:service_arn] = Base.config[:service_role_arn] end case Base.config[:instance_profile_arn] when '' Base.config.delete(:instance_arn) Base.configure_instance_roles when 's', 'skip' else Base.config[:instance_arn] = Base.config[:instance_profile_arn] end Base.config[:local_init] = true Base.save_config(::RUNCOM) $stdout.puts 'Updating required Security Groups' Base.update_pg_security_groups_in_all_regions $stdout.puts 'Configuration complete.' exit 0 end