forger 2.0.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +40 -29
- data/README.md +6 -37
- data/docs/example/config/variables/development.rb +2 -0
- data/docs/example/profiles/default.yml +2 -2
- data/docs/extract-scripts.md +40 -0
- data/docs/layouts.md +35 -0
- data/docs/profiles.md +79 -0
- data/docs/variables.md +53 -0
- data/forger.gemspec +6 -3
- data/lib/forger.rb +4 -23
- data/lib/forger/autoloader.rb +21 -0
- data/lib/forger/aws_services.rb +22 -0
- data/lib/forger/clean.rb +0 -2
- data/lib/forger/cleaner.rb +0 -1
- data/lib/forger/cleaner/ami.rb +1 -1
- data/lib/forger/cli.rb +10 -6
- data/lib/forger/completer.rb +0 -2
- data/lib/forger/core.rb +28 -12
- data/lib/forger/create.rb +2 -23
- data/lib/forger/create/info.rb +10 -4
- data/lib/forger/create/waiter.rb +1 -1
- data/lib/forger/destroy.rb +1 -1
- data/lib/forger/help/upload.md +1 -13
- data/lib/forger/network.rb +2 -2
- data/lib/forger/new.rb +5 -6
- data/lib/forger/profile.rb +15 -3
- data/lib/forger/s3.rb +23 -0
- data/lib/forger/s3/bucket.rb +131 -0
- data/lib/forger/script.rb +0 -4
- data/lib/forger/script/upload.rb +12 -42
- data/lib/forger/scripts/cloudwatch.sh +2 -2
- data/lib/forger/scripts/shared/functions.sh +1 -1
- data/lib/forger/setting.rb +0 -32
- data/lib/forger/template.rb +0 -3
- data/lib/forger/template/context.rb +16 -1
- data/lib/forger/template/helper.rb +9 -9
- data/lib/forger/template/helper/ami_helper.rb +1 -1
- data/lib/forger/template/helper/core_helper.rb +7 -6
- data/lib/forger/template/helper/script_helper.rb +3 -9
- data/lib/forger/version.rb +1 -1
- data/lib/forger/wait.rb +0 -2
- data/lib/forger/waiter.rb +0 -1
- data/lib/forger/waiter/ami.rb +1 -1
- data/lib/templates/default/app/user_data/bootstrap.sh.tt +6 -9
- data/lib/templates/default/app/user_data/layouts/default.sh.tt +1 -5
- data/lib/templates/default/config/settings.yml.tt +1 -11
- data/lib/templates/default/config/{development.yml.tt → variables/development.yml.tt} +0 -0
- data/spec/fixtures/demo_project/app/user_data/bootstrap.sh +2 -2
- data/spec/fixtures/demo_project/config/settings.yml +2 -4
- data/spec/fixtures/demo_project/config/variables/test.rb +4 -0
- data/spec/fixtures/demo_project/profiles/default.yml +2 -2
- metadata +59 -13
- data/docs/example/config/development.yml +0 -7
- data/lib/forger/aws_service.rb +0 -7
- data/lib/forger/config.rb +0 -25
- data/spec/fixtures/demo_project/config/test.yml +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6a2c42b3903e698ada5e5ea866c96132f5de9013ab48e6a3ebab3164ef376a2
|
4
|
+
data.tar.gz: 8aee63e946e05d816eb6978d9ce3b504a50f8ae413287d181d2cf05717020078
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c8acac50ce6b424cb2dfe29069cb92b774903b8ff6d7eb07ab043a98c82ad916d8f610841f9ad1ecd18b39829903d259221f588b726bc8d80d867a9e81f80f0
|
7
|
+
data.tar.gz: 90bfbe3f61a0f05a0ac893b0250678204b25c0be844ef300f2c2d0be3df849512beac1708729fe857c4b7382310922d8e4d3c7730c73f52e201d370949a55efa
|
data/.circleci/config.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,18 @@
|
|
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
|
+
## [3.0.0]
|
7
|
+
* there are some breaking changes with this release
|
8
|
+
* automatically created a forger managed s3 bucket when extract_scripts usage detected
|
9
|
+
* `config/variables` support instead of `config/FORGER_ENV.yml` files
|
10
|
+
* variables definitions are Ruby instead of YAML
|
11
|
+
* removed config helper. use instance variables directly.
|
12
|
+
* introduced base.yml profile concept
|
13
|
+
* fix os_name and cloudwatch logging for amzn2
|
14
|
+
* cleanup: remove vars helper
|
15
|
+
* use zeitwerk for autoloading
|
16
|
+
* change aws\_profiles option to aws\_profile
|
17
|
+
|
6
18
|
## [2.0.5]
|
7
19
|
- add circle config: circleci 2.0
|
8
20
|
- use rainbow gem for terminal colors
|
data/Gemfile.lock
CHANGED
@@ -3,8 +3,10 @@ PATH
|
|
3
3
|
specs:
|
4
4
|
forger (2.0.5)
|
5
5
|
activesupport
|
6
|
+
aws-sdk-cloudformation
|
6
7
|
aws-sdk-ec2
|
7
8
|
aws-sdk-s3
|
9
|
+
cfn-status
|
8
10
|
dotenv
|
9
11
|
filesize
|
10
12
|
hashie
|
@@ -12,39 +14,47 @@ PATH
|
|
12
14
|
rainbow
|
13
15
|
render_me_pretty
|
14
16
|
thor
|
17
|
+
zeitwerk
|
15
18
|
|
16
19
|
GEM
|
17
20
|
remote: https://rubygems.org/
|
18
21
|
specs:
|
19
|
-
activesupport (
|
22
|
+
activesupport (6.0.0)
|
20
23
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
21
24
|
i18n (>= 0.7, < 2)
|
22
25
|
minitest (~> 5.1)
|
23
26
|
tzinfo (~> 1.1)
|
24
|
-
|
25
|
-
aws-
|
26
|
-
aws-
|
27
|
-
|
27
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
28
|
+
aws-eventstream (1.0.3)
|
29
|
+
aws-partitions (1.207.0)
|
30
|
+
aws-sdk-cloudformation (1.25.0)
|
31
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
32
|
+
aws-sigv4 (~> 1.1)
|
33
|
+
aws-sdk-core (3.65.1)
|
34
|
+
aws-eventstream (~> 1.0, >= 1.0.2)
|
28
35
|
aws-partitions (~> 1.0)
|
29
|
-
aws-sigv4 (~> 1.
|
36
|
+
aws-sigv4 (~> 1.1)
|
30
37
|
jmespath (~> 1.0)
|
31
|
-
aws-sdk-ec2 (1.
|
32
|
-
aws-sdk-core (~> 3, >= 3.
|
33
|
-
aws-sigv4 (~> 1.
|
34
|
-
aws-sdk-kms (1.
|
35
|
-
aws-sdk-core (~> 3, >= 3.
|
36
|
-
aws-sigv4 (~> 1.
|
37
|
-
aws-sdk-s3 (1.
|
38
|
-
aws-sdk-core (~> 3, >= 3.
|
38
|
+
aws-sdk-ec2 (1.106.0)
|
39
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
40
|
+
aws-sigv4 (~> 1.1)
|
41
|
+
aws-sdk-kms (1.24.0)
|
42
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
43
|
+
aws-sigv4 (~> 1.1)
|
44
|
+
aws-sdk-s3 (1.48.0)
|
45
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
39
46
|
aws-sdk-kms (~> 1)
|
40
|
-
aws-sigv4 (~> 1.
|
41
|
-
aws-sigv4 (1.0
|
42
|
-
|
47
|
+
aws-sigv4 (~> 1.1)
|
48
|
+
aws-sigv4 (1.1.0)
|
49
|
+
aws-eventstream (~> 1.0, >= 1.0.2)
|
50
|
+
byebug (11.0.1)
|
51
|
+
cfn-status (0.2.0)
|
52
|
+
aws-sdk-cloudformation
|
43
53
|
coderay (1.1.2)
|
44
|
-
concurrent-ruby (1.1.
|
54
|
+
concurrent-ruby (1.1.5)
|
45
55
|
diff-lcs (1.3)
|
46
|
-
dotenv (2.
|
47
|
-
ffi (1.
|
56
|
+
dotenv (2.7.5)
|
57
|
+
ffi (1.11.1)
|
48
58
|
filesize (0.2.0)
|
49
59
|
formatador (0.2.5)
|
50
60
|
guard (2.15.0)
|
@@ -66,7 +76,7 @@ GEM
|
|
66
76
|
guard-compat (~> 1.1)
|
67
77
|
rspec (>= 2.99.0, < 4.0)
|
68
78
|
hashie (3.6.0)
|
69
|
-
i18n (1.
|
79
|
+
i18n (1.6.0)
|
70
80
|
concurrent-ruby (~> 1.0)
|
71
81
|
jmespath (1.4.0)
|
72
82
|
listen (3.1.5)
|
@@ -78,18 +88,18 @@ GEM
|
|
78
88
|
method_source (0.9.2)
|
79
89
|
minitest (5.11.3)
|
80
90
|
nenv (0.3.0)
|
81
|
-
notiffany (0.1.
|
91
|
+
notiffany (0.1.3)
|
82
92
|
nenv (~> 0.1)
|
83
93
|
shellany (~> 0.0)
|
84
94
|
pry (0.12.2)
|
85
95
|
coderay (~> 1.1.0)
|
86
96
|
method_source (~> 0.9.0)
|
87
97
|
rainbow (3.0.0)
|
88
|
-
rake (12.3.
|
98
|
+
rake (12.3.3)
|
89
99
|
rb-fsevent (0.10.3)
|
90
100
|
rb-inotify (0.10.0)
|
91
101
|
ffi (~> 1.0)
|
92
|
-
render_me_pretty (0.8.
|
102
|
+
render_me_pretty (0.8.3)
|
93
103
|
activesupport
|
94
104
|
rainbow
|
95
105
|
tilt
|
@@ -97,15 +107,15 @@ GEM
|
|
97
107
|
rspec-core (~> 3.8.0)
|
98
108
|
rspec-expectations (~> 3.8.0)
|
99
109
|
rspec-mocks (~> 3.8.0)
|
100
|
-
rspec-core (3.8.
|
110
|
+
rspec-core (3.8.2)
|
101
111
|
rspec-support (~> 3.8.0)
|
102
|
-
rspec-expectations (3.8.
|
112
|
+
rspec-expectations (3.8.4)
|
103
113
|
diff-lcs (>= 1.2.0, < 2.0)
|
104
114
|
rspec-support (~> 3.8.0)
|
105
|
-
rspec-mocks (3.8.
|
115
|
+
rspec-mocks (3.8.1)
|
106
116
|
diff-lcs (>= 1.2.0, < 2.0)
|
107
117
|
rspec-support (~> 3.8.0)
|
108
|
-
rspec-support (3.8.
|
118
|
+
rspec-support (3.8.2)
|
109
119
|
ruby_dep (1.5.0)
|
110
120
|
shellany (0.0.1)
|
111
121
|
thor (0.20.3)
|
@@ -113,6 +123,7 @@ GEM
|
|
113
123
|
tilt (2.0.9)
|
114
124
|
tzinfo (1.2.5)
|
115
125
|
thread_safe (~> 0.1)
|
126
|
+
zeitwerk (2.1.9)
|
116
127
|
|
117
128
|
PLATFORMS
|
118
129
|
ruby
|
@@ -127,4 +138,4 @@ DEPENDENCIES
|
|
127
138
|
rake
|
128
139
|
|
129
140
|
BUNDLED WITH
|
130
|
-
|
141
|
+
2.0.2
|
data/README.md
CHANGED
@@ -65,7 +65,7 @@ app/partials | Your partials that can to be included in other scripts. This is
|
|
65
65
|
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.
|
66
66
|
app/user_data | Your user-data scripts that are used to bootstrap EC2 instance.
|
67
67
|
app/user_data/layouts | user-data scripts support layouts. You user-data layouts go in here.
|
68
|
-
config/[FORGER_ENV].yml | The config file where you set configs that you want available in your templating logic. Examples are: `config/development.
|
68
|
+
config/[FORGER_ENV].yml | The config file where you set configs that you want available in your templating logic. Examples are: `config/variables/development.rb` and `config/variables/production.rb`. You access the config variables with ERB `<%= @var %>`.
|
69
69
|
profiles | Your profile files. These files mainly contain parameters that are passed to the aws-sdk run_instances API method.
|
70
70
|
tmp | Where the generated scripts get compiled to. You can manually invoke the compilation via `forger compile` to inspect what is generated. This is automatically done as part of the `forger` create command.
|
71
71
|
|
@@ -76,7 +76,7 @@ You can use ERB in the profile files. Some useful helper methods are documented
|
|
76
76
|
Helper | Description
|
77
77
|
------------- | -------------
|
78
78
|
user_data | Allows you to embed a generated user_data script. More details on the user-data are provided in the user data section below.
|
79
|
-
config | Access to the variables set in config/[AWS\_EC2\_ENV].yml. Examples are `config/development.
|
79
|
+
config | Access to the variables set in config/[AWS\_EC2\_ENV].yml. Examples are `config/variables/development.rb` and `config/variables/production.rb`.
|
80
80
|
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`.
|
81
81
|
search_ami | Returns a collection of AMI image objects based on a search pattern. The query searches on the AMI name.
|
82
82
|
extract_scripts | Use this in your bash script to extract the `app/scripts` files that get uploaded to s3.
|
@@ -107,42 +107,11 @@ To use the user-data script when creating an EC2 instance, use the `user_data` h
|
|
107
107
|
|
108
108
|
### User-Data Layouts
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
```bash
|
113
|
-
#!/bin/bash
|
114
|
-
# do some setup
|
115
|
-
<%= yield %>
|
116
|
-
# finish work
|
117
|
-
```
|
118
|
-
|
119
|
-
And `app/user_data/box.sh`:
|
120
|
-
|
121
|
-
yum install -y vim
|
122
|
-
|
123
|
-
The resulting generated user-data script will be:
|
124
|
-
|
125
|
-
```bash
|
126
|
-
#!/bin/bash
|
127
|
-
# do some setup
|
128
|
-
yum install -y vim
|
129
|
-
# finish work
|
130
|
-
```
|
131
|
-
|
132
|
-
You can specify the layout to use when you call the `user_data` helper method in your profile. Example: `profiles/box.yml`:
|
133
|
-
|
134
|
-
```yaml
|
135
|
-
---
|
136
|
-
...
|
137
|
-
user_data: <%= user_data("box.sh", layout: "mylayout" ) %>
|
138
|
-
...
|
139
|
-
```
|
140
|
-
|
141
|
-
If there's a `layouts/default.sh`, then it will automatically be used without having to specify the layout option. You can disable this behavior by passing in `layout: false` or by deleting the `layouts/default.sh` file.
|
110
|
+
Refer to [docs/layouts.md](docs/layouts.md)
|
142
111
|
|
143
112
|
### Config
|
144
113
|
|
145
|
-
You can set variables in a config file and they are available when ERB is available: profiles, user-data, scripts, etc. Example `config/development.
|
114
|
+
You can set variables in a config file and they are available when ERB is available: profiles, user-data, scripts, etc. Example `config/variables/development.rb`:
|
146
115
|
|
147
116
|
```yaml
|
148
117
|
---
|
@@ -159,8 +128,8 @@ The variables are accessed via the `config` helper method. Here's a filtered exa
|
|
159
128
|
```yaml
|
160
129
|
image_id: ami-4fffc834 # Amazon Lambda AMI
|
161
130
|
instance_type: t2.medium
|
162
|
-
security_group_ids: <%=
|
163
|
-
subnet_id: <%=
|
131
|
+
security_group_ids: <%= @security_group_ids %>
|
132
|
+
subnet_id: <%= @subnets.shuffle %>
|
164
133
|
...
|
165
134
|
```
|
166
135
|
|
@@ -4,8 +4,8 @@ instance_type: t2.medium
|
|
4
4
|
key_name: default
|
5
5
|
max_count: 1
|
6
6
|
min_count: 1
|
7
|
-
security_group_ids: <%=
|
8
|
-
subnet_id: <%=
|
7
|
+
security_group_ids: <%= @security_group_ids %>
|
8
|
+
subnet_id: <%= @subnets.shuffle.first %>
|
9
9
|
user_data: "<%= user_data("bootstrap") %>"
|
10
10
|
iam_instance_profile:
|
11
11
|
name: IAMProfileName
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Extract Scripts
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
Forger supports uploading files to s3 and making them available to your the launched EC2 instances.
|
6
|
+
|
7
|
+
## How it works
|
8
|
+
|
9
|
+
1. Add your scripts to the `app/scripts` folder.
|
10
|
+
2. In your user data script you called the helper method: `extract_scripts`
|
11
|
+
|
12
|
+
The `extract_scripts` in the user_data script can look something like this:
|
13
|
+
|
14
|
+
app/user_data/bootstrap.sh:
|
15
|
+
|
16
|
+
#!/bin/bash
|
17
|
+
|
18
|
+
<%= extract_scripts(to: "/opt") %>
|
19
|
+
|
20
|
+
The generates `extract_scripts` helper, generates a snippet of bash that looks something like this:
|
21
|
+
|
22
|
+
mkdir -p /opt
|
23
|
+
aws s3 cp s3://forger-bucket-EXAMPLE/development/scripts/scripts-md5.tgz /opt/
|
24
|
+
(
|
25
|
+
cd /opt
|
26
|
+
rm -rf /opt/scripts
|
27
|
+
tar zxf /opt/scripts-md5.tgz
|
28
|
+
chmod -R a+x /opt/scripts
|
29
|
+
chown -R ec2-user:ec2-user /opt/scripts
|
30
|
+
)
|
31
|
+
|
32
|
+
It essentially extracts the scripts from the `app/scripts` to `/opt/scripts`.
|
33
|
+
|
34
|
+
## ERB Support
|
35
|
+
|
36
|
+
You can use ERB in the `app/scripts` files. So you can add dynamic logic based on ENV variables.
|
37
|
+
|
38
|
+
## S3 Bucket
|
39
|
+
|
40
|
+
Forger will automatically create the s3 bucket as needed. The s3 bucket is defined in the `forger` CloudFormation stack.
|
data/docs/layouts.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# User Data Layouts
|
2
|
+
|
3
|
+
User-data scripts support layouts. This is useful if you have common setup and finish code with your user-data scripts. Here's an example: `app/user_data/layouts/default.sh`:
|
4
|
+
|
5
|
+
```bash
|
6
|
+
#!/bin/bash
|
7
|
+
# do some setup
|
8
|
+
<%= yield %>
|
9
|
+
# finish work
|
10
|
+
```
|
11
|
+
|
12
|
+
And `app/user_data/box.sh`:
|
13
|
+
|
14
|
+
yum install -y vim
|
15
|
+
|
16
|
+
The resulting generated user-data script will be:
|
17
|
+
|
18
|
+
```bash
|
19
|
+
#!/bin/bash
|
20
|
+
# do some setup
|
21
|
+
yum install -y vim
|
22
|
+
# finish work
|
23
|
+
```
|
24
|
+
|
25
|
+
You can specify the layout to use when you call the `user_data` helper method in your profile. Example: `profiles/box.yml`:
|
26
|
+
|
27
|
+
```yaml
|
28
|
+
---
|
29
|
+
...
|
30
|
+
user_data: <%= user_data("box.sh", layout: "mylayout" ) %>
|
31
|
+
...
|
32
|
+
```
|
33
|
+
|
34
|
+
If there's a `layouts/default.sh`, then it will automatically be used without having to specify the layout option. You can disable this behavior by passing in `layout: false` or by deleting the `layouts/default.sh` file.
|
35
|
+
|
data/docs/profiles.md
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Profiles
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
The `profiles` files are YAML files that set the parameters passed to the `ec2.run_instances` API call. Example:
|
6
|
+
|
7
|
+
`profiles/box.yml`:
|
8
|
+
|
9
|
+
```yaml
|
10
|
+
---
|
11
|
+
image_id: ami-97785bed
|
12
|
+
instance_type: t2.medium
|
13
|
+
key_name: default
|
14
|
+
max_count: 1
|
15
|
+
min_count: 1
|
16
|
+
security_group_ids: <%= @security_group_ids %>
|
17
|
+
subnet_id: <%= @subnets.shuffle.first %>
|
18
|
+
user_data: "<%= user_data("bootstrap") %>"
|
19
|
+
iam_instance_profile:
|
20
|
+
name: IAMProfileName
|
21
|
+
```
|
22
|
+
|
23
|
+
The forger call to create the ec2 instance would be:
|
24
|
+
|
25
|
+
forger create box
|
26
|
+
|
27
|
+
## Base Profile
|
28
|
+
|
29
|
+
If you have multiple profiles with a common base, you can create a `profiles/base.yml` file which will have the shared settings. Example structure:
|
30
|
+
|
31
|
+
profiles
|
32
|
+
├── base.yml
|
33
|
+
├── box.yml
|
34
|
+
└── test.yml
|
35
|
+
|
36
|
+
The `base.yml` gets merged with `box.yml`.
|
37
|
+
The `base.yml` also gets merged with `test.yml`.
|
38
|
+
|
39
|
+
### Examples
|
40
|
+
|
41
|
+
profiles/base.yml:
|
42
|
+
|
43
|
+
```yaml
|
44
|
+
---
|
45
|
+
instance_type: t2.medium
|
46
|
+
key_name: default
|
47
|
+
max_count: 1
|
48
|
+
min_count: 1
|
49
|
+
security_group_ids: <%= @security_group_ids %>
|
50
|
+
subnet_id: <%= @subnets.shuffle.first %>
|
51
|
+
iam_instance_profile:
|
52
|
+
name: IAMProfileName
|
53
|
+
```
|
54
|
+
|
55
|
+
profiles/box.yml:
|
56
|
+
|
57
|
+
```yaml
|
58
|
+
---
|
59
|
+
image_id: ami-1111111
|
60
|
+
user_data: "<%= user_data("box") %>"
|
61
|
+
```
|
62
|
+
|
63
|
+
profiles/test.yml:
|
64
|
+
|
65
|
+
```yaml
|
66
|
+
---
|
67
|
+
image_id: ami-2222222
|
68
|
+
user_data: "<%= user_data("test") %>"
|
69
|
+
```
|
70
|
+
|
71
|
+
## Profile Conventions
|
72
|
+
|
73
|
+
By convention the profile file will be same as the name to you pass to the the `forger create NAME`. So
|
74
|
+
|
75
|
+
forger create box
|
76
|
+
|
77
|
+
Automatically matches to the `profiles/box.yml`. If you need to override the convention you can use the `--profile` option. Example:
|
78
|
+
|
79
|
+
forger create box-2 --profile box
|
data/docs/variables.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Variables
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
You can create variables that are accessible in the `app/scripts` and `profiles` files. You define the variables in the `config/variables/FORGER_ENV.rb` files.
|
6
|
+
|
7
|
+
## Structure
|
8
|
+
|
9
|
+
config
|
10
|
+
└── variables
|
11
|
+
├── base.rb
|
12
|
+
├── development.rb
|
13
|
+
└── production.rb
|
14
|
+
|
15
|
+
## Variable Definitions
|
16
|
+
|
17
|
+
Examples of variables definitions:
|
18
|
+
|
19
|
+
config/variables/base.rb:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
@keypair = "my-keypair-1"
|
23
|
+
```
|
24
|
+
|
25
|
+
config/variables/development.rb:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
---
|
29
|
+
instance_type: t2.medium
|
30
|
+
key_name: default
|
31
|
+
max_count: 1
|
32
|
+
min_count: 1
|
33
|
+
security_group_ids: <%= @security_group_ids %>
|
34
|
+
subnet_id: <%= @subnets.shuffle.first %>
|
35
|
+
iam_instance_profile:
|
36
|
+
name: IAMProfileName
|
37
|
+
```
|
38
|
+
|
39
|
+
## Variables Layering
|
40
|
+
|
41
|
+
The variable files are layered together. The base.rb variable file always get evaulated. Then environment specific variables get evaluated according to the `FORGER_ENV` value. For example, `FORGER_ENV=development` results in `config/variables/development.rb` getting used.
|
42
|
+
|
43
|
+
## Accessing Variables
|
44
|
+
|
45
|
+
You access the variables files with ERB. Example:
|
46
|
+
|
47
|
+
profiles/server.yml:
|
48
|
+
|
49
|
+
```yaml
|
50
|
+
---
|
51
|
+
security_group_ids: <%= @security_group_ids %>
|
52
|
+
subnet_id: <%= @subnets.shuffle.first %>
|
53
|
+
```
|