producer-core 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/{actions/echo.feature → action_echo.feature} +1 -1
- data/features/{actions/file_append.feature → action_file_append.feature} +1 -1
- data/features/{actions/file_replace_content.feature → action_file_replace_content.feature} +11 -14
- data/features/{actions/file_write.feature → action_file_write.feature} +7 -12
- data/features/{actions/mkdir.feature → action_mkdir.feature} +8 -13
- data/features/{actions/sh.feature → action_sh.feature} +14 -14
- data/features/{cli/dry_run.feature → cli_dry_run.feature} +0 -0
- data/features/{cli/usage.feature → cli_usage.feature} +1 -0
- data/features/{cli/verbose.feature → cli_verbose.feature} +12 -23
- data/features/{recipes/ask.feature → recipe_ask.feature} +1 -0
- data/features/{recipes/macro.feature → recipe_macro.feature} +4 -4
- data/features/{recipes/source.feature → recipe_source.feature} +3 -1
- data/features/{recipes/target.feature → recipe_target.feature} +3 -1
- data/features/recipe_test_macro.feature +52 -0
- data/features/{recipes/registry.feature → registry.feature} +9 -4
- data/features/{ssh/config.feature → ssh_config.feature} +3 -1
- data/features/support/env.rb +32 -0
- data/features/support/env_aruba_timeout.rb +3 -0
- data/features/{tasks/condition.feature → task_condition.feature} +1 -1
- data/features/{tests/dir.feature → test_dir.feature} +1 -1
- data/features/{tests/env.feature → test_env.feature} +24 -34
- data/features/{tests/executable.feature → test_executable.feature} +12 -14
- data/features/{tests/file.feature → test_file.feature} +1 -1
- data/features/{tests/file_contains.feature → test_file_contains.feature} +1 -1
- data/features/{tests/negated_test.feature → test_negated_test.feature} +0 -0
- data/features/test_shell_command_status.feature +48 -0
- data/lib/producer/core/cli.rb +19 -15
- data/lib/producer/core/condition/dsl.rb +17 -8
- data/lib/producer/core/condition.rb +2 -2
- data/lib/producer/core/env.rb +6 -10
- data/lib/producer/core/errors.rb +2 -1
- data/lib/producer/core/recipe/dsl.rb +4 -0
- data/lib/producer/core/remote.rb +1 -1
- data/lib/producer/core/tests/condition_test.rb +23 -0
- data/lib/producer/core/version.rb +1 -1
- data/lib/producer/core.rb +1 -0
- data/spec/producer/core/cli_spec.rb +73 -44
- data/spec/producer/core/condition/dsl_spec.rb +33 -5
- data/spec/producer/core/env_spec.rb +41 -36
- data/spec/producer/core/recipe/dsl_spec.rb +10 -0
- data/spec/producer/core/remote_spec.rb +16 -7
- data/spec/producer/core/tests/condition_test_spec.rb +55 -0
- metadata +56 -55
- data/features/recipes/evaluation.feature +0 -9
- data/features/tasks/evaluation.feature +0 -11
- data/features/tasks/registry.feature +0 -13
- data/features/tests/shell_command_status.feature +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4895dde05c3db8c7fddcaece8d7f94aa525ff45d
|
4
|
+
data.tar.gz: 919123f791a2de0b2364e192c42662de44ec922d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c073aa03b75b67b5b3a0d300820fce5d009c9a245e8c8d7abecc167e02a2f2842628b42d8d40b213e481b4d1824759fc972f139e7fbe7fcbf1d4ab5660418483
|
7
|
+
data.tar.gz: 7c5f80f18a7d7b694eb2b3027d678cf79e6b13e015c4f6722ad2a060e5b02c3dbecca418d005f3972b0cfef9eadfce8d6cc79568260d0c26b76ea4e33186106f
|
@@ -3,27 +3,24 @@ Feature: `file_replace_content' task action
|
|
3
3
|
|
4
4
|
Background:
|
5
5
|
Given a remote file named "some_file" with "some content"
|
6
|
-
|
7
|
-
|
8
|
-
Given a recipe with:
|
6
|
+
And a remote file named "other_file" with "some content"
|
7
|
+
And a recipe with:
|
9
8
|
"""
|
10
9
|
target 'some_host.test'
|
11
10
|
|
12
|
-
task :
|
11
|
+
task :file_replace_content_action_string do
|
13
12
|
file_replace_content 'some_file', 'content', 'other content'
|
14
13
|
end
|
14
|
+
|
15
|
+
task :file_replace_content_action_regexp do
|
16
|
+
file_replace_content 'other_file', /\w+\z/, 'other content'
|
17
|
+
end
|
15
18
|
"""
|
19
|
+
|
20
|
+
Scenario: replaces a string by another in the requested file
|
16
21
|
When I successfully execute the recipe
|
17
|
-
|
22
|
+
Then the remote file "some_file" must contain exactly "some other content"
|
18
23
|
|
19
24
|
Scenario: replaces a regular expression by a string in the requested file
|
20
|
-
Given a recipe with:
|
21
|
-
"""
|
22
|
-
target 'some_host.test'
|
23
|
-
|
24
|
-
task :replace_regexp_in_file do
|
25
|
-
file_replace_content 'some_file', /\w+\z/, 'other content'
|
26
|
-
end
|
27
|
-
"""
|
28
25
|
When I successfully execute the recipe
|
29
|
-
|
26
|
+
Then the remote file "other_file" must contain exactly "some other content"
|
@@ -1,28 +1,23 @@
|
|
1
1
|
@sshd
|
2
2
|
Feature: `file_write' task action
|
3
3
|
|
4
|
-
|
4
|
+
Background:
|
5
5
|
Given a recipe with:
|
6
6
|
"""
|
7
7
|
target 'some_host.test'
|
8
8
|
|
9
|
-
task :
|
10
|
-
file_write 'some_file',
|
9
|
+
task :file_write_action do
|
10
|
+
file_write 'some_file', 'some_content'
|
11
|
+
file_write 'some_file_0600', 'some_content', 0600
|
12
|
+
file_write 'some_file_0700', 'some_content', 0700
|
11
13
|
end
|
12
14
|
"""
|
15
|
+
|
16
|
+
Scenario: writes given data to given file path
|
13
17
|
When I successfully execute the recipe
|
14
18
|
Then the remote file "some_file" must contain "some_content"
|
15
19
|
|
16
20
|
Scenario: creates file with given permissions
|
17
|
-
Given a recipe with:
|
18
|
-
"""
|
19
|
-
target 'some_host.test'
|
20
|
-
|
21
|
-
task :write_some_data do
|
22
|
-
file_write 'some_file_0600', 'some_content', 0600
|
23
|
-
file_write 'some_file_0700', 'some_content', 0700
|
24
|
-
end
|
25
|
-
"""
|
26
21
|
When I successfully execute the recipe
|
27
22
|
Then the remote file "some_file_0600" must have 0600 mode
|
28
23
|
And the remote file "some_file_0700" must have 0700 mode
|
@@ -1,28 +1,23 @@
|
|
1
1
|
@sshd
|
2
2
|
Feature: `mkdir' task action
|
3
3
|
|
4
|
-
|
4
|
+
Background:
|
5
5
|
Given a recipe with:
|
6
6
|
"""
|
7
7
|
target 'some_host.test'
|
8
8
|
|
9
|
-
task :
|
9
|
+
task :mkdir_action do
|
10
10
|
mkdir 'some_directory'
|
11
|
+
mkdir 'some_directory_0700', 0700
|
12
|
+
mkdir 'some_directory_0500', 0500
|
11
13
|
end
|
12
14
|
"""
|
15
|
+
|
16
|
+
Scenario: creates directory given as argument
|
13
17
|
When I successfully execute the recipe
|
14
18
|
Then the remote directory "some_directory" must exists
|
15
19
|
|
16
20
|
Scenario: creates directory with given permissions
|
17
|
-
Given a recipe with:
|
18
|
-
"""
|
19
|
-
target 'some_host.test'
|
20
|
-
|
21
|
-
task :create_some_dir do
|
22
|
-
mkdir '0700_directory', 0700
|
23
|
-
mkdir '0500_directory', 0500
|
24
|
-
end
|
25
|
-
"""
|
26
21
|
When I successfully execute the recipe
|
27
|
-
Then the remote directory "
|
28
|
-
And the remote directory "
|
22
|
+
Then the remote directory "some_directory_0700" must have 0700 mode
|
23
|
+
And the remote directory "some_directory_0500" must have 0500 mode
|
@@ -1,24 +1,12 @@
|
|
1
1
|
@sshd
|
2
2
|
Feature: `sh' task action
|
3
3
|
|
4
|
-
Scenario: executes command
|
5
|
-
Given a recipe with:
|
6
|
-
"""
|
7
|
-
target 'some_host.test'
|
8
|
-
|
9
|
-
task :some_task do
|
10
|
-
sh '\true'
|
11
|
-
end
|
12
|
-
"""
|
13
|
-
When I execute the recipe
|
14
|
-
Then the exit status must be 0
|
15
|
-
|
16
4
|
Scenario: forwards standard ouput
|
17
5
|
Given a recipe with:
|
18
6
|
"""
|
19
7
|
target 'some_host.test'
|
20
8
|
|
21
|
-
task :
|
9
|
+
task :sh_action do
|
22
10
|
sh '\echo hello from remote'
|
23
11
|
end
|
24
12
|
"""
|
@@ -30,10 +18,22 @@ Feature: `sh' task action
|
|
30
18
|
"""
|
31
19
|
target 'some_host.test'
|
32
20
|
|
33
|
-
task :
|
21
|
+
task :sh_action_aborting do
|
34
22
|
sh '\false'
|
35
23
|
sh '\echo after_fail'
|
36
24
|
end
|
37
25
|
"""
|
38
26
|
When I execute the recipe
|
39
27
|
Then the output must not contain "after_fail"
|
28
|
+
|
29
|
+
Scenario: prints command when execution fail
|
30
|
+
Given a recipe with:
|
31
|
+
"""
|
32
|
+
target 'some_host.test'
|
33
|
+
|
34
|
+
task :sh_action_command_error do
|
35
|
+
sh '\false'
|
36
|
+
end
|
37
|
+
"""
|
38
|
+
When I execute the recipe
|
39
|
+
Then the output must match /\A\w+Error:\s+\\false/
|
File without changes
|
@@ -1,42 +1,31 @@
|
|
1
1
|
Feature: CLI verbose option
|
2
2
|
|
3
|
-
|
4
|
-
Given a recipe with:
|
5
|
-
"""
|
6
|
-
task :say_hello do
|
7
|
-
end
|
8
|
-
"""
|
9
|
-
When I successfully execute the recipe with option -v
|
10
|
-
Then the output must match /Task:.+say_hello/
|
11
|
-
|
12
|
-
Scenario: prints whether condition is met
|
3
|
+
Background:
|
13
4
|
Given a recipe with:
|
14
5
|
"""
|
15
6
|
task :task_ok do
|
16
7
|
condition { true }
|
8
|
+
|
9
|
+
echo 'some mesasge'
|
17
10
|
end
|
11
|
+
|
18
12
|
task :task_ko do
|
19
13
|
condition { false }
|
20
14
|
end
|
21
15
|
"""
|
16
|
+
|
17
|
+
Scenario: prints tasks name
|
18
|
+
When I successfully execute the recipe with option -v
|
19
|
+
Then the output must match /Task:.+task_ok/
|
20
|
+
|
21
|
+
Scenario: prints whether condition is met
|
22
22
|
When I successfully execute the recipe with option -v
|
23
23
|
Then the output must match /task_ok.+ condition: met.*task_ko.* condition: NOT met/
|
24
24
|
|
25
25
|
Scenario: prints actions info
|
26
|
-
Given a recipe with:
|
27
|
-
"""
|
28
|
-
task :say_hello do
|
29
|
-
echo 'hello message'
|
30
|
-
end
|
31
|
-
"""
|
32
26
|
When I successfully execute the recipe with option -v
|
33
|
-
Then the output must match /
|
27
|
+
Then the output must match /task_ok.+ action: echo/
|
34
28
|
|
35
29
|
Scenario: formats message with our simple logger
|
36
|
-
Given a recipe with:
|
37
|
-
"""
|
38
|
-
task :say_hello do
|
39
|
-
end
|
40
|
-
"""
|
41
30
|
When I successfully execute the recipe with option -v
|
42
|
-
Then the output must match /\ATask:.+
|
31
|
+
Then the output must match /\ATask:.+task_ok.*\n.*condition/
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Feature: `macro' recipe keyword
|
2
2
|
|
3
|
-
Scenario: declares new keyword accepting task code
|
3
|
+
Scenario: declares a new keyword accepting task code
|
4
4
|
Given a recipe with:
|
5
5
|
"""
|
6
6
|
macro :hello do
|
@@ -28,7 +28,7 @@ Feature: `macro' recipe keyword
|
|
28
28
|
Given a recipe with:
|
29
29
|
"""
|
30
30
|
macro :my_echo do |message|
|
31
|
-
condition { message =~ /
|
31
|
+
condition { message =~ /foo/ }
|
32
32
|
|
33
33
|
echo message
|
34
34
|
end
|
@@ -36,5 +36,5 @@ Feature: `macro' recipe keyword
|
|
36
36
|
%w[foo bar].each { |e| my_echo e }
|
37
37
|
"""
|
38
38
|
When I successfully execute the recipe
|
39
|
-
Then the output must
|
40
|
-
And the output must contain "bar"
|
39
|
+
Then the output must contain "foo"
|
40
|
+
And the output must not contain "bar"
|
@@ -9,7 +9,9 @@ Feature: `source' recipe keyword
|
|
9
9
|
Scenario: requires a recipe file
|
10
10
|
Given a file named "sourced_recipe.rb" with:
|
11
11
|
"""
|
12
|
-
|
12
|
+
task :some_task do
|
13
|
+
echo 'sourced recipe'
|
14
|
+
end
|
13
15
|
"""
|
14
16
|
When I successfully execute the recipe
|
15
17
|
Then the output must contain "sourced recipe"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Feature: `test_macro' recipe keyword
|
2
|
+
|
3
|
+
Scenario: declares a new test keyword
|
4
|
+
Given a recipe with:
|
5
|
+
"""
|
6
|
+
test_macro :even? do |n|
|
7
|
+
n % 2 == 0
|
8
|
+
end
|
9
|
+
|
10
|
+
[1, 2].each do |n|
|
11
|
+
task "test_macro-even-#{n}" do
|
12
|
+
condition { even? n }
|
13
|
+
echo n
|
14
|
+
end
|
15
|
+
end
|
16
|
+
"""
|
17
|
+
When I successfully execute the recipe
|
18
|
+
Then the output must contain "2"
|
19
|
+
And the output must not contain "1"
|
20
|
+
|
21
|
+
@sshd
|
22
|
+
Scenario: has access to core tests
|
23
|
+
Given a recipe with:
|
24
|
+
"""
|
25
|
+
target 'some_host.test'
|
26
|
+
|
27
|
+
test_macro(:other_env?) { |k| env? k }
|
28
|
+
|
29
|
+
[:shell, :non_existent_var].each do |k|
|
30
|
+
task "test_macro-condition-#{k}" do
|
31
|
+
condition { other_env? k }
|
32
|
+
echo "#{k}_ok"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
"""
|
36
|
+
When I successfully execute the recipe
|
37
|
+
Then the output must contain "shell_ok"
|
38
|
+
Then the output must not contain "non_existent_var_ok"
|
39
|
+
|
40
|
+
Scenario: has access to other tests declared with `test_macro'
|
41
|
+
Given a recipe with:
|
42
|
+
"""
|
43
|
+
test_macro(:one?) { |e| e == 1 }
|
44
|
+
test_macro(:one_alias?) { |e| one? e }
|
45
|
+
|
46
|
+
task :test_macro_macro do
|
47
|
+
condition { one_alias? 1 }
|
48
|
+
echo 'one_alias_ok'
|
49
|
+
end
|
50
|
+
"""
|
51
|
+
When I successfully execute the recipe
|
52
|
+
Then the output must contain "one_alias_ok"
|
@@ -1,21 +1,26 @@
|
|
1
1
|
Feature: key/value registry
|
2
2
|
|
3
|
-
Scenario: `
|
3
|
+
Scenario: `get' keyword in a task fetches a value registered with `set'
|
4
4
|
Given a recipe with:
|
5
5
|
"""
|
6
6
|
set :some_key, 'some_value'
|
7
7
|
|
8
|
-
|
8
|
+
task :registry_testing do
|
9
|
+
echo get :some_key
|
10
|
+
end
|
9
11
|
"""
|
10
12
|
When I successfully execute the recipe
|
11
13
|
Then the output must contain "some_value"
|
12
14
|
|
13
|
-
Scenario: `get' keyword fetches a value from the
|
15
|
+
Scenario: `get' keyword fetches a value from the recipe
|
14
16
|
Given a recipe with:
|
15
17
|
"""
|
16
18
|
set :some_key, 'some_value'
|
19
|
+
set :other_key, get(:some_key)
|
17
20
|
|
18
|
-
|
21
|
+
task :registry_testing do
|
22
|
+
echo get :other_key
|
23
|
+
end
|
19
24
|
"""
|
20
25
|
When I successfully execute the recipe
|
21
26
|
Then the output must contain "some_value"
|
data/features/support/env.rb
CHANGED
@@ -1,2 +1,34 @@
|
|
1
1
|
require 'aruba/cucumber'
|
2
|
+
require 'aruba/in_process'
|
2
3
|
require 'cucumber/sshd/cucumber'
|
4
|
+
require 'producer/core'
|
5
|
+
|
6
|
+
|
7
|
+
class ArubaProgramWrapper
|
8
|
+
def initialize(argv, stdin = $stdin, stdout = $stdout, stderr = $stderr,
|
9
|
+
kernel = Kernel)
|
10
|
+
@argv = argv
|
11
|
+
@stdin = stdin
|
12
|
+
@stdout = stdout
|
13
|
+
@stderr = stderr
|
14
|
+
@kernel = kernel
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute!
|
18
|
+
Producer::Core::CLI.run!(
|
19
|
+
@argv.dup, stdin: @stdin, stdout: @stdout, stderr: @stderr
|
20
|
+
)
|
21
|
+
rescue SystemExit => e
|
22
|
+
@kernel.exit(e.status)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
Before('@exec') do
|
28
|
+
Aruba.process = Aruba::SpawnProcess
|
29
|
+
end
|
30
|
+
|
31
|
+
Before('~@exec') do
|
32
|
+
Aruba::InProcess.main_class = ArubaProgramWrapper
|
33
|
+
Aruba.process = Aruba::InProcess
|
34
|
+
end
|