rna 0.3.8 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Guardfile +0 -1
- data/README.md +21 -21
- data/{spec/project/config → config}/rna.rb +4 -4
- data/{spec/project/config → config}/rna/api.rb +0 -1
- data/config/rna/blog.rb +13 -0
- data/{spec/project/config → config}/s3.example.yml +0 -0
- data/config/s3.yml +4 -0
- data/lib/rna.rb +1 -0
- data/lib/rna/cli.rb +7 -2
- data/lib/rna/dsl.rb +19 -16
- data/lib/rna/outputers.rb +0 -1
- data/lib/rna/task.rb +15 -9
- data/lib/rna/version.rb +1 -1
- data/lib/{files → starter_project/config}/rna.rb +4 -25
- data/lib/starter_project/config/rna/api.rb +18 -0
- data/{spec/project → lib/starter_project}/config/rna/masta.rb +0 -0
- data/lib/{files/s3.yml → starter_project/config/s3.example.yml} +0 -0
- data/rna.gemspec +1 -0
- data/spec/lib/rna_spec.rb +161 -142
- data/spec/spec_helper.rb +21 -0
- metadata +29 -13
- data/lib/files/Guardfile +0 -3
data/.gitignore
CHANGED
data/Guardfile
CHANGED
@@ -4,7 +4,6 @@ end
|
|
4
4
|
|
5
5
|
guard 'rspec' do
|
6
6
|
watch(%r{^spec/.+_spec\.rb$})
|
7
|
-
watch(%r{^spec/project/config/.*$}) { |m| "spec/lib/rna_spec.rb" }
|
8
7
|
watch(%r{^lib/rna/(.+)\.rb$}) { |m| "spec/lib/rna_spec.rb" }
|
9
8
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/rna_spec.rb" }
|
10
9
|
# watch('spec/spec_helper.rb') { "spec" }
|
data/README.md
CHANGED
@@ -16,8 +16,8 @@ $ gem install rna
|
|
16
16
|
## Usage
|
17
17
|
|
18
18
|
<pre>
|
19
|
-
$ mkdir
|
20
|
-
$ cd
|
19
|
+
$ mkdir rna
|
20
|
+
$ cd rna
|
21
21
|
$ rna init
|
22
22
|
</pre>
|
23
23
|
|
@@ -32,7 +32,7 @@ This will create starter config/rna.rb and config/s3.yml files.
|
|
32
32
|
# This is meant be be modified to your needs.
|
33
33
|
default_includes 'base'
|
34
34
|
# Pre processing rules that run at the beginning
|
35
|
-
|
35
|
+
before do
|
36
36
|
if role != 'base'
|
37
37
|
node[:application] = nil
|
38
38
|
node[:deploy_code] = false
|
@@ -40,7 +40,7 @@ pre_rule do
|
|
40
40
|
node[:repository] = nil
|
41
41
|
end
|
42
42
|
|
43
|
-
node[:
|
43
|
+
node[:before] = 1
|
44
44
|
node[:chef_branch] = 'prod' if role =~ /^prod/
|
45
45
|
node[:chef_branch] = 'master' if role =~ /^stag/
|
46
46
|
end
|
@@ -74,8 +74,8 @@ end
|
|
74
74
|
|
75
75
|
|
76
76
|
# Post processing rules that run at the end
|
77
|
-
|
78
|
-
node[:
|
77
|
+
after do
|
78
|
+
node[:after] = 2
|
79
79
|
node[:framework_env] = 'production' if role =~ /^prod/
|
80
80
|
node[:framework_env] = 'staging' if role =~ /^stag/
|
81
81
|
|
@@ -120,7 +120,7 @@ If you have a lot of roles, the config/rna.rb file can get unwieldy long. You c
|
|
120
120
|
An example is in the spec/project folder:
|
121
121
|
|
122
122
|
* config/rna/api.rb
|
123
|
-
* config/rna/
|
123
|
+
* config/rna/blog.rb
|
124
124
|
|
125
125
|
#### Generating the json files
|
126
126
|
|
@@ -134,12 +134,12 @@ base.json:
|
|
134
134
|
|
135
135
|
```json
|
136
136
|
{
|
137
|
-
"
|
137
|
+
"before": 1,
|
138
138
|
"role": "base",
|
139
139
|
"run_list": [
|
140
140
|
"role[base]"
|
141
141
|
],
|
142
|
-
"
|
142
|
+
"after": 2
|
143
143
|
}
|
144
144
|
```
|
145
145
|
|
@@ -147,7 +147,7 @@ prod-api-app.json:
|
|
147
147
|
|
148
148
|
```json
|
149
149
|
{
|
150
|
-
"
|
150
|
+
"before": 1,
|
151
151
|
"role": "prod-api-app",
|
152
152
|
"run_list": [
|
153
153
|
"role[base]",
|
@@ -162,7 +162,7 @@ prod-api-app.json:
|
|
162
162
|
"pass": "pass"
|
163
163
|
},
|
164
164
|
"repository": "git@github.com:owner/repo.git/api.git",
|
165
|
-
"
|
165
|
+
"after": 2,
|
166
166
|
"framework_env": "production"
|
167
167
|
}
|
168
168
|
```
|
@@ -171,13 +171,13 @@ prod-api-redis.json:
|
|
171
171
|
|
172
172
|
```json
|
173
173
|
{
|
174
|
-
"
|
174
|
+
"before": 1,
|
175
175
|
"role": "prod-api-redis",
|
176
176
|
"run_list": [
|
177
177
|
"role[base]",
|
178
178
|
"role[api_redis]"
|
179
179
|
],
|
180
|
-
"
|
180
|
+
"after": 2,
|
181
181
|
"framework_env": "production",
|
182
182
|
"application": "api"
|
183
183
|
}
|
@@ -187,7 +187,7 @@ prod-api-resque.json:
|
|
187
187
|
|
188
188
|
```json
|
189
189
|
{
|
190
|
-
"
|
190
|
+
"before": 1,
|
191
191
|
"role": "prod-api-resque",
|
192
192
|
"run_list": [
|
193
193
|
"role[base]",
|
@@ -203,7 +203,7 @@ prod-api-resque.json:
|
|
203
203
|
},
|
204
204
|
"repository": "git@github.com:owner/repo.git/api.git",
|
205
205
|
"workers": 8,
|
206
|
-
"
|
206
|
+
"after": 2,
|
207
207
|
"framework_env": "production"
|
208
208
|
}
|
209
209
|
```
|
@@ -212,7 +212,7 @@ stag-api-app.json:
|
|
212
212
|
|
213
213
|
```json
|
214
214
|
{
|
215
|
-
"
|
215
|
+
"before": 1,
|
216
216
|
"role": "stag-api-app",
|
217
217
|
"run_list": [
|
218
218
|
"role[base]",
|
@@ -227,7 +227,7 @@ stag-api-app.json:
|
|
227
227
|
"pass": "pass"
|
228
228
|
},
|
229
229
|
"repository": "git@github.com:owner/repo.git/api.git",
|
230
|
-
"
|
230
|
+
"after": 2,
|
231
231
|
"framework_env": "staging"
|
232
232
|
}
|
233
233
|
```
|
@@ -236,13 +236,13 @@ stag-api-redis.json:
|
|
236
236
|
|
237
237
|
```json
|
238
238
|
{
|
239
|
-
"
|
239
|
+
"before": 1,
|
240
240
|
"role": "stag-api-redis",
|
241
241
|
"run_list": [
|
242
242
|
"role[base]",
|
243
243
|
"role[api_redis]"
|
244
244
|
],
|
245
|
-
"
|
245
|
+
"after": 2,
|
246
246
|
"framework_env": "staging",
|
247
247
|
"application": "api"
|
248
248
|
}
|
@@ -252,7 +252,7 @@ stag-api-resque.json:
|
|
252
252
|
|
253
253
|
```json
|
254
254
|
{
|
255
|
-
"
|
255
|
+
"before": 1,
|
256
256
|
"role": "stag-api-resque",
|
257
257
|
"run_list": [
|
258
258
|
"role[base]",
|
@@ -268,7 +268,7 @@ stag-api-resque.json:
|
|
268
268
|
},
|
269
269
|
"repository": "git@github.com:owner/repo.git/api.git",
|
270
270
|
"workers": 8,
|
271
|
-
"
|
271
|
+
"after": 2,
|
272
272
|
"framework_env": "staging"
|
273
273
|
}
|
274
274
|
```
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# This is meant be be modified to your needs.
|
3
3
|
default_includes 'base'
|
4
4
|
# Pre processing rules that run at the beginning
|
5
|
-
|
5
|
+
before do
|
6
6
|
if role != 'base'
|
7
7
|
node[:application] = nil
|
8
8
|
node[:deploy_code] = false
|
@@ -10,7 +10,7 @@ pre_rule do
|
|
10
10
|
node[:repository] = nil
|
11
11
|
end
|
12
12
|
|
13
|
-
node[:
|
13
|
+
node[:before] = 1
|
14
14
|
node[:chef_branch] = 'prod' if role =~ /^prod/
|
15
15
|
node[:chef_branch] = 'master' if role =~ /^stag/
|
16
16
|
end
|
@@ -23,8 +23,8 @@ role 'base' do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Post processing rules that run at the end
|
26
|
-
|
27
|
-
node[:
|
26
|
+
after do
|
27
|
+
node[:after] = 2
|
28
28
|
node[:framework_env] = 'production' if role =~ /^prod/
|
29
29
|
node[:framework_env] = 'staging' if role =~ /^stag/
|
30
30
|
|
data/config/rna/blog.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# blog
|
2
|
+
role 'blog-app' do
|
3
|
+
output false
|
4
|
+
node[:blog_app] = 123
|
5
|
+
end
|
6
|
+
role 'prod-blog-redis', 'stag-blog-redis'
|
7
|
+
role 'prod-blog-app', 'stag-blog-app' do
|
8
|
+
includes 'blog-app'
|
9
|
+
node[:application] = 'blog'
|
10
|
+
node[:deploy_code] = true
|
11
|
+
node[:repository] = 'git@github.com:arockwell/blog_blasta.git'
|
12
|
+
node[:relayhost] = settings[:sendgrid][:relayhost]
|
13
|
+
end
|
File without changes
|
data/config/s3.yml
ADDED
data/lib/rna.rb
CHANGED
data/lib/rna/cli.rb
CHANGED
@@ -3,8 +3,11 @@ module Rna
|
|
3
3
|
|
4
4
|
desc "init", "Setup rna project"
|
5
5
|
long_desc "Sets up config/rna.rb"
|
6
|
+
method_option :force, :type => :boolean, :aliases => "-f", :desc => "override existing starter files"
|
7
|
+
method_option :project_root, :default => ".", :aliases => "-r", :desc => "project root"
|
8
|
+
method_option :quiet, :type => :boolean, :aliases => "-q", :desc => "silence the output"
|
6
9
|
def init
|
7
|
-
Rna::Task.init
|
10
|
+
Rna::Task.init(options)
|
8
11
|
end
|
9
12
|
|
10
13
|
desc "generate", "Builds node.json files"
|
@@ -12,16 +15,18 @@ module Rna
|
|
12
15
|
Examples:
|
13
16
|
|
14
17
|
1. rna generate
|
18
|
+
2. rna g -c # shortcut
|
15
19
|
|
16
20
|
Builds the node.json files based on config/rna.rb and writes them to the ouput folder on the filesystem.
|
17
21
|
|
18
|
-
|
22
|
+
3. rna generate -o s3
|
19
23
|
|
20
24
|
Builds the node.json files based on config/rna.rb and writes them to s3 based on the s3 settings in config/s3.yml.
|
21
25
|
EOL
|
22
26
|
method_option :output, :aliases => '-o', :desc => "specify where to output the generated files to", :default => 'filesystem'
|
23
27
|
method_option :clean, :type => :boolean, :aliases => "-c", :desc => "remove all output files before generating"
|
24
28
|
method_option :verbose, :type => :boolean, :aliases => "-v", :desc => "show files being generated"
|
29
|
+
method_option :project_root, :default => ".", :aliases => "-r", :desc => "project root"
|
25
30
|
def generate
|
26
31
|
Rna::Task.generate(options)
|
27
32
|
puts "Rna files generated"
|
data/lib/rna/dsl.rb
CHANGED
@@ -2,11 +2,13 @@ module Rna
|
|
2
2
|
class DSL
|
3
3
|
attr_reader :data, :jsons
|
4
4
|
def initialize(options={})
|
5
|
-
@options = options
|
5
|
+
@options = options.dup
|
6
|
+
@project_root = options[:project_root] || '.'
|
7
|
+
@path = "#{@project_root}/config/rna.rb"
|
8
|
+
@options[:output_path] = "#{@project_root}/output"
|
6
9
|
|
7
|
-
@
|
8
|
-
@
|
9
|
-
@post_rule = nil
|
10
|
+
@before = nil
|
11
|
+
@after = nil
|
10
12
|
@roles = []
|
11
13
|
end
|
12
14
|
|
@@ -33,12 +35,12 @@ module Rna
|
|
33
35
|
Role.default_includes = role
|
34
36
|
end
|
35
37
|
|
36
|
-
def
|
37
|
-
@
|
38
|
+
def before(&block)
|
39
|
+
@before = {:block => block}
|
38
40
|
end
|
39
41
|
|
40
|
-
def
|
41
|
-
@
|
42
|
+
def after(&block)
|
43
|
+
@after = {:block => block}
|
42
44
|
end
|
43
45
|
|
44
46
|
def role(*names, &block)
|
@@ -50,6 +52,7 @@ module Rna
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def run
|
55
|
+
puts "Generating rna files" unless @options[:quiet]
|
53
56
|
evaluate
|
54
57
|
build
|
55
58
|
process
|
@@ -85,18 +88,18 @@ module Rna
|
|
85
88
|
json = process_role(includes, depth+1)
|
86
89
|
else
|
87
90
|
json = {}
|
88
|
-
if @
|
89
|
-
pre_data = Rule.new(role, @
|
90
|
-
json.
|
91
|
+
if @before
|
92
|
+
pre_data = Rule.new(role, @before[:block]).build
|
93
|
+
json.deep_merge!(pre_data[:attributes])
|
91
94
|
end
|
92
95
|
end
|
93
96
|
|
94
97
|
attributes = role_data[:attributes] || {}
|
95
|
-
json.
|
98
|
+
json.deep_merge!(attributes)
|
96
99
|
# only process post rule at the very last step
|
97
|
-
if @
|
98
|
-
post_data = Rule.new(role, @
|
99
|
-
json.
|
100
|
+
if @after and depth == 1
|
101
|
+
post_data = Rule.new(role, @after[:block]).build
|
102
|
+
json.deep_merge!(post_data[:attributes])
|
100
103
|
end
|
101
104
|
json
|
102
105
|
end
|
@@ -122,7 +125,7 @@ module Rna
|
|
122
125
|
@dsl = eval "self", @block.binding
|
123
126
|
instance_eval(&@block)
|
124
127
|
end
|
125
|
-
@data[:attributes].
|
128
|
+
@data[:attributes].deep_merge!(set.to_mash)
|
126
129
|
@data
|
127
130
|
end
|
128
131
|
|
data/lib/rna/outputers.rb
CHANGED
@@ -8,7 +8,6 @@ module Rna
|
|
8
8
|
|
9
9
|
class Filesystem < Outputer
|
10
10
|
def run(jsons)
|
11
|
-
# options[:output_path] only used for specs
|
12
11
|
output_path = options[:output_path] || "output"
|
13
12
|
FileUtils.rm_rf(output_path) if options[:clean]
|
14
13
|
FileUtils.mkdir(output_path) unless File.exist?(output_path)
|
data/lib/rna/task.rb
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
module Rna
|
2
2
|
class Task
|
3
|
-
def self.init(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
def self.init(options={})
|
4
|
+
project_root = options[:project_root] || '.'
|
5
|
+
puts "Setting up lono project" unless options[:quiet]
|
6
|
+
source_root = File.expand_path("../../starter_project", __FILE__)
|
7
|
+
paths = Dir.glob("#{source_root}/**/*").
|
8
|
+
select {|p| File.file?(p) }
|
9
|
+
paths.each do |src|
|
10
|
+
dest = src.gsub(%r{.*starter_project/},'')
|
11
|
+
dest = "#{project_root}/#{dest}"
|
12
|
+
|
13
|
+
if File.exist?(dest) and !options[:force]
|
11
14
|
puts "already exists: #{dest}" unless options[:quiet]
|
12
15
|
else
|
13
16
|
puts "creating: #{dest}" unless options[:quiet]
|
14
|
-
|
17
|
+
dirname = File.dirname(dest)
|
18
|
+
FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
|
19
|
+
FileUtils.cp(src, dest)
|
15
20
|
end
|
16
21
|
end
|
22
|
+
puts "Starter lono project created"
|
17
23
|
end
|
18
24
|
def self.generate(options)
|
19
25
|
new(options).generate
|
data/lib/rna/version.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# This is meant be be modified to your needs.
|
3
3
|
default_includes 'base'
|
4
4
|
# Pre processing rules that run at the beginning
|
5
|
-
|
5
|
+
before do
|
6
6
|
if role != 'base'
|
7
7
|
node[:application] = nil
|
8
8
|
node[:deploy_code] = false
|
@@ -10,7 +10,7 @@ pre_rule do
|
|
10
10
|
node[:repository] = nil
|
11
11
|
end
|
12
12
|
|
13
|
-
node[:
|
13
|
+
node[:before] = 1
|
14
14
|
node[:chef_branch] = 'prod' if role =~ /^prod/
|
15
15
|
node[:chef_branch] = 'master' if role =~ /^stag/
|
16
16
|
end
|
@@ -22,30 +22,9 @@ role 'base' do
|
|
22
22
|
role_list ['base']
|
23
23
|
end
|
24
24
|
|
25
|
-
# api
|
26
|
-
role 'prod-api-redis', 'stag-api-redis' do
|
27
|
-
run_list ['base','api_redis']
|
28
|
-
end
|
29
|
-
role 'prod-api-app', 'stag-api-app' do
|
30
|
-
run_list ['base','api_app']
|
31
|
-
node[:application] = 'api'
|
32
|
-
node[:deploy_code] = true
|
33
|
-
node[:database][:adapter] = "mysql"
|
34
|
-
node[:database][:host] = "127.0.0.1"
|
35
|
-
node[:database][:user] = "user"
|
36
|
-
node[:database][:pass] = "pass"
|
37
|
-
node[:repository] = 'git@github.com:owner/repo.git/api.git'
|
38
|
-
end
|
39
|
-
role 'prod-api-resque', 'stag-api-resque' do
|
40
|
-
includes 'prod-api-app'
|
41
|
-
run_list ['base','api_resque']
|
42
|
-
node[:workers] = 8
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
25
|
# Post processing rules that run at the end
|
47
|
-
|
48
|
-
node[:
|
26
|
+
after do
|
27
|
+
node[:after] = 2
|
49
28
|
node[:framework_env] = 'production' if role =~ /^prod/
|
50
29
|
node[:framework_env] = 'staging' if role =~ /^stag/
|
51
30
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# api
|
2
|
+
role 'prod-api-redis', 'stag-api-redis'
|
3
|
+
role 'prod-api-resque', 'stag-api-resque' do
|
4
|
+
includes 'prod-api-app'
|
5
|
+
node[:workers] = 8
|
6
|
+
end
|
7
|
+
role 'prod-api-app', 'stag-api-app' do
|
8
|
+
node[:application] = 'api'
|
9
|
+
node[:deploy_code] = true
|
10
|
+
node[:repository] = 'git@github.com:owner/repo.git/api.git'
|
11
|
+
node[:database][:adapter] = "mysql"
|
12
|
+
node[:database][:host] = "127.0.0.1"
|
13
|
+
node[:database][:user] = "user"
|
14
|
+
node[:database][:pass] = "pass"
|
15
|
+
node[:scout][:key] = 'abc'
|
16
|
+
node[:scout][:gems] = {'redis' => nil}
|
17
|
+
node[:relayhost] = settings[:sendgrid][:relayhost]
|
18
|
+
end
|
File without changes
|
File without changes
|
data/rna.gemspec
CHANGED
data/spec/lib/rna_spec.rb
CHANGED
@@ -1,165 +1,184 @@
|
|
1
|
-
require
|
2
|
-
require 'rspec'
|
3
|
-
require 'pp'
|
1
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
2
|
|
5
3
|
describe Rna do
|
6
4
|
before(:each) do
|
7
|
-
@
|
8
|
-
@
|
9
|
-
|
10
|
-
:config_path => "#{@project_root}/config/rna.rb",
|
11
|
-
:output_path => "#{@project_root}/output"
|
12
|
-
)
|
5
|
+
@project = File.expand_path("../../project", __FILE__)
|
6
|
+
FileUtils.mkdir(@project) unless File.exist?(@project)
|
7
|
+
execute("./bin/rna init -f -q --project-root #{@project}")
|
13
8
|
end
|
14
9
|
|
15
10
|
after(:each) do
|
16
|
-
FileUtils.rm_rf("#{@
|
11
|
+
FileUtils.rm_rf("#{@project}/output")
|
17
12
|
end
|
18
13
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# @dsl.process
|
25
|
-
# pp @dsl.jsons
|
26
|
-
# end
|
27
|
-
|
28
|
-
it "should write json files to outputs folder" do
|
29
|
-
@dsl.run
|
30
|
-
Dir.glob("#{@project_root}/output/*").size.should > 0
|
14
|
+
describe "cli specs" do
|
15
|
+
it "should generate templates" do
|
16
|
+
out = execute("./bin/rna generate -c --project-root #{@project}")
|
17
|
+
out.should match /Generating rna files/
|
18
|
+
end
|
31
19
|
end
|
32
20
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
21
|
+
describe "ruby specs" do
|
22
|
+
before(:each) do
|
23
|
+
@dsl = Rna::DSL.new(
|
24
|
+
:quiet => true,
|
25
|
+
:project_root => @project
|
26
|
+
)
|
27
|
+
end
|
40
28
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
29
|
+
it "should build attributes" do
|
30
|
+
@dsl.evaluate
|
31
|
+
@dsl.build
|
32
|
+
pp @dsl.data
|
33
|
+
@dsl.process
|
34
|
+
pp @dsl.jsons
|
35
|
+
end if ENV['DEBUG']
|
47
36
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
json['run_list'].should == ["role[base]", "role[api_redis]"]
|
53
|
-
json['framework_env'].should == 'production'
|
54
|
-
json['deploy_code'].should == nil
|
55
|
-
end
|
37
|
+
it "should write json files to outputs folder" do
|
38
|
+
@dsl.run
|
39
|
+
Dir.glob("#{@project}/output/*").size.should > 0
|
40
|
+
end
|
56
41
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
42
|
+
# complete end to end tests
|
43
|
+
it "base.json should contain correct attributes" do
|
44
|
+
@dsl.run
|
45
|
+
base = JSON.load(IO.read("#{@project}/output/base.json"))
|
46
|
+
base['role'].should == 'base'
|
47
|
+
base['run_list'].should == ["role[base]"]
|
48
|
+
end
|
65
49
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
json['framework_env'].should == 'production'
|
73
|
-
json['scout'].should be_a(Hash)
|
74
|
-
end
|
50
|
+
it "base.json should not contain settings attributes" do
|
51
|
+
@dsl.run
|
52
|
+
base = JSON.load(IO.read("#{@project}/output/base.json"))
|
53
|
+
base['framework_env'].should be_nil
|
54
|
+
base['deploy_code'].should be_nil
|
55
|
+
end
|
75
56
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
57
|
+
it "prod-api-redis.json should contain base and settings attributes" do
|
58
|
+
@dsl.run
|
59
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-redis.json"))
|
60
|
+
json['role'].should == 'prod-api-redis'
|
61
|
+
json['run_list'].should == ["role[base]", "role[api_redis]"]
|
62
|
+
json['framework_env'].should == 'production'
|
63
|
+
json['deploy_code'].should == nil
|
64
|
+
end
|
83
65
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
66
|
+
it "prod-api-resque should contain inherited attributes" do
|
67
|
+
@dsl.run
|
68
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-resque.json"))
|
69
|
+
json['role'].should == 'prod-api-resque'
|
70
|
+
json['run_list'].should == ["role[base]","role[api_resque]"]
|
71
|
+
json['deploy_code'].should == true
|
72
|
+
json['framework_env'].should == 'production'
|
73
|
+
json['scout'].should be_a(Hash)
|
74
|
+
json['database']['adapter'].should == "mysql"
|
75
|
+
json['scout'].should be_a(Hash)
|
76
|
+
end
|
95
77
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
78
|
+
it "stag-api-redis.json should contain base and settings attributes and apply rules" do
|
79
|
+
@dsl.run
|
80
|
+
json = JSON.load(IO.read("#{@project}/output/stag-api-redis.json"))
|
81
|
+
json['role'].should == 'stag-api-redis'
|
82
|
+
json['run_list'].should == ["role[base]", "role[api_redis]"]
|
83
|
+
json['deploy_code'].should == nil
|
84
|
+
json['framework_env'].should == 'staging' # this is tests the rule
|
85
|
+
end
|
103
86
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
###################
|
114
|
-
|
115
|
-
# only run when S3=1, will need to setup spec/project/config/s3.yml
|
116
|
-
it "should upload to s3" do
|
117
|
-
@dsl = Rna::DSL.new(
|
118
|
-
:output => 's3',
|
119
|
-
:s3_config_path => "#{@project_root}/config/s3.yml",
|
120
|
-
:config_path => "#{@project_root}/config/rna.rb"
|
121
|
-
)
|
122
|
-
outputer = @dsl.run
|
123
|
-
|
124
|
-
config = outputer.config
|
125
|
-
s3 = outputer.s3
|
126
|
-
bucket = s3.buckets[config['bucket']]
|
127
|
-
raw = bucket.objects["#{config['folder']}/prod-api-app.json"].read
|
128
|
-
|
129
|
-
json = JSON.load(raw)
|
130
|
-
json['role'].should == 'prod-api-app'
|
131
|
-
json['run_list'].should == ["role[base]","role[api_app]"]
|
132
|
-
json['deploy_code'].should == true
|
133
|
-
json['framework_env'].should == 'production'
|
134
|
-
json['scout'].should be_a(Hash)
|
135
|
-
# clean up
|
136
|
-
tree = bucket.as_tree(:prefix => config['folder'])
|
137
|
-
tree.children.select(&:leaf?).each do |leaf|
|
138
|
-
leaf.object.delete
|
139
|
-
end
|
140
|
-
end if ENV['S3'] == '1'
|
141
|
-
|
142
|
-
it "task init should set up project" do
|
143
|
-
File.exist?("#{@project2_root}/config/s3.yml").should be_false
|
144
|
-
File.exist?("#{@project2_root}/config/rna.rb").should be_false
|
145
|
-
Rna::Task.init(@project2_root, :quiet => true)
|
146
|
-
File.exist?("#{@project2_root}/config/s3.yml").should be_true
|
147
|
-
File.exist?("#{@project2_root}/config/rna.rb").should be_true
|
148
|
-
FileUtils.rm_rf("#{@project2_root}/config")
|
149
|
-
end
|
87
|
+
it "prod-api-app.json should contain base and settings attributes" do
|
88
|
+
@dsl.run
|
89
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-app.json"))
|
90
|
+
json['role'].should == 'prod-api-app'
|
91
|
+
json['run_list'].should == ["role[base]","role[api_app]"]
|
92
|
+
json['deploy_code'].should == true
|
93
|
+
json['framework_env'].should == 'production'
|
94
|
+
json['scout'].should be_a(Hash)
|
95
|
+
end
|
150
96
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
json
|
160
|
-
|
161
|
-
|
97
|
+
it "prod-api-app.json should contain attributes from node" do
|
98
|
+
@dsl.run
|
99
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-app.json"))
|
100
|
+
json['database']['user'].should == 'user'
|
101
|
+
json['database']['pass'].should == 'pass'
|
102
|
+
json['database']['host'].should == '127.0.0.1'
|
103
|
+
end
|
104
|
+
|
105
|
+
it "prod-api-app.json should contain pre and post rules" do
|
106
|
+
@dsl.run
|
107
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-app.json"))
|
108
|
+
json['role'].should == 'prod-api-app'
|
109
|
+
json['run_list'].should == ["role[base]","role[api_app]"]
|
110
|
+
json['deploy_code'].should == true
|
111
|
+
json['framework_env'].should == 'production'
|
112
|
+
json['scout'].should be_a(Hash)
|
113
|
+
json['before'].should == 1
|
114
|
+
json['after'].should == 2
|
115
|
+
end
|
116
|
+
|
117
|
+
it "masta-app should not generate output file" do
|
118
|
+
@dsl.run
|
119
|
+
File.exist?("#{@project}/output/masta-app.json").should be_false
|
120
|
+
File.exist?("#{@project}/output/prod-masta-android.json").should be_true
|
121
|
+
json = JSON.load(IO.read("#{@project}/output/prod-masta-android.json"))
|
122
|
+
json['masta_app'].should == 123
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should be able to read shared settings" do
|
126
|
+
@dsl.run
|
127
|
+
File.exist?("#{@project}/output/masta-app.json").should be_false
|
128
|
+
File.exist?("#{@project}/output/prod-masta-android.json").should be_true
|
129
|
+
json = JSON.load(IO.read("#{@project}/output/prod-masta-android.json"))
|
130
|
+
json['relayhost'].should == "smtp.sendgrid.net"
|
131
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-app.json"))
|
132
|
+
json['relayhost'].should == "smtp.sendgrid.net"
|
133
|
+
end
|
134
|
+
###################
|
135
|
+
|
136
|
+
# only run when S3=1, will need to setup spec/project/config/s3.yml
|
137
|
+
it "should upload to s3" do
|
138
|
+
@dsl = Rna::DSL.new(
|
139
|
+
:output => 's3',
|
140
|
+
:s3_config_path => "#{@project}/config/s3.yml",
|
141
|
+
:project_root => @project
|
142
|
+
)
|
143
|
+
outputer = @dsl.run
|
144
|
+
|
145
|
+
config = outputer.config
|
146
|
+
s3 = outputer.s3
|
147
|
+
bucket = s3.buckets[config['bucket']]
|
148
|
+
raw = bucket.objects["#{config['folder']}/prod-api-app.json"].read
|
149
|
+
|
150
|
+
json = JSON.load(raw)
|
151
|
+
json['role'].should == 'prod-api-app'
|
152
|
+
json['run_list'].should == ["role[base]","role[api_app]"]
|
153
|
+
json['deploy_code'].should == true
|
154
|
+
json['framework_env'].should == 'production'
|
155
|
+
json['scout'].should be_a(Hash)
|
156
|
+
# clean up
|
157
|
+
tree = bucket.as_tree(:prefix => config['folder'])
|
158
|
+
tree.children.select(&:leaf?).each do |leaf|
|
159
|
+
leaf.object.delete
|
160
|
+
end
|
161
|
+
end if ENV['S3'] == '1'
|
162
|
+
|
163
|
+
it "task init should set up project" do
|
164
|
+
File.exist?("#{@project}/config/s3.example.yml").should be_true
|
165
|
+
File.exist?("#{@project}/config/rna.rb").should be_true
|
166
|
+
end
|
167
|
+
|
168
|
+
it "task build should generate node.json files" do
|
169
|
+
Rna::Task.generate(
|
170
|
+
:quiet => true,
|
171
|
+
:project_root => @project
|
172
|
+
)
|
173
|
+
json = JSON.load(IO.read("#{@project}/output/prod-api-app.json"))
|
174
|
+
json['role'].should == 'prod-api-app'
|
175
|
+
json['run_list'].should == ["role[base]","role[api_app]"]
|
176
|
+
json['deploy_code'].should == true
|
177
|
+
json['framework_env'].should == 'production'
|
178
|
+
json['scout'].should be_a(Hash)
|
179
|
+
end
|
162
180
|
end
|
181
|
+
|
163
182
|
end
|
164
183
|
|
165
184
|
describe Node do
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "pp"
|
2
|
+
require "bundler"
|
3
|
+
|
4
|
+
Bundler.require(:development)
|
5
|
+
|
6
|
+
$root = File.expand_path('../../', __FILE__)
|
7
|
+
|
8
|
+
require "#{$root}/lib/rna"
|
9
|
+
|
10
|
+
module Helpers
|
11
|
+
def execute(cmd)
|
12
|
+
puts "Running: #{cmd}" if ENV['DEBUG']
|
13
|
+
out = `#{cmd}`
|
14
|
+
puts out if ENV['DEBUG']
|
15
|
+
out
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec.configure do |c|
|
20
|
+
c.include Helpers
|
21
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rna
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: deep_merge
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
94
110
|
- !ruby/object:Gem::Dependency
|
95
111
|
name: rspec
|
96
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,10 +206,12 @@ files:
|
|
190
206
|
- README.md
|
191
207
|
- Rakefile
|
192
208
|
- bin/rna
|
209
|
+
- config/rna.rb
|
210
|
+
- config/rna/api.rb
|
211
|
+
- config/rna/blog.rb
|
212
|
+
- config/s3.example.yml
|
213
|
+
- config/s3.yml
|
193
214
|
- lib/ext/hash.rb
|
194
|
-
- lib/files/Guardfile
|
195
|
-
- lib/files/rna.rb
|
196
|
-
- lib/files/s3.yml
|
197
215
|
- lib/mash.rb
|
198
216
|
- lib/node.rb
|
199
217
|
- lib/rna.rb
|
@@ -202,14 +220,15 @@ files:
|
|
202
220
|
- lib/rna/outputers.rb
|
203
221
|
- lib/rna/task.rb
|
204
222
|
- lib/rna/version.rb
|
223
|
+
- lib/starter_project/config/rna.rb
|
224
|
+
- lib/starter_project/config/rna/api.rb
|
225
|
+
- lib/starter_project/config/rna/masta.rb
|
226
|
+
- lib/starter_project/config/s3.example.yml
|
205
227
|
- rna.gemspec
|
206
228
|
- spec/lib/rna_spec.rb
|
207
|
-
- spec/project/config/rna.rb
|
208
|
-
- spec/project/config/rna/api.rb
|
209
|
-
- spec/project/config/rna/masta.rb
|
210
|
-
- spec/project/config/s3.example.yml
|
211
229
|
- spec/project2/.gitkeep
|
212
230
|
- spec/project2/Guardfile
|
231
|
+
- spec/spec_helper.rb
|
213
232
|
homepage: http://github.com/tongueroo/rna
|
214
233
|
licenses: []
|
215
234
|
post_install_message:
|
@@ -236,9 +255,6 @@ specification_version: 3
|
|
236
255
|
summary: Rna is a simple DSL for generating node.json files required by chef-solo.
|
237
256
|
test_files:
|
238
257
|
- spec/lib/rna_spec.rb
|
239
|
-
- spec/project/config/rna.rb
|
240
|
-
- spec/project/config/rna/api.rb
|
241
|
-
- spec/project/config/rna/masta.rb
|
242
|
-
- spec/project/config/s3.example.yml
|
243
258
|
- spec/project2/.gitkeep
|
244
259
|
- spec/project2/Guardfile
|
260
|
+
- spec/spec_helper.rb
|
data/lib/files/Guardfile
DELETED