producer-core 0.4.2 → 0.4.3
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.
- data/.travis.yml +3 -0
- data/config/cucumber.yaml +1 -0
- data/features/{action_echo.feature → actions/echo.feature} +0 -0
- data/features/{action_file_append.feature → actions/file_append.feature} +0 -0
- data/features/{action_file_replace_content.feature → actions/file_replace_content.feature} +0 -0
- data/features/{action_file_write.feature → actions/file_write.feature} +0 -0
- data/features/{action_mkdir.feature → actions/mkdir.feature} +0 -0
- data/features/{action_sh.feature → actions/sh.feature} +0 -0
- data/features/{action_yaml_write.feature → actions/yaml_write.feature} +0 -0
- data/features/{cli_debug.feature → cli/debug.feature} +0 -0
- data/features/{cli_dry_run.feature → cli/dry_run.feature} +0 -0
- data/features/{cli_error_reporting.feature → cli/error_reporting.feature} +0 -0
- data/features/{cli_target.feature → cli/target.feature} +0 -0
- data/features/{cli_usage.feature → cli/usage.feature} +0 -0
- data/features/{cli_verbose.feature → cli/verbose.feature} +0 -0
- data/features/{condition_negated_test.feature → condition/negated_test.feature} +0 -0
- data/features/{condition_target.feature → condition/target.feature} +0 -0
- data/features/{recipe_compose_macro.feature → recipe/compose_macro.feature} +0 -0
- data/features/{recipe_macro.feature → recipe/macro.feature} +0 -0
- data/features/{registry.feature → recipe/registry.feature} +23 -0
- data/features/{recipe_source.feature → recipe/source.feature} +0 -0
- data/features/{recipe_target.feature → recipe/target.feature} +0 -0
- data/features/{recipe_test_macro.feature → recipe/test_macro.feature} +0 -0
- data/features/{ssh_config.feature → ssh/config.feature} +0 -0
- data/features/steps/remote_steps.rb +1 -1
- data/features/{task_ask.feature → task/ask.feature} +0 -0
- data/features/{task_condition.feature → task/condition.feature} +0 -0
- data/features/{task_nested_tasks.feature → task/nested_tasks.feature} +0 -0
- data/features/{task_target.feature → task/target.feature} +0 -0
- data/features/{task_template.feature → task/template.feature} +0 -0
- data/features/{test_dir.feature → tests/dir.feature} +0 -0
- data/features/{test_env.feature → tests/env.feature} +0 -0
- data/features/{test_executable.feature → tests/executable.feature} +0 -0
- data/features/{test_file.feature → tests/file.feature} +0 -0
- data/features/{test_file_contains.feature → tests/file_contains.feature} +0 -0
- data/features/{test_file_eq.feature → tests/file_eq.feature} +0 -0
- data/features/{test_file_match.feature → tests/file_match.feature} +0 -0
- data/features/{test_shell_command_status.feature → tests/shell_command_status.feature} +0 -0
- data/features/{test_yaml_eq.feature → tests/yaml_eq.feature} +0 -0
- data/lib/producer/core/cli.rb +2 -1
- data/lib/producer/core/env.rb +6 -7
- data/lib/producer/core/error_formatter.rb +10 -1
- data/lib/producer/core/recipe.rb +3 -8
- data/lib/producer/core/task.rb +4 -9
- data/lib/producer/core/tests/condition_test.rb +3 -7
- data/lib/producer/core/tests/shell_command_status.rb +3 -4
- data/lib/producer/core/version.rb +1 -1
- data/spec/producer/core/cli_spec.rb +9 -0
- data/spec/producer/core/task_spec.rb +12 -0
- metadata +77 -75
data/.travis.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
default: --require features/support --require features/steps
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -46,3 +46,26 @@ Feature: key/value registry
|
|
46
46
|
When I execute the recipe
|
47
47
|
Then the output must not contain "after_fail"
|
48
48
|
And the output must match /\A\w+Error:\s+:no_key/
|
49
|
+
|
50
|
+
Scenario: `get' keyword accepts a default value
|
51
|
+
Given a recipe with:
|
52
|
+
"""
|
53
|
+
task :registry_testing do
|
54
|
+
echo get(:some_key, 'some_value')
|
55
|
+
end
|
56
|
+
"""
|
57
|
+
When I successfully execute the recipe
|
58
|
+
Then the output must contain "some_value"
|
59
|
+
|
60
|
+
Scenario: `set?' keyword tests wether given key is defined
|
61
|
+
Given a recipe with:
|
62
|
+
"""
|
63
|
+
set :some_key, 'some_value'
|
64
|
+
task :registry_testing do
|
65
|
+
echo 'some_value_set' if set? :some_key
|
66
|
+
echo 'other_value' if set? :other_key
|
67
|
+
end
|
68
|
+
"""
|
69
|
+
When I execute the recipe
|
70
|
+
Then the output must contain "some_value_set"
|
71
|
+
And the output must not contain "other_value"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -19,7 +19,7 @@ Then /^the remote file "([^"]+)" must contain "([^"]+)"$/ do |path, content|
|
|
19
19
|
end
|
20
20
|
|
21
21
|
Then /^the remote file "([^"]+)" must contain exactly "([^"]+)"$/ do |path, content|
|
22
|
-
|
22
|
+
check_file_content path, content
|
23
23
|
end
|
24
24
|
|
25
25
|
Then /^the remote file "([^"]+)" must match \/([^\/]+)\/$/ do |path, pattern|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/producer/core/cli.rb
CHANGED
@@ -17,7 +17,7 @@ module Producer
|
|
17
17
|
rescue ArgumentError => e
|
18
18
|
stderr.puts e.message
|
19
19
|
exit EX_USAGE
|
20
|
-
rescue
|
20
|
+
rescue StandardError => e
|
21
21
|
ef = ErrorFormatter.new(
|
22
22
|
debug: cli.env.debug?,
|
23
23
|
force_cause: [RecipeEvaluationError]
|
@@ -45,6 +45,7 @@ module Producer
|
|
45
45
|
|
46
46
|
def run(worker: Worker.new(@env))
|
47
47
|
evaluate_recipes.each { |recipe| worker.process recipe.tasks }
|
48
|
+
ensure
|
48
49
|
@env.cleanup
|
49
50
|
end
|
50
51
|
|
data/lib/producer/core/env.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
module Producer
|
2
2
|
module Core
|
3
3
|
class Env
|
4
|
+
extend Forwardable
|
5
|
+
def_delegators :@registry, :[]=, :key?
|
6
|
+
|
4
7
|
attr_reader :input, :output, :error_output, :registry, :logger
|
5
8
|
attr_accessor :target, :verbose, :debug, :dry_run
|
6
9
|
|
@@ -17,17 +20,13 @@ module Producer
|
|
17
20
|
@remote ||= Remote.new(target)
|
18
21
|
end
|
19
22
|
|
20
|
-
def [](
|
21
|
-
@registry.fetch
|
23
|
+
def [](*args)
|
24
|
+
@registry.fetch *args
|
22
25
|
rescue KeyError
|
23
|
-
fail RegistryKeyError,
|
26
|
+
fail RegistryKeyError, args.first.inspect
|
24
27
|
end
|
25
28
|
alias get []
|
26
29
|
|
27
|
-
def []=(key, value)
|
28
|
-
@registry[key] = value
|
29
|
-
end
|
30
|
-
|
31
30
|
def logger
|
32
31
|
@logger ||= begin
|
33
32
|
logger = Logger.new(output)
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module Producer
|
2
2
|
module Core
|
3
3
|
class ErrorFormatter
|
4
|
+
FILTERS = [
|
5
|
+
/\/producer-\w+\/(?:bin|lib)\//,
|
6
|
+
/\/net\/ssh\//,
|
7
|
+
/\/net\/sftp\//
|
8
|
+
].freeze
|
9
|
+
|
4
10
|
def initialize(debug: false, force_cause: [])
|
5
11
|
@debug = debug
|
6
12
|
@force_cause = force_cause
|
@@ -22,6 +28,7 @@ module Producer
|
|
22
28
|
lines.join("\n")
|
23
29
|
end
|
24
30
|
|
31
|
+
|
25
32
|
private
|
26
33
|
|
27
34
|
def format_exception(exception, filter: true)
|
@@ -42,7 +49,9 @@ module Producer
|
|
42
49
|
end
|
43
50
|
|
44
51
|
def filter_backtrace(backtrace)
|
45
|
-
backtrace.reject
|
52
|
+
backtrace.reject do |line|
|
53
|
+
FILTERS.any? { |filter| line =~ filter }
|
54
|
+
end
|
46
55
|
end
|
47
56
|
|
48
57
|
def indent_backtrace(backtrace)
|
data/lib/producer/core/recipe.rb
CHANGED
@@ -19,6 +19,9 @@ module Producer
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
extend Forwardable
|
23
|
+
def_delegator :@env, :[]=, :set
|
24
|
+
def_delegator :@env, :[], :get
|
22
25
|
attr_reader :env, :tasks
|
23
26
|
|
24
27
|
def initialize(env)
|
@@ -49,14 +52,6 @@ module Producer
|
|
49
52
|
def test_macro(name, &block)
|
50
53
|
Condition.define_test(name, block)
|
51
54
|
end
|
52
|
-
|
53
|
-
def set(key, value)
|
54
|
-
env[key] = value
|
55
|
-
end
|
56
|
-
|
57
|
-
def get(key)
|
58
|
-
env[key]
|
59
|
-
end
|
60
55
|
end
|
61
56
|
end
|
62
57
|
end
|
data/lib/producer/core/task.rb
CHANGED
@@ -14,7 +14,10 @@ module Producer
|
|
14
14
|
end
|
15
15
|
|
16
16
|
extend Forwardable
|
17
|
-
def_delegators
|
17
|
+
def_delegators :@name, :to_s
|
18
|
+
def_delegators :@env, :target
|
19
|
+
def_delegator :@env, :[], :get
|
20
|
+
def_delegator :@env, :key?, :set?
|
18
21
|
|
19
22
|
define_action :echo, Actions::Echo
|
20
23
|
define_action :sh, Actions::ShellCommand
|
@@ -34,10 +37,6 @@ module Producer
|
|
34
37
|
@condition = condition
|
35
38
|
end
|
36
39
|
|
37
|
-
def to_s
|
38
|
-
@name.to_s
|
39
|
-
end
|
40
|
-
|
41
40
|
def condition_met?
|
42
41
|
!!@condition
|
43
42
|
end
|
@@ -55,10 +54,6 @@ module Producer
|
|
55
54
|
prompter.prompt(question, choices)
|
56
55
|
end
|
57
56
|
|
58
|
-
def get(key)
|
59
|
-
@env[key]
|
60
|
-
end
|
61
|
-
|
62
57
|
def template(path, variables = {})
|
63
58
|
Template.new(path).render variables
|
64
59
|
end
|
@@ -2,9 +2,9 @@ module Producer
|
|
2
2
|
module Core
|
3
3
|
module Tests
|
4
4
|
class ConditionTest < Test
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
extend Forwardable
|
6
|
+
def_delegator :@arguments, :first, :condition_block
|
7
|
+
def_delegator :condition, :met?, :verify
|
8
8
|
|
9
9
|
def condition
|
10
10
|
Condition.evaluate(env, *condition_args, &condition_block)
|
@@ -13,10 +13,6 @@ module Producer
|
|
13
13
|
def condition_args
|
14
14
|
arguments.drop 1
|
15
15
|
end
|
16
|
-
|
17
|
-
def condition_block
|
18
|
-
arguments.first
|
19
|
-
end
|
20
16
|
end
|
21
17
|
end
|
22
18
|
end
|
@@ -2,16 +2,15 @@ module Producer
|
|
2
2
|
module Core
|
3
3
|
module Tests
|
4
4
|
class ShellCommandStatus < Test
|
5
|
+
extend Forwardable
|
6
|
+
def_delegator :@arguments, :first, :command
|
7
|
+
|
5
8
|
def verify
|
6
9
|
remote.execute(command)
|
7
10
|
true
|
8
11
|
rescue RemoteCommandExecutionError
|
9
12
|
false
|
10
13
|
end
|
11
|
-
|
12
|
-
def command
|
13
|
-
arguments.first
|
14
|
-
end
|
15
14
|
end
|
16
15
|
end
|
17
16
|
end
|
@@ -152,6 +152,15 @@ module Producer::Core
|
|
152
152
|
expect(cli.env).to receive :cleanup
|
153
153
|
cli.run
|
154
154
|
end
|
155
|
+
|
156
|
+
context 'on error' do
|
157
|
+
let(:recipe_file) { fixture_path_for 'recipes/raise.rb' }
|
158
|
+
|
159
|
+
it 'cleans up the env' do
|
160
|
+
expect(cli.env).to receive :cleanup
|
161
|
+
cli.run rescue nil
|
162
|
+
end
|
163
|
+
end
|
155
164
|
end
|
156
165
|
|
157
166
|
describe '#evaluate_recipes' do
|
@@ -160,6 +160,18 @@ module Producer::Core
|
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
|
+
describe '#set?' do
|
164
|
+
before { env[:some_key] = :some_value }
|
165
|
+
|
166
|
+
it 'returns true when given key exists' do
|
167
|
+
expect(task.set? :some_key).to be true
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'returns false when given key does not exist' do
|
171
|
+
expect(task.set? :other_key).to be false
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
163
175
|
describe '#target' do
|
164
176
|
before { env.target = :some_target }
|
165
177
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: producer-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
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:
|
12
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-ssh
|
@@ -132,33 +132,35 @@ extensions: []
|
|
132
132
|
extra_rdoc_files: []
|
133
133
|
files:
|
134
134
|
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
135
136
|
- Gemfile
|
136
137
|
- Guardfile
|
137
138
|
- LICENSE
|
138
139
|
- Rakefile
|
139
140
|
- bin/producer
|
140
|
-
-
|
141
|
-
- features/
|
142
|
-
- features/
|
143
|
-
- features/
|
144
|
-
- features/
|
145
|
-
- features/
|
146
|
-
- features/
|
147
|
-
- features/
|
148
|
-
- features/
|
149
|
-
- features/
|
150
|
-
- features/
|
151
|
-
- features/
|
152
|
-
- features/
|
153
|
-
- features/
|
154
|
-
- features/
|
155
|
-
- features/
|
156
|
-
- features/
|
157
|
-
- features/
|
158
|
-
- features/
|
159
|
-
- features/
|
160
|
-
- features/
|
161
|
-
- features/
|
141
|
+
- config/cucumber.yaml
|
142
|
+
- features/actions/echo.feature
|
143
|
+
- features/actions/file_append.feature
|
144
|
+
- features/actions/file_replace_content.feature
|
145
|
+
- features/actions/file_write.feature
|
146
|
+
- features/actions/mkdir.feature
|
147
|
+
- features/actions/sh.feature
|
148
|
+
- features/actions/yaml_write.feature
|
149
|
+
- features/cli/debug.feature
|
150
|
+
- features/cli/dry_run.feature
|
151
|
+
- features/cli/error_reporting.feature
|
152
|
+
- features/cli/target.feature
|
153
|
+
- features/cli/usage.feature
|
154
|
+
- features/cli/verbose.feature
|
155
|
+
- features/condition/negated_test.feature
|
156
|
+
- features/condition/target.feature
|
157
|
+
- features/recipe/compose_macro.feature
|
158
|
+
- features/recipe/macro.feature
|
159
|
+
- features/recipe/registry.feature
|
160
|
+
- features/recipe/source.feature
|
161
|
+
- features/recipe/target.feature
|
162
|
+
- features/recipe/test_macro.feature
|
163
|
+
- features/ssh/config.feature
|
162
164
|
- features/steps/etc_steps.rb
|
163
165
|
- features/steps/execution_steps.rb
|
164
166
|
- features/steps/output_steps.rb
|
@@ -169,20 +171,20 @@ files:
|
|
169
171
|
- features/support/env_aruba_timeout.rb
|
170
172
|
- features/support/env_cucumber_doc_string.rb
|
171
173
|
- features/support/env_fake_home.rb
|
172
|
-
- features/
|
173
|
-
- features/
|
174
|
-
- features/
|
175
|
-
- features/
|
176
|
-
- features/
|
177
|
-
- features/
|
178
|
-
- features/
|
179
|
-
- features/
|
180
|
-
- features/
|
181
|
-
- features/
|
182
|
-
- features/
|
183
|
-
- features/
|
184
|
-
- features/
|
185
|
-
- features/
|
174
|
+
- features/task/ask.feature
|
175
|
+
- features/task/condition.feature
|
176
|
+
- features/task/nested_tasks.feature
|
177
|
+
- features/task/target.feature
|
178
|
+
- features/task/template.feature
|
179
|
+
- features/tests/dir.feature
|
180
|
+
- features/tests/env.feature
|
181
|
+
- features/tests/executable.feature
|
182
|
+
- features/tests/file.feature
|
183
|
+
- features/tests/file_contains.feature
|
184
|
+
- features/tests/file_eq.feature
|
185
|
+
- features/tests/file_match.feature
|
186
|
+
- features/tests/shell_command_status.feature
|
187
|
+
- features/tests/yaml_eq.feature
|
186
188
|
- lib/producer/core.rb
|
187
189
|
- lib/producer/core/action.rb
|
188
190
|
- lib/producer/core/actions/echo.rb
|
@@ -290,33 +292,33 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
292
|
version: '0'
|
291
293
|
requirements: []
|
292
294
|
rubyforge_project:
|
293
|
-
rubygems_version: 1.8.
|
295
|
+
rubygems_version: 1.8.30
|
294
296
|
signing_key:
|
295
297
|
specification_version: 3
|
296
298
|
summary: Provisioning tool
|
297
299
|
test_files:
|
298
|
-
- features/
|
299
|
-
- features/
|
300
|
-
- features/
|
301
|
-
- features/
|
302
|
-
- features/
|
303
|
-
- features/
|
304
|
-
- features/
|
305
|
-
- features/
|
306
|
-
- features/
|
307
|
-
- features/
|
308
|
-
- features/
|
309
|
-
- features/
|
310
|
-
- features/
|
311
|
-
- features/
|
312
|
-
- features/
|
313
|
-
- features/
|
314
|
-
- features/
|
315
|
-
- features/
|
316
|
-
- features/
|
317
|
-
- features/
|
318
|
-
- features/
|
319
|
-
- features/
|
300
|
+
- features/actions/echo.feature
|
301
|
+
- features/actions/file_append.feature
|
302
|
+
- features/actions/file_replace_content.feature
|
303
|
+
- features/actions/file_write.feature
|
304
|
+
- features/actions/mkdir.feature
|
305
|
+
- features/actions/sh.feature
|
306
|
+
- features/actions/yaml_write.feature
|
307
|
+
- features/cli/debug.feature
|
308
|
+
- features/cli/dry_run.feature
|
309
|
+
- features/cli/error_reporting.feature
|
310
|
+
- features/cli/target.feature
|
311
|
+
- features/cli/usage.feature
|
312
|
+
- features/cli/verbose.feature
|
313
|
+
- features/condition/negated_test.feature
|
314
|
+
- features/condition/target.feature
|
315
|
+
- features/recipe/compose_macro.feature
|
316
|
+
- features/recipe/macro.feature
|
317
|
+
- features/recipe/registry.feature
|
318
|
+
- features/recipe/source.feature
|
319
|
+
- features/recipe/target.feature
|
320
|
+
- features/recipe/test_macro.feature
|
321
|
+
- features/ssh/config.feature
|
320
322
|
- features/steps/etc_steps.rb
|
321
323
|
- features/steps/execution_steps.rb
|
322
324
|
- features/steps/output_steps.rb
|
@@ -327,20 +329,20 @@ test_files:
|
|
327
329
|
- features/support/env_aruba_timeout.rb
|
328
330
|
- features/support/env_cucumber_doc_string.rb
|
329
331
|
- features/support/env_fake_home.rb
|
330
|
-
- features/
|
331
|
-
- features/
|
332
|
-
- features/
|
333
|
-
- features/
|
334
|
-
- features/
|
335
|
-
- features/
|
336
|
-
- features/
|
337
|
-
- features/
|
338
|
-
- features/
|
339
|
-
- features/
|
340
|
-
- features/
|
341
|
-
- features/
|
342
|
-
- features/
|
343
|
-
- features/
|
332
|
+
- features/task/ask.feature
|
333
|
+
- features/task/condition.feature
|
334
|
+
- features/task/nested_tasks.feature
|
335
|
+
- features/task/target.feature
|
336
|
+
- features/task/template.feature
|
337
|
+
- features/tests/dir.feature
|
338
|
+
- features/tests/env.feature
|
339
|
+
- features/tests/executable.feature
|
340
|
+
- features/tests/file.feature
|
341
|
+
- features/tests/file_contains.feature
|
342
|
+
- features/tests/file_eq.feature
|
343
|
+
- features/tests/file_match.feature
|
344
|
+
- features/tests/shell_command_status.feature
|
345
|
+
- features/tests/yaml_eq.feature
|
344
346
|
- spec/fixtures/recipes/empty.rb
|
345
347
|
- spec/fixtures/recipes/raise.rb
|
346
348
|
- spec/fixtures/recipes/some_recipe.rb
|