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
|