aws-ec2 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +10 -0
- data/README.md +19 -15
- data/docs/example/app/user-data/bootstrap.sh +0 -12
- data/lib/aws_ec2/cli.rb +8 -3
- data/lib/aws_ec2/core.rb +25 -4
- data/lib/aws_ec2/create.rb +19 -9
- data/lib/aws_ec2/help/upload.md +3 -2
- data/lib/aws_ec2/profile.rb +10 -1
- data/lib/aws_ec2/script.rb +19 -3
- data/lib/aws_ec2/script/compile.rb +2 -2
- data/lib/aws_ec2/script/compress.rb +1 -1
- data/lib/aws_ec2/script/templates/ami_creation.sh +12 -0
- data/lib/aws_ec2/script/templates/auto_terminate.sh +11 -0
- data/lib/aws_ec2/script/templates/auto_terminate_after_timeout.sh +5 -0
- data/lib/aws_ec2/script/templates/cloudwatch.sh +3 -0
- data/lib/aws_ec2/script/templates/extract_aws_ec2_scripts.sh +48 -0
- data/lib/aws_ec2/script/upload.rb +1 -1
- data/lib/aws_ec2/scripts/auto_terminate.sh +10 -91
- data/lib/aws_ec2/scripts/auto_terminate/after_timeout.sh +18 -0
- data/lib/aws_ec2/scripts/auto_terminate/functions.sh +128 -0
- data/lib/aws_ec2/scripts/auto_terminate/functions/amazonlinux2.sh +10 -0
- data/lib/aws_ec2/scripts/auto_terminate/functions/ubuntu.sh +11 -0
- data/lib/aws_ec2/scripts/auto_terminate/setup.sh +31 -0
- data/lib/aws_ec2/scripts/cloudwatch.sh +22 -0
- data/lib/aws_ec2/scripts/cloudwatch/configure.sh +74 -0
- data/lib/aws_ec2/scripts/cloudwatch/install.sh +4 -0
- data/lib/aws_ec2/scripts/cloudwatch/service.sh +19 -0
- data/lib/aws_ec2/scripts/shared/functions.sh +44 -0
- data/lib/aws_ec2/setting.rb +15 -4
- data/lib/aws_ec2/template/helper/core_helper.rb +46 -7
- data/lib/aws_ec2/template/helper/ssh_key_helper.rb +1 -1
- data/lib/aws_ec2/version.rb +1 -1
- data/spec/fixtures/demo_project/config/settings.yml +22 -0
- data/spec/lib/cli_spec.rb +0 -7
- data/spec/lib/params_spec.rb +71 -0
- metadata +21 -3
- data/lib/aws_ec2/scripts/ami_creation.sh +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 479b890e45d465cd48dad82e9063f5b9ef3074ca05a47461f68ed93ce8b0fd55
|
4
|
+
data.tar.gz: 062a19ef9048e2ff0e284f97b1e1a21a7c44034642ac5639dfef53581f61c23a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e0452f43bb90b093a39e889a65b581620532ac7dc8803e70d74c5b2a0dc56da645273bcf7814aee9de09d666cc61f05305ab94132e7d745d0b69994b27d3cf3
|
7
|
+
data.tar.gz: 3731a44ca9cd7597fbee6f36cb62817ce801fb9404c26f05a7c98f8ade9303f487eca36df301e1c27f0e92d405f8e4f44ac10527fcb1ed32137c3454f865e73d
|
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,16 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [1.1.0]
|
7
|
+
- Merge pull request #5 from tongueroo/auto-terminate
|
8
|
+
- allow AWS_RDS_CODE_VERSION env variable
|
9
|
+
- restructure way scripts work for sanity
|
10
|
+
- bash scripts: ami_creation.sh and auto_terminate.sh
|
11
|
+
- support only amazonlinux2 and ubuntu
|
12
|
+
|
13
|
+
## [1.0.1]
|
14
|
+
- update ordering of the info displayed
|
15
|
+
|
6
16
|
## [1.0.0]
|
7
17
|
- Merge pull request #1 from tongueroo/cli-template-upgrade
|
8
18
|
- Merge pull request #2 from tongueroo/render_me_pretty
|
data/README.md
CHANGED
@@ -54,10 +54,10 @@ Directory | Description
|
|
54
54
|
------------- | -------------
|
55
55
|
app/helpers | Custom helpers methods. Define them as modules and their methods are made available whenever ERB is available: `profiles`, `app/scripts`, `app/user-data` files, etc. For example, you would define a `module FooHelper` in `app/helpers/foo_helper.rb`.
|
56
56
|
app/partials | Your partials that can to be included in other scripts. This is used in conjunction with the `partial` helper method. With great power comes great responsibility. It is recommended to use partials sparely to keep scripts more straightforward.
|
57
|
-
app/scripts | Where you define common scripts that can be used to configure the server. These scripts can be automatically uploaded to an s3 bucket for later downloading in your user-data script by setting the `
|
57
|
+
app/scripts | Where you define common scripts that can be used to configure the server. These scripts can be automatically uploaded to an s3 bucket for later downloading in your user-data script by setting the `s3_folder` settings option.
|
58
58
|
app/user-data | Your user-data scripts that are used to bootstrap EC2 instance.
|
59
|
-
config/[AWS_EC2_ENV].yml | The config file where you set configs that you want available in your templating logic. Examples are: `config/development.yml` and `config/production.yml`. You access the config variables with the `<%= config["var"] %>` helper.
|
60
59
|
app/user-data/layouts | user-data scripts support layouts. You user-data layouts go in here.
|
60
|
+
config/[AWS_EC2_ENV].yml | The config file where you set configs that you want available in your templating logic. Examples are: `config/development.yml` and `config/production.yml`. You access the config variables with the `<%= config["var"] %>` helper.
|
61
61
|
profiles | Your profile files. These files mainly contain parameters that are passed to the aws-sdk run_instances API method.
|
62
62
|
tmp | Where the generated scripts get compiled to. You can manually invoke the compilation via `aws-ec2 compile` to inspect what is generated. This is automatically done as part of the `aws-ec2` create command.
|
63
63
|
|
@@ -71,8 +71,9 @@ user_data | Allows you to embed a generated user_data script. More details on t
|
|
71
71
|
config | Access to the variables set in config/[AWS_EC2_ENV].yml. Examples are `config/development.yml` and `config/production.yml`.
|
72
72
|
latest_ami | Returns an AMI id by searching the AMI name pattern and sorting in reverse order. Example: `latest_ami("ruby-2.5.0_*")` would return the latest ruby AMIs are named with timestamps at the end like so: `ruby-2.5.0_2018-01-30-05-36-02` and `ruby-2.5.0_2018-01-29-05-36-02`.
|
73
73
|
search_ami | Returns a collection of AMI image objects based on a search pattern. The query searches on the AMI name.
|
74
|
+
extract_scripts | Use this in your bash script to extract the `app/scripts` files that get uploaded to s3.
|
74
75
|
|
75
|
-
For a full list of all the template helpers check out: [aws_ec2/
|
76
|
+
For a full list of all the template helpers check out: [lib/aws_ec2/template/helper](lib/aws_ec2/template/helper).
|
76
77
|
|
77
78
|
You can also define custom helpers in the `app/helpers` folder as ruby modules with the naming convention `*_helper.rb`. For example, you would define a `module FooHelper` in `app/helpers/foo_helper.rb`. Custom helpers are first-class citizens and have access to the same variables, methods, and scope as built-in helpers.
|
78
79
|
|
@@ -152,9 +153,6 @@ subnets:
|
|
152
153
|
- subnet-789
|
153
154
|
security_group_ids:
|
154
155
|
- sg-123
|
155
|
-
scripts_s3_bucket: mybucket # enables s3 uploading of generated app/scripts
|
156
|
-
# compile_clean: true # uncomment to automatically remove the
|
157
|
-
# compiled scripts in tmp after aws-ec2 create
|
158
156
|
```
|
159
157
|
|
160
158
|
The variables are accessed via the `config` helper method. Here's a filtered example where it shows the relevant part of a profile: `profiles/default.yml`:
|
@@ -167,17 +165,23 @@ subnet_id: <%= config["subnets"].shuffle %>
|
|
167
165
|
...
|
168
166
|
```
|
169
167
|
|
170
|
-
#### Config Options
|
171
|
-
|
172
|
-
There are some config options that change the behavior of the ec2-aws:
|
173
|
-
|
174
|
-
Option | Description
|
175
|
-
--- | ---
|
176
|
-
scripts_s3_bucket | Set this to the bucket name where you want the generated scripts in app/scripts and app/user-data to be uploaded to. The upload sync happens right before the internal to run_instances call that launches the instance. If you need more custom logic, you can use the `before_run_instances` hook, covered in the Hooks section.
|
177
|
-
|
178
168
|
### Settings
|
179
169
|
|
180
|
-
A `config/settings.yml` file controls the internal behavior of aws-ec2. It is different from config files which are meant for user defined varibles. Settings variables are for internal use.
|
170
|
+
A `config/settings.yml` file controls the internal behavior of aws-ec2. It is different from config files which are meant for user defined varibles. Settings variables are for internal use. Example:
|
171
|
+
|
172
|
+
```yaml
|
173
|
+
development:
|
174
|
+
# By setting s3_folder, aws-ec2 will automatically tarball and upload your scripts
|
175
|
+
# to set. You then can then use the extract_scripts helper method to download
|
176
|
+
# the scripts onto the server.
|
177
|
+
s3_folder: boltops-infra-stag/ec2
|
178
|
+
# compile_clean: true # uncomment to clean at the end of a compile
|
179
|
+
# extract_scripts:
|
180
|
+
# to: "/opt"
|
181
|
+
# as: "ec2-user"
|
182
|
+
|
183
|
+
production:
|
184
|
+
```
|
181
185
|
|
182
186
|
### Hooks
|
183
187
|
|
@@ -1,18 +1,6 @@
|
|
1
1
|
#!/bin/bash -exu
|
2
2
|
|
3
|
-
exec > >(tee "/var/log/user-data.log" | logger -t user-data -s 2>/dev/console) 2>&1
|
4
3
|
export HOME=/root # user-data env runs in weird shell where user is root but HOME is not set
|
5
|
-
<% pubkey_path = "#{ENV['HOME']}/.ssh/id_rsa.pub" -%>
|
6
|
-
<% if File.exist?(pubkey_path) -%>
|
7
|
-
<% pubkey = IO.read(pubkey_path).strip -%>
|
8
|
-
# Automatically add user's public key
|
9
|
-
echo <%= pubkey %> >> ~/.ssh/authorized_keys
|
10
|
-
echo <%= pubkey %> >> /home/ec2-user/.ssh/authorized_keys
|
11
|
-
chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys
|
12
|
-
<% else %>
|
13
|
-
# WARN: unable to find a ~/.ssh/id_rsa.pub locally on your machine. user: <%= ENV['USER'] %>
|
14
|
-
# Unable to automatically add the public key
|
15
|
-
<% end -%>
|
16
4
|
|
17
5
|
sudo yum install -y postgresql
|
18
6
|
|
data/lib/aws_ec2/cli.rb
CHANGED
@@ -3,19 +3,24 @@ module AwsEc2
|
|
3
3
|
class_option :noop, type: :boolean
|
4
4
|
class_option :profile, desc: "profile name to use"
|
5
5
|
|
6
|
+
common_options = Proc.new do
|
7
|
+
option :auto_terminate, type: :boolean, default: false, desc: "automatically terminate the instance at the end of user-data"
|
8
|
+
option :cloudwatch, type: :boolean, default: false, desc: "enable cloudwatch logging, only supported for amazonlinux"
|
9
|
+
end
|
10
|
+
|
6
11
|
desc "create NAME", "create ec2 instance"
|
7
12
|
long_desc Help.text(:create)
|
8
13
|
option :ami_name, desc: "when specified, an ami creation script is appended to the user-data script"
|
9
|
-
option :auto_terminate, type: :boolean, default: false, desc: "automatically terminate the instance at the end of user-data"
|
10
|
-
option :source_ami, desc: "override the source image_id in profile"
|
11
14
|
option :randomize, type: :boolean, desc: "append random characters to end of name"
|
15
|
+
option :source_ami, desc: "override the source image_id in profile"
|
16
|
+
common_options.call
|
12
17
|
def create(name)
|
13
18
|
Create.new(options.merge(name: name)).run
|
14
19
|
end
|
15
20
|
|
16
21
|
desc "ami NAME", "launches instance and uses it create AMI"
|
17
22
|
long_desc Help.text(:ami)
|
18
|
-
|
23
|
+
common_options.call
|
19
24
|
def ami(name)
|
20
25
|
Ami.new(options.merge(name: name)).run
|
21
26
|
end
|
data/lib/aws_ec2/core.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pathname'
|
2
|
+
require 'yaml'
|
2
3
|
|
3
4
|
module AwsEc2
|
4
5
|
module Core
|
@@ -11,10 +12,6 @@ module AwsEc2
|
|
11
12
|
Setting.new.data
|
12
13
|
end
|
13
14
|
|
14
|
-
def env
|
15
|
-
ENV['AWS_EC2_ENV'] || 'development'
|
16
|
-
end
|
17
|
-
|
18
15
|
def root
|
19
16
|
path = ENV['AWS_EC2_ROOT'] || '.'
|
20
17
|
Pathname.new(path)
|
@@ -26,5 +23,29 @@ module AwsEc2
|
|
26
23
|
exit
|
27
24
|
end
|
28
25
|
end
|
26
|
+
|
27
|
+
@@env = nil
|
28
|
+
def env
|
29
|
+
return @@env if @@env
|
30
|
+
env = env_from_profile(ENV['AWS_PROFILE']) || 'development'
|
31
|
+
env = ENV['AWS_EC2_ENV'] if ENV['AWS_EC2_ENV'] # highest precedence
|
32
|
+
@@env = env
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
# Do not use the Setting class to load the profile because it can cause an
|
37
|
+
# infinite loop then if we decide to use AwsEc2.env from within settings class.
|
38
|
+
def env_from_profile(aws_profile)
|
39
|
+
settings_path = "#{AwsEc2.root}/config/settings.yml"
|
40
|
+
return unless File.exist?(settings_path)
|
41
|
+
|
42
|
+
data = YAML.load_file(settings_path)
|
43
|
+
env = data.find do |_env, setting|
|
44
|
+
setting ||= {}
|
45
|
+
profiles = setting['aws_profiles']
|
46
|
+
profiles && profiles.include?(aws_profile)
|
47
|
+
end
|
48
|
+
env.first if env
|
49
|
+
end
|
29
50
|
end
|
30
51
|
end
|
data/lib/aws_ec2/create.rb
CHANGED
@@ -12,18 +12,19 @@ module AwsEc2
|
|
12
12
|
def run
|
13
13
|
Profile.new(@options).check!
|
14
14
|
|
15
|
-
puts "Creating EC2 instance #{@name}..."
|
16
|
-
display_info
|
17
|
-
|
18
15
|
Hook.run(:before_run_instances, @options)
|
19
16
|
sync_scripts_to_s3
|
20
17
|
|
18
|
+
puts "Creating EC2 instance #{@name.colorize(:green)}"
|
19
|
+
display_ec2_info
|
21
20
|
if @options[:noop]
|
22
21
|
puts "NOOP mode enabled. EC2 instance not created."
|
23
22
|
return
|
24
23
|
end
|
25
|
-
run_instances(params)
|
26
|
-
|
24
|
+
resp = run_instances(params)
|
25
|
+
instance_id = resp.instances.first.instance_id
|
26
|
+
display_spot_info(instance_id)
|
27
|
+
puts "EC2 instance #{@name} created: #{instance_id} 🎉"
|
27
28
|
puts "Visit https://console.aws.amazon.com/ec2/home to check on the status"
|
28
29
|
end
|
29
30
|
|
@@ -33,10 +34,11 @@ module AwsEc2
|
|
33
34
|
handle_ec2_service_error!(e)
|
34
35
|
end
|
35
36
|
|
36
|
-
# Configured by config/
|
37
|
-
# Example: config/
|
37
|
+
# Configured by config/settings.yml.
|
38
|
+
# Example: config/settings.yml:
|
38
39
|
#
|
39
|
-
#
|
40
|
+
# development:
|
41
|
+
# s3_folder: my-bucket/folder
|
40
42
|
def sync_scripts_to_s3
|
41
43
|
if AwsEc2.settings["s3_folder"]
|
42
44
|
Script::Upload.new(@options).run
|
@@ -48,7 +50,15 @@ module AwsEc2
|
|
48
50
|
@params ||= Params.new(@options).generate
|
49
51
|
end
|
50
52
|
|
51
|
-
def
|
53
|
+
def display_spot_info(instance_id)
|
54
|
+
resp = ec2.describe_instances(instance_ids: [instance_id])
|
55
|
+
spot_id = resp.reservations.first.instances.first.spot_instance_request_id
|
56
|
+
return unless spot_id
|
57
|
+
|
58
|
+
puts "Spot instance request id: #{spot_id}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def display_ec2_info
|
52
62
|
puts "Using the following parameters:"
|
53
63
|
pretty_display(params)
|
54
64
|
|
data/lib/aws_ec2/help/upload.md
CHANGED
@@ -2,8 +2,9 @@ Examples:
|
|
2
2
|
|
3
3
|
$ aws-ec2 upload
|
4
4
|
|
5
|
-
Compiles the app/scripts and app/user-data files to the tmp folder. Then uploads the files to an s3 bucket that is configured in config/
|
5
|
+
Compiles the app/scripts and app/user-data files to the tmp folder. Then uploads the files to an s3 bucket that is configured in config/settings.yml. Example s3_folder setting:
|
6
6
|
|
7
7
|
```yaml
|
8
|
-
|
8
|
+
development:
|
9
|
+
s3_folder: my-bucket/folder # enables auto sync to s3
|
9
10
|
```
|
data/lib/aws_ec2/profile.rb
CHANGED
@@ -25,7 +25,16 @@ module AwsEc2
|
|
25
25
|
|
26
26
|
puts "Using profile: #{file}".colorize(:green)
|
27
27
|
text = RenderMePretty.result(file, context: context)
|
28
|
-
|
28
|
+
begin
|
29
|
+
data = YAML.load(text)
|
30
|
+
rescue Psych::SyntaxError => e
|
31
|
+
tmp_file = file.sub("profiles", "tmp")
|
32
|
+
IO.write(tmp_file, text)
|
33
|
+
puts "There was an error evaluating in your yaml file #{file}".colorize(:red)
|
34
|
+
puts "The evaludated yaml file has been saved at #{tmp_file} for debugging."
|
35
|
+
puts "ERROR: #{e.message}"
|
36
|
+
exit 1
|
37
|
+
end
|
29
38
|
data ? data : {} # in case the file is empty
|
30
39
|
data.has_key?("run_instances") ? data["run_instances"] : data
|
31
40
|
end
|
data/lib/aws_ec2/script.rb
CHANGED
@@ -8,23 +8,39 @@ module AwsEc2
|
|
8
8
|
@options = options
|
9
9
|
end
|
10
10
|
|
11
|
+
def add_to_user_data!(user_data)
|
12
|
+
user_data
|
13
|
+
end
|
14
|
+
|
15
|
+
def auto_terminate_after_timeout
|
16
|
+
load_template("auto_terminate_after_timeout.sh")
|
17
|
+
end
|
18
|
+
|
11
19
|
def auto_terminate
|
20
|
+
# set variables for the template
|
12
21
|
@ami_name = @options[:ami_name]
|
13
22
|
load_template("auto_terminate.sh")
|
14
23
|
end
|
15
24
|
|
25
|
+
def cloudwatch
|
26
|
+
load_template("cloudwatch.sh")
|
27
|
+
end
|
28
|
+
|
16
29
|
def create_ami
|
17
|
-
# set
|
30
|
+
# set variables for the template
|
18
31
|
@ami_name = @options[:ami_name]
|
19
32
|
@region = `aws configure get region`.strip rescue 'us-east-1'
|
20
33
|
load_template("ami_creation.sh")
|
21
34
|
end
|
22
35
|
|
36
|
+
def extract_aws_ec2_scripts
|
37
|
+
load_template("extract_aws_ec2_scripts.sh")
|
38
|
+
end
|
39
|
+
|
23
40
|
private
|
24
41
|
def load_template(name)
|
25
|
-
template = IO.read(File.expand_path("
|
42
|
+
template = IO.read(File.expand_path("script/templates/#{name}", File.dirname(__FILE__)))
|
26
43
|
text = ERB.new(template, nil, "-").result(binding)
|
27
|
-
"#" * 60 + "\n#{text}"
|
28
44
|
end
|
29
45
|
end
|
30
46
|
end
|
@@ -20,14 +20,14 @@ class AwsEc2::Script
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def compile_folder(folder, layout_path=false)
|
23
|
-
puts "Compiling app/#{folder}
|
23
|
+
puts "Compiling app/#{folder} to tmp/app/#{folder}.".colorize(:green)
|
24
24
|
Dir.glob("#{AwsEc2.root}/app/#{folder}/**/*").each do |path|
|
25
25
|
next if File.directory?(path)
|
26
26
|
next if path.include?("layouts")
|
27
27
|
|
28
28
|
result = RenderMePretty.result(path, layout: layout_path, context: context)
|
29
29
|
tmp_path = path.sub(%r{.*/app/}, "#{BUILD_ROOT}/app/")
|
30
|
-
puts " #{tmp_path}"
|
30
|
+
puts " #{tmp_path}" if @options[:verbose]
|
31
31
|
FileUtils.mkdir_p(File.dirname(tmp_path))
|
32
32
|
IO.write(tmp_path, result)
|
33
33
|
end
|
@@ -4,7 +4,7 @@ class AwsEc2::Script
|
|
4
4
|
class Compress < AwsEc2::Base
|
5
5
|
def compress
|
6
6
|
reset
|
7
|
-
puts "Tarballing #{BUILD_ROOT}/app/scripts folder to scripts.tgz"
|
7
|
+
puts "Tarballing #{BUILD_ROOT}/app/scripts folder to scripts.tgz".colorize(:green)
|
8
8
|
tarball_path = create_tarball
|
9
9
|
save_scripts_info(tarball_path)
|
10
10
|
puts "Tarball created at #{tarball_path}"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/bash -eux
|
2
|
+
|
3
|
+
# Create AMI Bundle
|
4
|
+
AMI_NAME="<%= @ami_name %>"
|
5
|
+
INSTANCE_ID=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)
|
6
|
+
REGION=$(aws configure get region)
|
7
|
+
# Note this will cause the instance to reboot. Not using the --no-reboot flag
|
8
|
+
# to ensure consistent AMI creation.
|
9
|
+
SOURCE_AMI_ID=$(wget -q -O - http://169.254.169.254/latest/meta-data/ami-id)
|
10
|
+
echo "$SOURCE_AMI_ID" > /var/log/source-ami-id.txt
|
11
|
+
mkdir -p /opt/aws-ec2/data
|
12
|
+
aws ec2 create-image --name "$AMI_NAME" --instance-id "$INSTANCE_ID" --region "$REGION" > /opt/aws-ec2/data/ami-id.txt
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/bin/bash -eux
|
2
|
+
|
3
|
+
/opt/aws-ec2/auto_terminate/setup.sh
|
4
|
+
|
5
|
+
<% if @options[:auto_terminate] -%>
|
6
|
+
<% if @options[:ami_name] %>
|
7
|
+
/opt/aws-ec2/auto_terminate.sh later
|
8
|
+
<% else %>
|
9
|
+
/opt/aws-ec2/auto_terminate.sh now # terminate immediately
|
10
|
+
<% end -%>
|
11
|
+
<% end -%>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/bin/bash -eux
|
2
|
+
|
3
|
+
# Downloads and extract the scripts.
|
4
|
+
# The extracted folder from github looks like this:
|
5
|
+
# branch-name.tar.gz => aws-ec2-branch-name
|
6
|
+
# master.tar.gz => aws-ec2-master
|
7
|
+
# v1.0.0.tar.gz => aws-ec2-1.0.0
|
8
|
+
function extract_aws_ec2_scripts() {
|
9
|
+
local temp_folder
|
10
|
+
local url
|
11
|
+
local filename
|
12
|
+
|
13
|
+
rm -rf /opt/aws-ec2 # clean start
|
14
|
+
|
15
|
+
temp_folder="/opt/aws-ec2-temp"
|
16
|
+
rm -rf "$temp_folder"
|
17
|
+
mkdir -p "$temp_folder"
|
18
|
+
|
19
|
+
(
|
20
|
+
cd "$temp_folder"
|
21
|
+
|
22
|
+
<%
|
23
|
+
# Examples:
|
24
|
+
# AWS_EC2_CODE=v1.0.0
|
25
|
+
# AWS_EC2_CODE=master
|
26
|
+
# AWS_EC2_CODE=branch-name
|
27
|
+
#
|
28
|
+
# https://github.com/tongueroo/aws-ec2/archive/v1.0.0.tar.gz
|
29
|
+
# https://github.com/tongueroo/aws-ec2/archive/master.tar.gz
|
30
|
+
code_version = ENV['AWS_EC2_CODE']
|
31
|
+
code_version ||= "v#{AwsEc2::VERSION}"
|
32
|
+
%>
|
33
|
+
url="https://github.com/tongueroo/aws-ec2/archive/<%= code_version %>.tar.gz"
|
34
|
+
filename=$(basename "$url")
|
35
|
+
folder="${filename%.tar.gz}" # remove extension
|
36
|
+
folder="${folder#v}" # remove leading v character
|
37
|
+
folder="aws-ec2-$folder" # IE: aws-ec2-1.0.0
|
38
|
+
|
39
|
+
wget "$url"
|
40
|
+
tar zxf "$filename"
|
41
|
+
|
42
|
+
mv "$temp_folder/$folder/lib/aws_ec2/scripts" /opt/aws-ec2
|
43
|
+
rm -rf "$temp_folder"
|
44
|
+
chmod a+x -R /opt/aws-ec2
|
45
|
+
)
|
46
|
+
}
|
47
|
+
|
48
|
+
extract_aws_ec2_scripts
|
@@ -19,7 +19,7 @@ class AwsEc2::Script
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def upload(tarball_path)
|
22
|
-
puts "Uploading scripts.tgz (#{filesize}) to #{s3_dest}"
|
22
|
+
puts "Uploading scripts.tgz (#{filesize}) to #{s3_dest}".colorize(:green)
|
23
23
|
obj = s3_resource.bucket(bucket_name).object(key)
|
24
24
|
start_time = Time.now
|
25
25
|
if @options[:noop]
|