Method: AmiSpec.invoke

Defined in:
lib/ami_spec.rb

.invokeObject



85
86
87
88
89
90
91
92
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/ami_spec.rb', line 85

def self.invoke
  options = Trollop::options do
    opt :role, "The role to test, this should map to a directory in the spec folder", type: :string
    opt :ami, "The ami ID to run tests against", type: :string
    opt :role_ami_file, "A file containing comma separated roles and amis. i.e.\nweb_server,ami-id.",
        type: :string
    opt :specs, "The directory to find ServerSpecs", type: :string, required: true
    opt :subnet_id, "The subnet to start the instance in", type: :string, required: true
    opt :key_name, "The SSH key name to assign to instances", type: :string, required: true
    opt :key_file, "The SSH private key file associated to the key_name", type: :string, required: true
    opt :ssh_user, "The user to ssh to the instance as", type: :string, required: true
    opt :aws_region, "The AWS region, defaults to AWS_DEFAULT_REGION environment variable", type: :string
    opt :aws_instance_type, "The ec2 instance type, defaults to t2.micro", type: :string, default: 't2.micro'
    opt :aws_security_groups, "Security groups to associate to the launched instances. May be specified multiple times",
        type: :strings, default: nil
    opt :aws_public_ip, "Launch instances with a public IP"
    opt :ssh_retries, "The number of times we should try sshing to the ec2 instance before giving up. Defaults to 30",
        type: :int, default: 30
    opt :tags, "Additional tags to add to launched instances in the form of comma separated key=value pairs. i.e. Name=AmiSpec", type: :string, default: ""
    opt :debug, "Don't terminate instances on exit"
    opt :buildkite, "Output section separators for buildkite"
    opt :wait_for_rc, "Wait for oldschool SystemV scripts to run before conducting tests. Currently only supports Ubuntu with upstart"
    opt :user_data_file, "File path for aws ec2 user data", type: :string
    opt :iam_instance_profile_arn, "IAM instance profile to use", type: :string
  end

  if options[:role] && options[:ami]
    options[:amis] = { options[:role] => options[:ami] }
    options.delete(:role)
    options.delete(:ami)
  elsif options[:role_ami_file]
    file_lines = File.read(options[:role_ami_file]).split("\n")
    file_array = file_lines.collect { |line| line.split(',') }.flatten
    options[:amis] = Hash[*file_array]
    options.delete(:role_ami_file)
  else
    fail "You must specify either role and ami or role_ami_file"
  end

  unless File.exist? options[:key_file]
    fail "Key file #{options[:key_file]} not found"
  end

  unless options[:user_data_file] and File.exist? options[:user_data_file]
    fail "User Data file #{options[:user_data_file]} not found"
  end

  options[:tags] = parse_tags(options[:tags])

  exit run(options)
end