rubycfn 0.4.10 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -1
- data/Gemfile.lock +48 -46
- data/README.md +46 -71
- data/bin/rubycfn +17 -73
- data/lib/cli_methods.rb +2 -2
- data/lib/rubycfn/version.rb +1 -1
- data/rubycfn.gemspec +1 -1
- data/templates/.env +2 -0
- data/templates/.env.acceptance +1 -0
- data/templates/.env.dependencies.rspec +6 -0
- data/templates/.env.development +1 -0
- data/templates/.env.production +1 -0
- data/templates/.env.rspec +1 -0
- data/templates/.env.test +1 -0
- data/templates/{.gitignore.erb → .gitignore} +7 -0
- data/templates/{.rubocop.yml.erb → .rubocop.yml} +17 -1
- data/templates/{Gemfile.erb → Gemfile} +0 -1
- data/templates/README.md +58 -0
- data/templates/{Rakefile.erb → Rakefile} +15 -8
- data/templates/config.yaml +68 -0
- data/templates/lib/aws_helper/aws_sdk.rb +30 -0
- data/templates/{compiler.rb.erb → lib/aws_helper/compiler.rb} +15 -9
- data/templates/lib/aws_helper/dependencies.rb +35 -0
- data/templates/{deploy.rb.erb → lib/aws_helper/deploy.rb} +5 -4
- data/templates/lib/aws_helper/helpers.rb +3 -0
- data/templates/{main_aws_helper.rb.erb → lib/aws_helper/main.rb} +0 -0
- data/templates/{upload_stack.rb.erb → lib/aws_helper/upload_stack.rb} +8 -6
- data/templates/lib/core/applications.rb +625 -0
- data/templates/lib/core/assume_role.rb +40 -0
- data/templates/lib/core/classes.rb +25 -0
- data/templates/{core_compile.rb.erb → lib/core/compile.rb} +1 -0
- data/templates/lib/core/dependencies.rb +29 -0
- data/templates/{core_deploy.rb.erb → lib/core/deploy.rb} +20 -10
- data/templates/lib/core/git.rb +15 -0
- data/templates/lib/core/init.rb +221 -0
- data/templates/{core_upload.rb.erb → lib/core/upload.rb} +0 -0
- data/templates/{main.rb.erb → lib/main.rb} +8 -6
- data/templates/lib/shared_concerns/global_variables.rb +56 -0
- data/templates/{helper_methods.rb.erb → lib/shared_concerns/helper_functions.rb} +0 -0
- data/templates/lib/shared_concerns/helper_methods.rb +3 -0
- data/templates/{shared_methods.rb.erb → lib/shared_concerns/shared_methods.rb} +11 -0
- data/templates/lib/stacks/acm_stack/certificate_manager.rb +79 -0
- data/templates/{new_stack.rb.erb → lib/stacks/acm_stack/main.rb} +3 -4
- data/templates/lib/stacks/ecs_stack/ecs_cluster.rb +344 -0
- data/templates/lib/stacks/ecs_stack/lifecycle_hook.rb +190 -0
- data/templates/lib/stacks/ecs_stack/load_balancer.rb +70 -0
- data/templates/{ecs_stack.rb.erb → lib/stacks/ecs_stack/main.rb} +3 -0
- data/templates/lib/stacks/ecs_stack/rollback.rb +77 -0
- data/templates/{project_stack.rb.erb → lib/stacks/parent_stack/main.rb} +2 -2
- data/templates/lib/stacks/parent_stack/parent.rb +18 -0
- data/templates/lib/stacks/vpc_stack/infra_vpc.rb +193 -0
- data/templates/{vpc_stack.rb.erb → lib/stacks/vpc_stack/main.rb} +1 -2
- data/templates/{parent_stack_spec.rb.erb → spec/lib/parent_spec.rb} +2 -5
- data/templates/{spec_helper.rb.erb → spec/spec_helper.rb} +2 -2
- metadata +61 -51
- data/format.vim +0 -3
- data/templates/.env.erb +0 -4
- data/templates/.env.production.erb +0 -6
- data/templates/.env.rspec.erb +0 -6
- data/templates/.env.test.erb +0 -6
- data/templates/.gitlab-ci.yml.erb +0 -75
- data/templates/aws_sdk.rb.erb +0 -18
- data/templates/core_diff.rb.erb +0 -59
- data/templates/dependencies.rb.erb +0 -23
- data/templates/ecs_stack_concern.rb.erb +0 -20
- data/templates/global_variables.rb.erb +0 -16
- data/templates/helpers.rb.erb +0 -7
- data/templates/new_concern.rb.erb +0 -10
- data/templates/project_concern.rb.erb +0 -26
- data/templates/subnets.rb.erb +0 -18
- data/templates/vpc_concerns.rb.erb +0 -87
- data/templates/vpc_spec.rb.erb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83de34bc40509c9a8425856cbc70eac67efb38eeb7441e6710fd2490abc70779
|
4
|
+
data.tar.gz: f8f01c6a27922524362b59aef01d05841d3247c46874caf8cfa2c944ee7441e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7082ea8b1a3f7b3a23406898614fd08c5af073889c13b1101a5b2580e9025881443f91ce5ceb81141508a06bf943ec3c1c4ed9ab754c51a56fd324fc6c659106
|
7
|
+
data.tar.gz: c735c3327552fbfea5417ab18442dc2829a7fc05d94a4687af942a8f70ba2e0e5b94d7da66f2b27ebdac278d430da54b606b328706ae215c6cc114b33d0122e1
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,28 @@
|
|
2
2
|
All notable changes to Rubycfn will be documented in this file.
|
3
3
|
This project uses [Semantic Versioning](http://semver.org/).
|
4
4
|
|
5
|
-
## 0.4
|
5
|
+
## 0.5.4 (Next Release)
|
6
|
+
|
7
|
+
## 0.5.3
|
8
|
+
|
9
|
+
* Improved code quality in templated files -- [@dennisvink][@dennisvink]
|
10
|
+
|
11
|
+
## 0.5.2
|
12
|
+
|
13
|
+
* Fixed bug in lib/core/dependencies.rb that incorrectly raised error -- [@dennisvink][@dennisvink]
|
14
|
+
|
15
|
+
## 0.5.1
|
16
|
+
|
17
|
+
* Added descriptive error messages for common errors -- [@dennisvink][@dennisvink]
|
18
|
+
* Allow `rake compile` to succeed with mock .env.dependency.rspec values -- [@dennisvink][@dennisvink]
|
19
|
+
* Added `rake update` command -- [@dennisvink][@dennisvink]
|
20
|
+
* Removed a stray unused variable in template code -- [@dennisvink][@dennisvink]
|
21
|
+
* Update README.md -- [@dennisvink][@dennisvink]
|
22
|
+
|
23
|
+
## 0.5.0
|
24
|
+
|
25
|
+
* Restructuring project -- [@dennisvink][@dennisvink]
|
26
|
+
* Disabled scaffolding -- [@dennisvink][@dennisvink]
|
6
27
|
|
7
28
|
## 0.4.10
|
8
29
|
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubycfn (0.
|
4
|
+
rubycfn (0.5.3)
|
5
5
|
activesupport (~> 5.1.5)
|
6
6
|
dotenv (~> 2.4.0)
|
7
|
-
json (~> 2.
|
7
|
+
json (~> 2.3.0)
|
8
8
|
neatjson (~> 0.8.4)
|
9
9
|
tty-prompt (~> 0.16.0)
|
10
10
|
|
@@ -16,20 +16,20 @@ GEM
|
|
16
16
|
i18n (>= 0.7, < 2)
|
17
17
|
minitest (~> 5.1)
|
18
18
|
tzinfo (~> 1.1)
|
19
|
-
addressable (2.
|
19
|
+
addressable (2.8.0)
|
20
20
|
public_suffix (>= 2.0.2, < 5.0)
|
21
|
-
awesome_print (1.
|
22
|
-
coderay (1.1.
|
23
|
-
concurrent-ruby (1.1.
|
24
|
-
diff-lcs (1.
|
25
|
-
docile (1.
|
21
|
+
awesome_print (1.9.2)
|
22
|
+
coderay (1.1.3)
|
23
|
+
concurrent-ruby (1.1.9)
|
24
|
+
diff-lcs (1.4.4)
|
25
|
+
docile (1.4.0)
|
26
26
|
dotenv (2.4.0)
|
27
|
-
equatable (0.
|
28
|
-
ffi (1.
|
29
|
-
formatador (0.
|
30
|
-
given_core (3.8.
|
27
|
+
equatable (0.7.0)
|
28
|
+
ffi (1.15.3)
|
29
|
+
formatador (0.3.0)
|
30
|
+
given_core (3.8.2)
|
31
31
|
sorcerer (>= 0.3.7)
|
32
|
-
guard (2.
|
32
|
+
guard (2.17.0)
|
33
33
|
formatador (>= 0.2.4)
|
34
34
|
listen (>= 2.7, < 4.0)
|
35
35
|
lumberjack (>= 1.0.12, < 2.0)
|
@@ -43,65 +43,67 @@ GEM
|
|
43
43
|
guard (~> 2.1)
|
44
44
|
guard-compat (~> 1.1)
|
45
45
|
rspec (>= 2.99.0, < 4.0)
|
46
|
-
i18n (1.8.
|
46
|
+
i18n (1.8.10)
|
47
47
|
concurrent-ruby (~> 1.0)
|
48
|
-
json (2.1
|
48
|
+
json (2.3.1)
|
49
49
|
launchy (2.5.0)
|
50
50
|
addressable (~> 2.7)
|
51
|
-
listen (3.
|
51
|
+
listen (3.5.1)
|
52
52
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
53
53
|
rb-inotify (~> 0.9, >= 0.9.10)
|
54
|
-
lumberjack (1.2.
|
55
|
-
method_source (0.
|
56
|
-
minitest (5.14.
|
54
|
+
lumberjack (1.2.8)
|
55
|
+
method_source (1.0.0)
|
56
|
+
minitest (5.14.4)
|
57
57
|
neatjson (0.8.4)
|
58
58
|
necromancer (0.4.0)
|
59
59
|
nenv (0.3.0)
|
60
60
|
notiffany (0.1.3)
|
61
61
|
nenv (~> 0.1)
|
62
62
|
shellany (~> 0.0)
|
63
|
-
pastel (0.7.
|
63
|
+
pastel (0.7.4)
|
64
64
|
equatable (~> 0.6)
|
65
65
|
tty-color (~> 0.5)
|
66
|
-
pry (0.
|
67
|
-
coderay (~> 1.1
|
68
|
-
method_source (~>
|
69
|
-
public_suffix (4.0.
|
70
|
-
rake (13.0.
|
71
|
-
rb-fsevent (0.
|
66
|
+
pry (0.14.1)
|
67
|
+
coderay (~> 1.1)
|
68
|
+
method_source (~> 1.0)
|
69
|
+
public_suffix (4.0.6)
|
70
|
+
rake (13.0.4)
|
71
|
+
rb-fsevent (0.11.0)
|
72
72
|
rb-inotify (0.10.1)
|
73
73
|
ffi (~> 1.0)
|
74
|
-
rspec (3.
|
75
|
-
rspec-core (~> 3.
|
76
|
-
rspec-expectations (~> 3.
|
77
|
-
rspec-mocks (~> 3.
|
78
|
-
rspec-core (3.
|
79
|
-
rspec-support (~> 3.
|
80
|
-
rspec-expectations (3.
|
74
|
+
rspec (3.10.0)
|
75
|
+
rspec-core (~> 3.10.0)
|
76
|
+
rspec-expectations (~> 3.10.0)
|
77
|
+
rspec-mocks (~> 3.10.0)
|
78
|
+
rspec-core (3.10.1)
|
79
|
+
rspec-support (~> 3.10.0)
|
80
|
+
rspec-expectations (3.10.1)
|
81
81
|
diff-lcs (>= 1.2.0, < 2.0)
|
82
|
-
rspec-support (~> 3.
|
83
|
-
rspec-given (3.8.
|
84
|
-
given_core (= 3.8.
|
82
|
+
rspec-support (~> 3.10.0)
|
83
|
+
rspec-given (3.8.2)
|
84
|
+
given_core (= 3.8.2)
|
85
85
|
rspec (>= 2.14.0)
|
86
86
|
rspec-its (1.3.0)
|
87
87
|
rspec-core (>= 3.0.0)
|
88
88
|
rspec-expectations (>= 3.0.0)
|
89
|
-
rspec-mocks (3.
|
89
|
+
rspec-mocks (3.10.2)
|
90
90
|
diff-lcs (>= 1.2.0, < 2.0)
|
91
|
-
rspec-support (~> 3.
|
92
|
-
rspec-support (3.
|
91
|
+
rspec-support (~> 3.10.0)
|
92
|
+
rspec-support (3.10.2)
|
93
93
|
rspec_junit_formatter (0.4.1)
|
94
94
|
rspec-core (>= 2, < 4, != 2.12.0)
|
95
95
|
shellany (0.0.1)
|
96
|
-
simplecov (0.
|
96
|
+
simplecov (0.21.2)
|
97
97
|
docile (~> 1.1)
|
98
98
|
simplecov-html (~> 0.11)
|
99
|
-
|
99
|
+
simplecov_json_formatter (~> 0.1)
|
100
|
+
simplecov-html (0.12.3)
|
101
|
+
simplecov_json_formatter (0.1.3)
|
100
102
|
sorcerer (2.0.1)
|
101
|
-
thor (1.0
|
103
|
+
thor (1.1.0)
|
102
104
|
thread_safe (0.3.6)
|
103
|
-
timers (4.3.
|
104
|
-
tty-color (0.
|
105
|
+
timers (4.3.3)
|
106
|
+
tty-color (0.6.0)
|
105
107
|
tty-cursor (0.5.0)
|
106
108
|
tty-prompt (0.16.1)
|
107
109
|
necromancer (~> 0.4.0)
|
@@ -114,7 +116,7 @@ GEM
|
|
114
116
|
tty-screen (~> 0.6.4)
|
115
117
|
wisper (~> 2.0.0)
|
116
118
|
tty-screen (0.6.5)
|
117
|
-
tzinfo (1.2.
|
119
|
+
tzinfo (1.2.9)
|
118
120
|
thread_safe (~> 0.1)
|
119
121
|
wisper (2.0.1)
|
120
122
|
|
@@ -137,4 +139,4 @@ DEPENDENCIES
|
|
137
139
|
simplecov (~> 0.9)
|
138
140
|
|
139
141
|
BUNDLED WITH
|
140
|
-
2.
|
142
|
+
2.2.22
|
data/README.md
CHANGED
@@ -61,7 +61,7 @@ __________ ____ __________________.___._________ _____________________
|
|
61
61
|
| _/ | /| | _// | |/ \ \/ | __) | | _/
|
62
62
|
| | \ | / | | \\____ |\ \____| \ | | \
|
63
63
|
|____|_ /______/ |______ // ______| \______ /\___ / |______ /
|
64
|
-
\/ \/ \/ \/ \/ \/ [v0.
|
64
|
+
\/ \/ \/ \/ \/ \/ [v0.5.3]
|
65
65
|
Project name? example
|
66
66
|
Account ID? 1234567890
|
67
67
|
Select region EU (Frankfurt)
|
@@ -75,6 +75,9 @@ Installing project dependencies:
|
|
75
75
|
Updating project dependencies:
|
76
76
|
`bundle update`
|
77
77
|
|
78
|
+
Deploying dependency stack to AWS:
|
79
|
+
`rake init`
|
80
|
+
|
78
81
|
Compiling Rubycfn project:
|
79
82
|
`rake compile`
|
80
83
|
|
@@ -87,9 +90,6 @@ Running tests and compiling:
|
|
87
90
|
Uploading built stacks to s3:
|
88
91
|
`rake upload`
|
89
92
|
|
90
|
-
Checking difference between local and remote stack:
|
91
|
-
`rake diff`
|
92
|
-
|
93
93
|
Deploying stack to AWS:
|
94
94
|
`rake apply`
|
95
95
|
|
@@ -98,21 +98,23 @@ Deploying stack to AWS:
|
|
98
98
|
A new Rubycfn project has the following structure:
|
99
99
|
|
100
100
|
```
|
101
|
-
|
102
|
-
drwxr-xr-x
|
103
|
-
drwxr-xr-x
|
104
|
-
-rw-r--r-- 1 dennis staff
|
105
|
-
-rw-r--r-- 1 dennis staff
|
106
|
-
-rw-r--r-- 1 dennis staff
|
107
|
-
-rw-r--r-- 1 dennis staff
|
108
|
-
|
109
|
-
-rw-r--r-- 1 dennis staff
|
110
|
-
-rw-r--r-- 1 dennis staff
|
111
|
-
-rw-r--r-- 1 dennis staff
|
112
|
-
-rw-r--r-- 1 dennis staff
|
113
|
-
|
114
|
-
|
115
|
-
|
101
|
+
drwxr-xr-x 3 dennis staff 96 Mar 4 02:43 bootstrap
|
102
|
+
drwxr-xr-x 7 dennis staff 224 Mar 4 02:43 lib
|
103
|
+
drwxr-xr-x 4 dennis staff 128 Mar 4 02:43 spec
|
104
|
+
-rw-r--r-- 1 dennis staff 49 Mar 4 02:43 .env
|
105
|
+
-rw-r--r-- 1 dennis staff 31 Mar 4 02:43 .env.acceptance
|
106
|
+
-rw-r--r-- 1 dennis staff 279 Mar 4 02:43 .env.dependencies.rspec
|
107
|
+
-rw-r--r-- 1 dennis staff 32 Mar 4 02:43 .env.development
|
108
|
+
-rw-r--r-- 1 dennis staff 31 Mar 4 02:43 .env.production
|
109
|
+
-rw-r--r-- 1 dennis staff 33 Mar 4 02:43 .env.rspec
|
110
|
+
-rw-r--r-- 1 dennis staff 25 Mar 4 02:43 .env.test
|
111
|
+
-rw-r--r-- 1 dennis staff 1110 Mar 4 02:43 .gitignore
|
112
|
+
-rw-r--r-- 1 dennis staff 1524 Mar 4 02:43 .rubocop.yml
|
113
|
+
-rw-r--r-- 1 dennis staff 477 Mar 4 02:43 Gemfile
|
114
|
+
-rw-r--r-- 1 dennis staff 31603 Mar 4 02:43 Gemfile.lock
|
115
|
+
-rw-r--r-- 1 dennis staff 292 Mar 4 02:43 README.md
|
116
|
+
-rw-r--r-- 1 dennis staff 1267 Mar 4 02:43 Rakefile
|
117
|
+
-rw-r--r-- 1 dennis staff 1337 Mar 4 02:43 config.yaml
|
116
118
|
```
|
117
119
|
|
118
120
|
Lets first discuss the files in the root folder.
|
@@ -134,15 +136,13 @@ The `.env` file contains environment variables that are available, regardless of
|
|
134
136
|
the environment you're building for. For example:
|
135
137
|
|
136
138
|
```
|
137
|
-
AWS_ACCOUNT_ID="1234567890"
|
138
139
|
AWS_REGION="eu-west-1"
|
139
|
-
ENVIRONMENT="
|
140
|
-
PROJECT_NAME="sample"
|
140
|
+
ENVIRONMENT="development"
|
141
141
|
```
|
142
142
|
|
143
143
|
#### .env.production and .env.test
|
144
144
|
|
145
|
-
The `.env.production` and `.env.
|
145
|
+
The `.env.production` and `.env.x` files contain environment variables that
|
146
146
|
are specific to production or test respectively. For example `.env.test` can
|
147
147
|
contain something like this:
|
148
148
|
|
@@ -150,20 +150,6 @@ contain something like this:
|
|
150
150
|
# ENV vars for test environment
|
151
151
|
CLOUD_TRAIL_MONITOR_SNS_RECIPIENTS="changeme@example.com,changemetoo@example.com"
|
152
152
|
ROOT_MONITOR_SNS_RECIPIENTS="changeme@example.com,changemetoo@example.com"
|
153
|
-
VPC_CIDR_BLOCK="10.100.0.0/16"
|
154
|
-
ARTIFACT_BUCKET="my-awesome-cloudformation-artifact-bucket"
|
155
|
-
STACK_NAME="test"
|
156
|
-
```
|
157
|
-
|
158
|
-
While .env.production can look something like this:
|
159
|
-
|
160
|
-
```
|
161
|
-
# ENV vars for production environment
|
162
|
-
CLOUD_TRAIL_MONITOR_SNS_RECIPIENTS="changeme@example.com,changemetoo@example.com"
|
163
|
-
ROOT_MONITOR_SNS_RECIPIENTS="changeme@example.com,changemetoo@example.com"
|
164
|
-
VPC_CIDR_BLOCK="10.200.0.0/16"
|
165
|
-
ARTIFACT_BUCKET="my-awesome-cloudformation-artifact-bucket-for-production"
|
166
|
-
STACK_NAME="production"
|
167
153
|
```
|
168
154
|
|
169
155
|
You can reuse these environment variables in your project code.
|
@@ -173,12 +159,11 @@ You can reuse these environment variables in your project code.
|
|
173
159
|
The `.env.rspec` is used when running unit tests. It contains mock variables
|
174
160
|
so that you can test the resulting CloudFormation templates properly.
|
175
161
|
|
176
|
-
#### The
|
162
|
+
#### The .env.private file
|
177
163
|
|
178
|
-
|
179
|
-
|
180
|
-
environment variables
|
181
|
-
precedence over environment variables set in other .env* files.
|
164
|
+
This is a special file that allows you to override environment variables.
|
165
|
+
An environment variable set in .env.private always takes precedence over
|
166
|
+
environment variables set in other .env files.
|
182
167
|
|
183
168
|
#### .rubocop.yml
|
184
169
|
|
@@ -188,12 +173,12 @@ violations.
|
|
188
173
|
|
189
174
|
### Rubycfn project directories
|
190
175
|
|
191
|
-
As shown before, a Rubycfn project contains
|
176
|
+
As shown before, a Rubycfn project contains four directories:
|
192
177
|
|
193
178
|
```
|
194
|
-
drwxr-xr-x
|
195
|
-
drwxr-xr-x 7 dennis staff 224
|
196
|
-
drwxr-xr-x 4 dennis staff 128
|
179
|
+
drwxr-xr-x 3 dennis staff 96 Mar 4 02:43 bootstrap
|
180
|
+
drwxr-xr-x 7 dennis staff 224 Mar 4 02:43 lib
|
181
|
+
drwxr-xr-x 4 dennis staff 128 Mar 4 02:43 spec
|
197
182
|
```
|
198
183
|
|
199
184
|
#### build
|
@@ -247,39 +232,33 @@ that you want to reuse cross stacks, create a shared concern.
|
|
247
232
|
The `stacks` folder, by default, contains the following:
|
248
233
|
|
249
234
|
```
|
250
|
-
|
251
|
-
drwxr-xr-x
|
252
|
-
drwxr-xr-x
|
253
|
-
drwxr-xr-x
|
254
|
-
-rw-r--r-- 1 dennis staff 254 Jul 15 20:43 ecs_stack.rb
|
255
|
-
drwxr-xr-x 3 dennis staff 96 Jul 15 20:43 parent_stack
|
256
|
-
-rw-r--r-- 1 dennis staff 259 Jul 15 20:43 parent_stack.rb
|
257
|
-
drwxr-xr-x 4 dennis staff 128 Jul 15 20:43 vpc_stack
|
258
|
-
-rw-r--r-- 1 dennis staff 248 Jul 15 20:43 vpc_stack.rb
|
235
|
+
drwxr-xr-x 4 dennis staff 128 Mar 4 02:43 acm_stack
|
236
|
+
drwxr-xr-x 6 dennis staff 192 Mar 4 02:43 ecs_stack
|
237
|
+
drwxr-xr-x 4 dennis staff 128 Mar 4 02:43 parent_stack
|
238
|
+
drwxr-xr-x 4 dennis staff 128 Mar 4 02:43 vpc_stack
|
259
239
|
```
|
260
240
|
|
261
|
-
The default project creates
|
262
|
-
ECS stack and a parent stack. The parent stack is a CloudFormation
|
263
|
-
contains all other stacks. When you deploy a Rubycfn project these other
|
264
|
-
show up as `nested stacks`. The parent stack acts not only as a container for
|
241
|
+
The default project creates four CloudFormation templates: a VPC stack, an
|
242
|
+
ECS stack, an ACM stack and a parent stack. The parent stack is a CloudFormation
|
243
|
+
stack that contains all other stacks. When you deploy a Rubycfn project these other
|
244
|
+
stacks show up as `nested stacks`. The parent stack acts not only as a container for
|
265
245
|
all other stacks, but is also responsible for passing outputs from stacks as
|
266
246
|
parameters to another. For example: The VPC Id that is created in the VPC stack
|
267
247
|
can easily be passed to the ECS stack as a parameter. This nested stack approach
|
268
248
|
has an additional benefit: A change of output in stack X can trigger an update
|
269
249
|
in stack Y.
|
270
250
|
|
271
|
-
The
|
272
|
-
Lets have a look at
|
251
|
+
The lib/stacks/vpc_stack/ directory contains a `main.rb` file and a `vpc.rb` file.
|
252
|
+
Lets have a look at the vpc_stack/main.rb file:
|
273
253
|
|
274
254
|
```ruby
|
275
255
|
module VpcStack
|
276
256
|
extend ActiveSupport::Concern
|
277
257
|
include Rubycfn
|
278
|
-
|
279
258
|
included do
|
280
259
|
include Concerns::GlobalVariables
|
281
260
|
include Concerns::SharedMethods
|
282
|
-
include VpcStack::
|
261
|
+
include VpcStack::InfraVpc
|
283
262
|
|
284
263
|
description generate_stack_description("VpcStack")
|
285
264
|
end
|
@@ -291,14 +270,14 @@ name ends with 'Stack' to make the compiler magic work. The code between
|
|
291
270
|
`include do` and `end` loads in two of the shared concerns, and includes the
|
292
271
|
VpcStack::Main module. Finally the description of the stack is set.
|
293
272
|
|
294
|
-
The `lib/stacks/vpc_stack
|
295
|
-
|
273
|
+
The `lib/stacks/vpc_stack/vpc.rb` file contains the implementation of the
|
274
|
+
VpcStack::InfraVpc module:
|
296
275
|
|
297
276
|
```ruby
|
298
277
|
require_relative "subnets"
|
299
278
|
|
300
279
|
module VpcStack
|
301
|
-
module
|
280
|
+
module InfraVpc
|
302
281
|
extend ActiveSupport::Concern
|
303
282
|
|
304
283
|
included do
|
@@ -310,13 +289,9 @@ end
|
|
310
289
|
|
311
290
|
The first line is identical to the parent stack file and defines this module is
|
312
291
|
part of `VpcStack`. The second line defines the name of the module, in this case
|
313
|
-
`
|
292
|
+
`InfraVpc`. The code beteen `included do` and `end` is the implementation of this
|
314
293
|
module.
|
315
294
|
|
316
|
-
Adding a new stack is trivial: Go to the root folder of the project and type
|
317
|
-
`rubycfn stack`. This will prompt you for a stack name (do not include the 'stack' keyword)
|
318
|
-
and it will generate the stack for you.
|
319
|
-
|
320
295
|
## AWS Intrinsic functions
|
321
296
|
|
322
297
|
You can Ref by postpending the .ref method to any string or hash, e.g. :foobar.ref
|
data/bin/rubycfn
CHANGED
@@ -13,7 +13,7 @@ if ARGV.first || (ARGF.filename != "-" or (not STDIN.tty? and not STDIN.closed?)
|
|
13
13
|
if ARGV.class == Array && ARGV.first == "stack"
|
14
14
|
case ARGV.first
|
15
15
|
when "stack"
|
16
|
-
|
16
|
+
puts "Scaffolding will be reintroduced later."
|
17
17
|
end
|
18
18
|
else
|
19
19
|
require "rubycfn"
|
@@ -61,85 +61,29 @@ region = prompt.select(
|
|
61
61
|
)
|
62
62
|
|
63
63
|
render_args = {
|
64
|
-
project_name: project_name,
|
65
64
|
account_id: account_id,
|
66
|
-
|
65
|
+
project_name: project_name,
|
66
|
+
region: region,
|
67
|
+
version: Rubycfn::VERSION
|
67
68
|
}
|
68
69
|
|
69
|
-
|
70
|
-
aws_sdk = render("aws_sdk.rb", {}, path)
|
71
|
-
compiler = render("compiler.rb", {}, path)
|
72
|
-
core_deploy = render("core_deploy.rb", { name: project_name }, path)
|
73
|
-
core_upload = render("core_upload.rb", {}, path)
|
74
|
-
core_compile = render("core_compile.rb", {}, path)
|
75
|
-
core_diff = render("core_diff.rb", {}, path)
|
76
|
-
dependencies = render("dependencies.rb", {}, path)
|
77
|
-
deploy = render("deploy.rb", {}, path)
|
78
|
-
dotenv_test = render(".env.test", { name: project_name }, path)
|
79
|
-
dotenv_production = render(".env.production", { name: project_name }, path)
|
80
|
-
dotenv_rspec = render(".env.rspec", { name: project_name }, path)
|
81
|
-
ecs_stack = render("ecs_stack.rb", {}, path)
|
82
|
-
ecs_stack_concern = render("ecs_stack_concern.rb", { name: project_name }, path)
|
83
|
-
gemfile = render("Gemfile", { version: Rubycfn::VERSION }, path)
|
84
|
-
gitignore = render(".gitignore", {}, path)
|
85
|
-
global_variables = render("global_variables.rb", { name: project_name.downcase }, path)
|
86
|
-
helpers = render("helpers.rb", {}, path)
|
87
|
-
helper_methods = render("helper_methods.rb", {}, path)
|
88
|
-
main = render("main.rb", {}, path)
|
89
|
-
main_aws_helper = render("main_aws_helper.rb", {}, path)
|
90
|
-
parent_spec = render("parent_stack_spec.rb", { name: project_name.capitalize }, path)
|
91
|
-
project_concern = render("project_concern.rb", { name: project_name.capitalize }, path)
|
92
|
-
project_stack = render("project_stack.rb", { name: project_name.capitalize }, path)
|
93
|
-
rakefile = render("Rakefile", {}, path)
|
94
|
-
rubocop = render(".rubocop.yml", {}, path)
|
95
|
-
shared_methods = render("shared_methods.rb", {}, path)
|
96
|
-
spec_helper = render("spec_helper.rb", {}, path)
|
97
|
-
subnets = render("subnets.rb", { name: project_name }, path)
|
98
|
-
upload_stack = render("upload_stack.rb", {}, path)
|
99
|
-
vpc_stack = render("vpc_stack.rb", { name: project_name }, path)
|
100
|
-
vpc_concern = render("vpc_concerns.rb", { name: project_name }, path)
|
101
|
-
vpc_spec = render("vpc_spec.rb", { name: project_name.capitalize }, path)
|
70
|
+
FileUtils.mkdir_p project_path
|
102
71
|
|
103
|
-
#
|
104
|
-
|
105
|
-
|
72
|
+
Dir.glob("#{path}/templates/**/*", File::FNM_DOTMATCH).each do |f|
|
73
|
+
if File.directory?(f)
|
74
|
+
dir = f.gsub("#{path}/templates/","")
|
75
|
+
FileUtils.mkdir_p "#{project_path}/#{dir}"
|
76
|
+
end
|
106
77
|
end
|
107
78
|
|
108
|
-
|
109
|
-
File.
|
110
|
-
|
111
|
-
|
112
|
-
File.open("#{project_path}
|
113
|
-
|
114
|
-
|
115
|
-
File.open("#{project_path}/lib/core/upload.rb", "w") { |file| file.write(core_upload) }
|
116
|
-
File.open("#{project_path}/.env", "w") { |file| file.write(dotenv) }
|
117
|
-
File.open("#{project_path}/.env.test", "w") { |file| file.write(dotenv_test) }
|
118
|
-
File.open("#{project_path}/.env.production", "w") { |file| file.write(dotenv_production) }
|
119
|
-
File.open("#{project_path}/.env.rspec", "w") { |file| file.write(dotenv_rspec) }
|
120
|
-
File.open("#{project_path}/lib/stacks/ecs_stack.rb", "w") { |file| file.write(ecs_stack) }
|
121
|
-
File.open("#{project_path}/lib/stacks/ecs_stack/ecs_cluster.rb", "w") { |file| file.write(ecs_stack_concern) }
|
122
|
-
File.open("#{project_path}/Gemfile", "w") { |file| file.write(gemfile) }
|
123
|
-
File.open("#{project_path}/.gitignore", "w") { |file| file.write(gitignore) }
|
124
|
-
File.open("#{project_path}/lib/shared_concerns/global_variables.rb", "w") { |file| file.write(global_variables) }
|
125
|
-
File.open("#{project_path}/lib/aws_helper/helpers.rb", "w") { |file| file.write(helpers) }
|
126
|
-
File.open("#{project_path}/lib/shared_concerns/helper_methods.rb", "w") { |file| file.write(helper_methods) }
|
127
|
-
File.open("#{project_path}/lib/main.rb", "w") { |file| file.write(main) }
|
128
|
-
File.open("#{project_path}/lib/aws_helper/main.rb", "w") { |file| file.write(main_aws_helper) }
|
129
|
-
File.open("#{project_path}/spec/lib/parent_spec.rb", "w") { |file| file.write(parent_spec) }
|
130
|
-
File.open("#{project_path}/lib/stacks/parent_stack.rb", "w") { |file| file.write(project_stack) }
|
131
|
-
File.open("#{project_path}/lib/stacks/parent_stack/parent.rb", "w") { |file| file.write(project_concern) }
|
132
|
-
File.open("#{project_path}/Rakefile", "w") { |file| file.write(rakefile) }
|
133
|
-
File.open("#{project_path}/.rubocop.yml", "w") { |file| file.write(rubocop) }
|
134
|
-
File.open("#{project_path}/lib/shared_concerns/shared_methods.rb", "w") { |file| file.write(shared_methods) }
|
135
|
-
File.open("#{project_path}/spec/spec_helper.rb", "w") { |file| file.write(spec_helper) }
|
136
|
-
File.open("#{project_path}/lib/stacks/vpc_stack/subnets.rb", "w") { |file| file.write(subnets) }
|
137
|
-
File.open("#{project_path}/lib/aws_helper/upload_stack.rb", "w") { |file| file.write(upload_stack) }
|
138
|
-
File.open("#{project_path}/spec/lib/vpc_spec.rb", "w") { |file| file.write(vpc_spec) }
|
139
|
-
File.open("#{project_path}/lib/stacks/vpc_stack.rb", "w") { |file| file.write(vpc_stack) }
|
140
|
-
File.open("#{project_path}/lib/stacks/vpc_stack/vpc.rb", "w") { |file| file.write(vpc_concern) }
|
79
|
+
Dir.glob("#{path}/templates/**/*", File::FNM_DOTMATCH).each do |f|
|
80
|
+
unless File.directory?(f)
|
81
|
+
file = f.gsub("#{path}/templates/","")
|
82
|
+
contents = render(f, render_args)
|
83
|
+
File.open("#{project_path}/#{file}", "w") { |file| file.write(contents) }
|
84
|
+
end
|
85
|
+
end
|
141
86
|
|
142
87
|
puts "Setting up Rubycfn #{project_name} project..."
|
143
88
|
`cd #{project_name}-rubycfn && git init && bundle`
|
144
|
-
`bundle`
|
145
89
|
puts "Done!"
|