Class: Opsup::CLI::OptionBuilder

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/opsup/cli/option_builder.rb

Constant Summary collapse

DEFAULT_AWS_REGION =
'ap-northeast-1'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.createObject



10
11
12
# File 'lib/opsup/cli/option_builder.rb', line 10

def self.create
  new
end

Instance Method Details

#define_options(parser) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/opsup/cli/option_builder.rb', line 17

def define_options(parser)
  parser.tap do |p|
    p.on('-s', '--stack STACK_NAME', 'target stack name')
    p.on('-m', '--mode MODE', Opsup::Config::MODES.join(' | ').to_s)
    p.on('--aws-cred KEY_ID,SECRET_KEY', 'AWS credentials')
    p.on('--opsworks-region REGION', "default: #{DEFAULT_AWS_REGION}")
    p.on('--cookbook-url URL', 'URL of cookbook to upload')
    p.on('--s3-bucket NAME', 'S3 bucket name for cookbooks')
    p.on('-d', '--dryrun')
  end
end

#generate_config(options) ⇒ Object

Raises:



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/opsup/cli/option_builder.rb', line 50

def generate_config(options)
  %w[stack aws-cred].each do |key|
    raise Opsup::Error, "missing required option: --#{key}" unless options[key.to_sym]
  end

  aws_key_id, aws_secret = options[:"aws-cred"].split(',')
  if aws_key_id.nil? || aws_secret.nil?
    raise Opsup::Error, "aws-cred must be 'key_id,secret_key' format"
  end

  mode = options[:mode]&.to_sym
  raise Opsup::Error, "invalid mode: #{mode}" if mode && !Opsup::Config::MODES.include?(mode)

  Opsup::Config.new(
    stack_name: options[:stack],
    aws_access_key_id: aws_key_id,
    aws_secret_access_key: aws_secret,
    opsworks_region: options[:"opsworks-region"] || DEFAULT_AWS_REGION,
    cookbook_url: options[:"cookbook-url"],
    s3_bucket_name: options[:"s3-bucket"],
    s3_region: options[:"s3-region"] || DEFAULT_AWS_REGION,
    running_mode: mode,
    dryrun: options[:dryrun] || false,
  )
end

#options_from_env_vars(env_vars) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/opsup/cli/option_builder.rb', line 34

def options_from_env_vars(env_vars)
  [
    %w[stack STACK],
    %w[mode MODE],
    %w[aws-cred AWS_CRED],
    %w[opsworks-region OPSWORKS_REGION],
    %w[cookbook-url COOKBOOK_URL],
    %w[s3-bucket S3_BUCKET],
    %w[dryrun DRYRUN],
  ].each_with_object({}) do |(key, env_key), obj|
    value = env_vars["OPSUP_#{env_key}"]
    obj[key.to_sym] = value if value
  end
end