cuken 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,10 +3,11 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  group :default do
6
- gem 'aruba', "~> 0.3.5"
6
+ gem 'aruba', "~> 0.3.6"
7
7
  gem 'chef', "~>0.9.12"
8
8
  gem 'grit', "~>2.4.1"
9
9
  gem 'rvm', "~>1.5.2"
10
+ gem 'open4'
10
11
  end
11
12
  # Add dependencies to develop your gem here.
12
13
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -12,14 +12,14 @@ GEM
12
12
  erubis
13
13
  extlib
14
14
  highline
15
- json (>= 1.4.4, <= 1.4.6)
15
+ json (<= 1.4.6, >= 1.4.4)
16
16
  mixlib-authentication (>= 1.1.0)
17
17
  mixlib-cli (>= 1.1.0)
18
18
  mixlib-config (>= 1.1.2)
19
19
  mixlib-log (>= 1.2.0)
20
20
  moneta
21
21
  ohai (>= 0.5.7)
22
- rest-client (>= 1.0.4, < 1.7.0)
22
+ rest-client (< 1.7.0, >= 1.0.4)
23
23
  uuidtools
24
24
  childprocess (0.1.8)
25
25
  ffi (~> 1.0.6)
@@ -60,6 +60,7 @@ GEM
60
60
  mixlib-log
61
61
  systemu
62
62
  yajl-ruby
63
+ open4 (1.0.1)
63
64
  rake (0.8.7)
64
65
  rcov (0.9.9)
65
66
  reek (1.2.8)
@@ -96,13 +97,14 @@ PLATFORMS
96
97
  ruby
97
98
 
98
99
  DEPENDENCIES
99
- aruba (~> 0.3.5)
100
+ aruba (~> 0.3.6)
100
101
  bundler (~> 1.0.11)
101
102
  chef (~> 0.9.12)
102
103
  cucumber
103
104
  fakefs (~> 0.3.1)
104
105
  grit (~> 2.4.1)
105
106
  jeweler (~> 1.5.2)
107
+ open4
106
108
  rcov
107
109
  reek (~> 1.2.8)
108
110
  roodi (~> 2.1.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.1.8
data/cuken.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cuken}
8
- s.version = "0.1.7"
8
+ s.version = "0.1.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Hedgehog"]
12
- s.date = %q{2011-04-17}
12
+ s.date = %q{2011-04-18}
13
13
  s.description = %q{Reusable Cucumber steps and API for post-convergence system integration descriptions}
14
14
  s.email = %q{hedgehogshiatus@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -469,10 +469,11 @@ Gem::Specification.new do |s|
469
469
  s.specification_version = 3
470
470
 
471
471
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
472
- s.add_runtime_dependency(%q<aruba>, ["~> 0.3.5"])
472
+ s.add_runtime_dependency(%q<aruba>, ["~> 0.3.6"])
473
473
  s.add_runtime_dependency(%q<chef>, ["~> 0.9.12"])
474
474
  s.add_runtime_dependency(%q<grit>, ["~> 2.4.1"])
475
475
  s.add_runtime_dependency(%q<rvm>, ["~> 1.5.2"])
476
+ s.add_runtime_dependency(%q<open4>, [">= 0"])
476
477
  s.add_development_dependency(%q<rr>, ["~> 1.0.2"])
477
478
  s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
478
479
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
@@ -484,10 +485,11 @@ Gem::Specification.new do |s|
484
485
  s.add_development_dependency(%q<roodi>, ["~> 2.1.0"])
485
486
  s.add_development_dependency(%q<fakefs>, ["~> 0.3.1"])
486
487
  else
487
- s.add_dependency(%q<aruba>, ["~> 0.3.5"])
488
+ s.add_dependency(%q<aruba>, ["~> 0.3.6"])
488
489
  s.add_dependency(%q<chef>, ["~> 0.9.12"])
489
490
  s.add_dependency(%q<grit>, ["~> 2.4.1"])
490
491
  s.add_dependency(%q<rvm>, ["~> 1.5.2"])
492
+ s.add_dependency(%q<open4>, [">= 0"])
491
493
  s.add_dependency(%q<rr>, ["~> 1.0.2"])
492
494
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
493
495
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -500,10 +502,11 @@ Gem::Specification.new do |s|
500
502
  s.add_dependency(%q<fakefs>, ["~> 0.3.1"])
501
503
  end
502
504
  else
503
- s.add_dependency(%q<aruba>, ["~> 0.3.5"])
505
+ s.add_dependency(%q<aruba>, ["~> 0.3.6"])
504
506
  s.add_dependency(%q<chef>, ["~> 0.9.12"])
505
507
  s.add_dependency(%q<grit>, ["~> 2.4.1"])
506
508
  s.add_dependency(%q<rvm>, ["~> 1.5.2"])
509
+ s.add_dependency(%q<open4>, [">= 0"])
507
510
  s.add_dependency(%q<rr>, ["~> 1.0.2"])
508
511
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
509
512
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -8,7 +8,8 @@ Feature: Cookbook Validity
8
8
  Given a default base Chef repository in "ckbk/scratch/myapp"
9
9
 
10
10
  Scenario: Clone from a Cookbook repository
11
- Given the remote Cookbook repository "features/data/repositories/cookbooks/hosts/.git"
11
+ Given Explanation: Next we step up two levels to escape Aruba's working folder
12
+ And the remote Cookbook repository "./../../features/data/repositories/cookbooks/hosts/.git"
12
13
  When I clone the remote Cookbook repository branch "master" to "ckbk/scratch/myapp/cookbooks/hosts"
13
14
  Then the local Cookbook repository exists
14
15
  And the local Cookbook "hosts" exists
@@ -28,13 +29,15 @@ Feature: Cookbook Validity
28
29
  Scenario: Clone multiple Cookbooks from a Cookbooks URI
29
30
  Given the remote Cookbooks URI "git://github.com/cookbooks/"
30
31
  When I clone the Cookbooks:
31
- |cookbook | branch | destination |
32
- | hosts | master | ckbk/scratch/myapp/cookbooks/hosts3 |
33
- | users | master | ckbk/scratch/myapp/cookbooks/users |
32
+ | cookbook | branch | tag | ref | destination |
33
+ | hosts | | 37s.0.1.0 | | ckbk/scratch/myapp/cookbooks/hosts3 |
34
+ | users | 37s | | | ckbk/scratch/myapp/cookbooks/users |
35
+ | xml | master | | b7a11ea4eb | ckbk/scratch/myapp/cookbooks/xml |
34
36
  And these local Cookbooks exist:
35
- |cookbook |
36
- | hosts3 |
37
- | users |
37
+ | cookbook |
38
+ | hosts3 |
39
+ | users |
40
+ | xml |
38
41
 
39
42
  Scenario: Clone multiple Site-Cookbooks from a Cookbooks URI
40
43
  Given the remote Cookbooks URI "git://github.com/cookbooks/"
@@ -20,19 +20,20 @@ Feature: Cookbook Metadata
20
20
  cookbook_path ["#{current_dir}/../cookbooks","#{current_dir}/../site-cookbooks"]
21
21
 
22
22
  """
23
- And the remote Cookbook repository "features/data/repositories/cookbooks/hosts/.git"
23
+ And Explanation: Next we step up two levels to escape Aruba's working folder
24
+ And the remote Cookbook repository "./../../features/data/repositories/cookbooks/hosts/.git"
24
25
  And I clone the remote Cookbook repository branch "master" to "ckbk/scratch/myapp/cookbooks/hosts"
25
26
  And the local Cookbook repository exists
26
27
 
27
28
  Scenario: Generate metadata for all cookbooks
28
- When I successfully generate all cookbook metadata
29
+ When I successfully generate all Cookbook metadata
29
30
  And the output should contain "DEBUG: Generated "
30
31
  And the output should not contain "DEBUG: No "
31
32
  Then the file "ckbk/scratch/myapp/cookbooks/hosts/metadata.json" exists
32
33
 
33
34
  Scenario: Generate metadata for a specific cookbook
34
35
  When we record the a-mtime of "ckbk/scratch/myapp/cookbooks/hosts/metadata.json"
35
- And I successfully generate cookbook "hosts" metadata
36
+ And I successfully generate Cookbook "hosts" metadata
36
37
  And the output should contain "DEBUG: Generated "
37
38
  And the output should not contain "DEBUG: No "
38
39
  Then the file "ckbk/scratch/myapp/cookbooks/hosts/metadata.json" exists
@@ -72,8 +72,11 @@ Feature: Reusable Chef Knife steps
72
72
 
73
73
  Scenario: Knife steps with path to knife.rb created earlier
74
74
  Given the Knife file "foo/bar/.chef/knife.rb"
75
- When I successfully run Knife's "node list"
76
- When the output should contain:
75
+ And Explanation: to check a list of Chef nodes
76
+ When the Nodes are:
77
+ | node |
78
+ | |
79
+ Then the output should contain:
77
80
  """
78
81
  DEBUG: Signing the request as bobo-admin
79
82
  DEBUG: Sending HTTP Request via GET to localhost:4000/nodes
@@ -83,7 +86,7 @@ Feature: Reusable Chef Knife steps
83
86
  Scenario: Upload a non-Git managed cookbook with path to knife.rb created earlier
84
87
  Given the Knife file "foo/bar/.chef/knife.rb"
85
88
  And I cd to "./../../"
86
- And a cookbook path "features/data/cookbooks_not_uploaded_at_feature_start"
89
+ And a Cookbook path "features/data/cookbooks_not_uploaded_at_feature_start"
87
90
  When I successfully run Knife's "cookbook upload version_updated"
88
91
  Then the output should contain:
89
92
  """
@@ -94,7 +97,7 @@ Feature: Reusable Chef Knife steps
94
97
  Scenario: Upload a Git managed cookbook with path to knife.rb created earlier
95
98
  Given the Knife file "foo/bar/.chef/knife.rb"
96
99
  And I cd to "./../../"
97
- And a cookbook path "features/data/repositories/cookbooks_not_uploaded_at_feature_start/version_updated"
100
+ And a Cookbook path "features/data/repositories/cookbooks_not_uploaded_at_feature_start/version_updated"
98
101
  When I successfully run Knife's "cookbook upload version_updated"
99
102
  Then the output should contain "INFO: Uploading files"
100
103
  And the output should contain "DEBUG: Committing sandbox"
@@ -132,7 +135,7 @@ Feature: Reusable Chef Knife steps
132
135
  Scenario: Auto upload and Delete a cookbook with path to knife.rb created earlier
133
136
  Given the Knife file "foo/bar/.chef/knife.rb"
134
137
  And I cd to "./../../"
135
- And a cookbooks path "features/data/repositories/cookbooks_not_uploaded_at_feature_start"
138
+ And a Cookbooks path "features/data/repositories/cookbooks_not_uploaded_at_feature_start"
136
139
  When I successfully run Knife's "cookbook upload version_updated"
137
140
  And I interactively run Knife's "cookbook delete version_updated 2.0.0"
138
141
  And I type "Y"
@@ -6,8 +6,8 @@
6
6
  # If you wish to mock a Chef server, see the Chef project's
7
7
  # features setup.
8
8
  #
9
- @announce @knife
10
- Background:
11
- Given the Chef server URI "http://localhost:4000"
12
- And the Chef admin client "bobo-admin" exists
13
- And a directory named "foo/bar"
9
+ #@announce @knife
10
+ #Background:
11
+ # Given the Chef server URI "http://localhost:4000"
12
+ # And the Chef admin client "bobo-admin" exists
13
+ # And a directory named "foo/bar"
@@ -10,11 +10,11 @@ Feature: Listing Cookbook steps
10
10
  Scenario: Common Chef
11
11
  Then these steps are defined for "cuken/cucumber/chef/cookbook.rb":
12
12
  | step |
13
- |a cookbook path "([^"]*)" |
14
- |a cookbooks path "([^"]*)" |
15
- |I successfully generate all cookbook metadata |
16
- |I successfully generate cookbook "([^"]*)" metadata |
17
- |the local cookbook "([^"]*)" exists |
13
+ |a Cookbook path "([^"]*)" |
14
+ |a Cookbooks path "([^"]*)" |
15
+ |I successfully generate all Cookbook metadata |
16
+ |I successfully generate Cookbook "([^"]*)" metadata |
17
+ |the local Cookbook "([^"]*)" exists |
18
18
 
19
19
  Scenario: Local and remote Cookbook repository commands
20
20
  Then these steps are defined for "cuken/cucumber/chef/cookbook.rb":
@@ -9,6 +9,7 @@ Feature: Listing Node steps
9
9
 
10
10
  Scenario: Common Node
11
11
  Then these steps are defined for "cuken/cucumber/chef/node.rb":
12
- | step |
13
- |a validated node |
14
- |the Chef nodes are: |
12
+ | step |
13
+ | a validated Node |
14
+ | the Node "([^"]*)" exists |
15
+ | the Nodes are: |
@@ -11,7 +11,7 @@ Feature: Examining files
11
11
 
12
12
  @steps
13
13
  Scenario: File exists
14
- Given the empty file "foo.file"
14
+ Given the file "foo.file" contains nothing
15
15
  Then the file "foo.file" exists
16
16
 
17
17
  @steps
@@ -20,7 +20,7 @@ Feature: Examining files
20
20
 
21
21
  @steps
22
22
  Scenario: Atime
23
- Given the empty file "foo.file"
23
+ Given the file "foo.file" contains nothing
24
24
  And we record the a-mtime of "foo.file"
25
25
  And I run `sleep 1`
26
26
  And I run `touch -a foo.file`
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  Then /^these steps are defined for "([^\"]*)":$/ do |file, table|
10
10
  rsc = ::Cucumber::Runtime::SupportCode.new 'ui', :autoload_code_paths => 'lib/cuken/cucumber'
11
- rsc.load_files! ["lib/#{file}", "#{ENV['GEM_HOME']}/gems/aruba-0.3.5/lib/aruba/cucumber.rb"]
11
+ rsc.load_files! ["lib/#{file}", "#{ENV['GEM_HOME']}/gems/aruba-0.3.6/lib/aruba/cucumber.rb"]
12
12
  sd_array = rsc.step_definitions
13
13
  #sd_array.each{|sd| puts sd.regexp_source}
14
14
  table.hashes.each do |hsh|
@@ -49,7 +49,7 @@ module ::Cuken
49
49
  end
50
50
 
51
51
  def chef
52
- @remote_chef_repo ||= "git://github.com/opscode/chef-repo.git"
52
+ @remote_chef_repo ||= "git://github.com/cookbooks/chef-repo.git"
53
53
  @knife_debug = true if @knife_debug.nil?
54
54
  @cookbooks_paths ||= []
55
55
  @cookbook_paths ||= []
@@ -99,6 +99,56 @@ module ::Cuken
99
99
  end
100
100
  end
101
101
 
102
+ def ensure_node_presence(node_name, expect_presence = true)
103
+ nd = node_show(node_name)
104
+ unless nd.class.to_s == 'Chef::Node' && nd.name == node_name
105
+ node_create(node_name)
106
+ end
107
+ nd = node_show(node_name)
108
+ nd.should be_an_instance_of(::Chef::Node)
109
+ nd.name.should == node_name
110
+ end
111
+
112
+ def node_show(node_name, attr = :all)
113
+ Pathname(chef.config_file).exist?.should be_true
114
+ argv = ['node', 'show', node_name, '--no-editor', '--config', chef.config_file]
115
+ unless attr == :all
116
+ argv << '--attribute' << attr
117
+ end
118
+ if Pathname(chef.config_file).exist?
119
+ with_args *argv do
120
+ ::Chef::Application::Knife.new.run
121
+ end
122
+ else
123
+ # TODO: no config file error handling
124
+ end
125
+ ::Chef::Knife.cuken
126
+ end
127
+
128
+ def node_role_load(hsh)
129
+ argv = ['node', 'run_list', 'add', hsh[:node], "role[#{hsh[:role]}]", '--no-editor', '--config', chef.config_file]
130
+ if Pathname(chef.config_file).exist?
131
+ with_args *argv do
132
+ ::Chef::Application::Knife.new.run
133
+ end
134
+ else
135
+ # TODO: no config file error handling
136
+ end
137
+ ::Chef::Knife.cuken
138
+ end
139
+
140
+ def node_create(node_name)
141
+ argv = ['node', 'create', node_name, '--no-editor', '--config', chef.config_file]
142
+ if Pathname(chef.config_file).exist?
143
+ with_args *argv do
144
+ ::Chef::Application::Knife.new.run
145
+ end
146
+ else
147
+ # TODO: no config file error handling
148
+ end
149
+ ::Chef::Knife.cuken
150
+ end
151
+
102
152
  end # class knife
103
153
 
104
154
  end # module Chef
@@ -23,6 +23,7 @@ module ::Cuken
23
23
  end
24
24
  end
25
25
 
26
+
26
27
  def update_cookbook_paths(ckbk_path, cookbook)
27
28
  lp = Pathname(ckbk_path).expand_path.realdirpath
28
29
  lrp = lp + '.git'
@@ -40,20 +41,32 @@ module ::Cuken
40
41
  end
41
42
  end
42
43
 
43
- def chef_clone_repo(ckbk_path, cookbook = false, repo = chef.remote_chef_repo, brnch = 'master')
44
+ def chef_clone_repo(ckbk_path, cookbook = false, repo = chef.remote_chef_repo, type = {'branch' => 'master'})
44
45
  in_current_dir do
45
46
  pth = Pathname(ckbk_path).expand_path
46
47
  gritty = ::Grit::Git.new(current_dir)
47
- $stdout.puts gritty.inspect
48
- clone_opts = {:quiet => false, :verbose => true, :progress => true, :branch => brnch}
48
+ announce_or_puts gritty.inspect
49
+ clone_opts = {:quiet => false, :verbose => true, :progress => true}
50
+ clone_opts[:branch] = type['branch'].empty? ? 'master' : type['branch']
51
+ type['tag'] = type['tag'].nil? ? '' : type['tag']
52
+ type['ref'] = type['ref'].nil? ? '' : type['ref']
49
53
  if pth.directory?
50
- $stdout.puts "Pulling: #{repo} into #{pth}"
51
- gritty.pull(clone_opts, repo, pth.to_s)
54
+ announce_or_puts "Pulling: #{repo} into #{pth}"
55
+ res = gritty.pull(clone_opts, repo, pth.to_s)
52
56
  else
53
- $stdout.puts "Cloning: #{repo} into #{pth}"
57
+ announce_or_puts "Cloning: #{repo} into #{pth}"
54
58
  res = gritty.clone(clone_opts, repo, pth.to_s)
55
59
  end
56
60
  update_cookbook_paths(pth, cookbook)
61
+ unless chef.cookbooks_paths.empty? # is empty after cloning default chef-repo
62
+ grotty = ::Grit::Git.new((pth + '.git').to_s)
63
+ grotty.checkout( { :b => true }, clone_opts[:branch] )
64
+ if !type['tag'].empty? || !type['ref'].empty?
65
+ grotty.checkout( { :B => true }, 'cuken', type['tag']||type['ref'] )
66
+ else
67
+ grotty.checkout( { :B => true }, 'cuken' )
68
+ end
69
+ end
57
70
  pth
58
71
  end
59
72
  end
data/lib/cuken/api/ssh.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'aruba/api' unless defined? Aruba::Api
2
- require 'ssh-forever' unless defined? SecureShellForever
2
+ require 'cuken/api/ssh-forever' unless defined? SecureShellForever
3
3
 
4
4
  module Cuken
5
5
  module Api
@@ -28,7 +28,7 @@ Given /^the Chef client "([^"]*)" exists$/ do |name|
28
28
  chef.client_name = name
29
29
  end
30
30
 
31
- Given /^the Chef admin client "([^"]*) exists"$/ do |name|
31
+ Given /^the Chef admin client "([^"]*)" exists$/ do |name|
32
32
  chef.show_client(:name => name)
33
33
  chef.admin_client_name = name
34
34
  end
@@ -61,7 +61,7 @@ Then /^the local Chef repository exists$/ do
61
61
  end
62
62
 
63
63
  Given /^I clone the remote Chef repository branch "([^"]*)" to "([^"]*)"$/ do |brnch, path|
64
- chef.local_chef_repo = chef_clone_repo(path, false, chef.remote_chef_repo, brnch)
64
+ chef.local_chef_repo = chef_clone_repo(path, false, chef.remote_chef_repo, {'branch' => brnch})
65
65
  chef.local_chef_repo.exist?.should be_true
66
66
  end
67
67
 
@@ -116,25 +116,28 @@ end
116
116
 
117
117
  Given /^I clone the remote Cookbook repository branch "([^"]*)" to "([^"]*)"$/ do |brnch, ckbk_path|
118
118
  if ckbk_path[/\/cookbooks\//]
119
- chef.local_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.remote_cookbook_repo, brnch)
119
+ chef.local_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.remote_cookbook_repo, {'branch' => brnch})
120
120
  elsif ckbk_path[/\/site-cookbooks\//]
121
- chef.local_site_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.remote_cookbook_repo, brnch)
121
+ chef.local_site_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.remote_cookbook_repo, {'branch' => brnch})
122
122
  end
123
123
  end
124
124
 
125
125
  Given /^I clone the Cookbook "([^"]*)" branch "([^"]*)" to "([^"]*)"$/ do |ckbk, brnch, ckbk_path|
126
126
  if ckbk_path[/\/cookbooks\//]
127
- chef.local_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.cookbooks_uri + ckbk + '.git', brnch)
127
+ chef.local_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.cookbooks_uri + ckbk + '.git', {'branch' => brnch})
128
128
  elsif ckbk_path[/\/site-cookbooks\//]
129
- chef.local_site_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.cookbooks_uri + ckbk + '.git', brnch)
129
+ chef.local_site_cookbook_repo = chef_clone_repo(ckbk_path, true, chef.cookbooks_uri + ckbk + '.git', {'branch' => brnch})
130
130
  end
131
131
  end
132
132
 
133
133
  When /^I clone the Cookbooks:$/ do |table|
134
134
  # table is a Cucumber::Ast::Table
135
135
  table.hashes.each do |hsh|
136
- #TODO: Accept cloning from tag and reference
137
- local_repo = chef_clone_repo(hsh['destination'], true, chef.cookbooks_uri + hsh['cookbook'] + '.git', hsh['branch'])
136
+ src = {}
137
+ src['branch'] = hsh['branch'] if hsh['branch']
138
+ src['tag'] = hsh['tag'] if hsh['tag']
139
+ src['ref'] = hsh['ref'] if hsh['ref']
140
+ local_repo = chef_clone_repo(hsh['destination'], true, chef.cookbooks_uri + hsh['cookbook'] + '.git', src )
138
141
  Pathname(local_repo).exist?.should be_true
139
142
  end
140
143
  end
@@ -26,6 +26,27 @@ Given /^a validated Node$/ do
26
26
  client.node.run_list << "integration_setup"
27
27
  end
28
28
 
29
+ Given /^the Node "([^"]*)" exists$/ do |node_name|
30
+ ensure_node_presence(node_name)
31
+ end
32
+
33
+ ###
34
+ # When
35
+ ###
36
+ When /^I add these Roles to the Nodes:$/ do |table|
37
+ table.hashes.each do |hsh|
38
+ node_role_load(hsh)
39
+ end
40
+ end
41
+
42
+ ###
43
+ # Then
44
+ ###
45
+ Then /^the Nodes are:$/ do |partial_output|
46
+ run_knife_command('node list')
47
+ all_stdout.should include(partial_output)
48
+ end
49
+
29
50
  #Given /^a Node "([^"]*)"$/ do |arg1|
30
51
  # pending # express the regexp above with the code you wish you had
31
52
  #end
@@ -1,4 +1,16 @@
1
1
 
2
+ Given /^Assumption: (.*)$/ do |msg|
3
+ announce_or_puts(msg)
4
+ end
5
+
6
+ Given /^Explanation: (.*)$/ do |msg|
7
+ announce_or_puts(msg)
8
+ end
9
+
10
+ Given /^Instruction: (.*)$/ do |msg|
11
+ announce_or_puts(msg)
12
+ end
13
+
2
14
  And /^wait "([^"]*)" seconds$/ do |delay|
3
15
  ::Kernel.sleep(delay.to_f)
4
16
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cuken
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.7
5
+ version: 0.1.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Hedgehog
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-17 00:00:00 Z
13
+ date: 2011-04-18 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aruba
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 0.3.5
22
+ version: 0.3.6
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: *id001
@@ -57,8 +57,19 @@ dependencies:
57
57
  prerelease: false
58
58
  version_requirements: *id004
59
59
  - !ruby/object:Gem::Dependency
60
- name: rr
60
+ name: open4
61
61
  requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: rr
72
+ requirement: &id006 !ruby/object:Gem::Requirement
62
73
  none: false
63
74
  requirements:
64
75
  - - ~>
@@ -66,10 +77,10 @@ dependencies:
66
77
  version: 1.0.2
67
78
  type: :development
68
79
  prerelease: false
69
- version_requirements: *id005
80
+ version_requirements: *id006
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: rspec
72
- requirement: &id006 !ruby/object:Gem::Requirement
83
+ requirement: &id007 !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ~>
@@ -77,10 +88,10 @@ dependencies:
77
88
  version: 2.5.0
78
89
  type: :development
79
90
  prerelease: false
80
- version_requirements: *id006
91
+ version_requirements: *id007
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: yard
83
- requirement: &id007 !ruby/object:Gem::Requirement
94
+ requirement: &id008 !ruby/object:Gem::Requirement
84
95
  none: false
85
96
  requirements:
86
97
  - - ~>
@@ -88,10 +99,10 @@ dependencies:
88
99
  version: 0.6.0
89
100
  type: :development
90
101
  prerelease: false
91
- version_requirements: *id007
102
+ version_requirements: *id008
92
103
  - !ruby/object:Gem::Dependency
93
104
  name: cucumber
94
- requirement: &id008 !ruby/object:Gem::Requirement
105
+ requirement: &id009 !ruby/object:Gem::Requirement
95
106
  none: false
96
107
  requirements:
97
108
  - - ">="
@@ -99,10 +110,10 @@ dependencies:
99
110
  version: "0"
100
111
  type: :development
101
112
  prerelease: false
102
- version_requirements: *id008
113
+ version_requirements: *id009
103
114
  - !ruby/object:Gem::Dependency
104
115
  name: bundler
105
- requirement: &id009 !ruby/object:Gem::Requirement
116
+ requirement: &id010 !ruby/object:Gem::Requirement
106
117
  none: false
107
118
  requirements:
108
119
  - - ~>
@@ -110,10 +121,10 @@ dependencies:
110
121
  version: 1.0.11
111
122
  type: :development
112
123
  prerelease: false
113
- version_requirements: *id009
124
+ version_requirements: *id010
114
125
  - !ruby/object:Gem::Dependency
115
126
  name: jeweler
116
- requirement: &id010 !ruby/object:Gem::Requirement
127
+ requirement: &id011 !ruby/object:Gem::Requirement
117
128
  none: false
118
129
  requirements:
119
130
  - - ~>
@@ -121,10 +132,10 @@ dependencies:
121
132
  version: 1.5.2
122
133
  type: :development
123
134
  prerelease: false
124
- version_requirements: *id010
135
+ version_requirements: *id011
125
136
  - !ruby/object:Gem::Dependency
126
137
  name: rcov
127
- requirement: &id011 !ruby/object:Gem::Requirement
138
+ requirement: &id012 !ruby/object:Gem::Requirement
128
139
  none: false
129
140
  requirements:
130
141
  - - ">="
@@ -132,10 +143,10 @@ dependencies:
132
143
  version: "0"
133
144
  type: :development
134
145
  prerelease: false
135
- version_requirements: *id011
146
+ version_requirements: *id012
136
147
  - !ruby/object:Gem::Dependency
137
148
  name: reek
138
- requirement: &id012 !ruby/object:Gem::Requirement
149
+ requirement: &id013 !ruby/object:Gem::Requirement
139
150
  none: false
140
151
  requirements:
141
152
  - - ~>
@@ -143,10 +154,10 @@ dependencies:
143
154
  version: 1.2.8
144
155
  type: :development
145
156
  prerelease: false
146
- version_requirements: *id012
157
+ version_requirements: *id013
147
158
  - !ruby/object:Gem::Dependency
148
159
  name: roodi
149
- requirement: &id013 !ruby/object:Gem::Requirement
160
+ requirement: &id014 !ruby/object:Gem::Requirement
150
161
  none: false
151
162
  requirements:
152
163
  - - ~>
@@ -154,10 +165,10 @@ dependencies:
154
165
  version: 2.1.0
155
166
  type: :development
156
167
  prerelease: false
157
- version_requirements: *id013
168
+ version_requirements: *id014
158
169
  - !ruby/object:Gem::Dependency
159
170
  name: fakefs
160
- requirement: &id014 !ruby/object:Gem::Requirement
171
+ requirement: &id015 !ruby/object:Gem::Requirement
161
172
  none: false
162
173
  requirements:
163
174
  - - ~>
@@ -165,7 +176,7 @@ dependencies:
165
176
  version: 0.3.1
166
177
  type: :development
167
178
  prerelease: false
168
- version_requirements: *id014
179
+ version_requirements: *id015
169
180
  description: Reusable Cucumber steps and API for post-convergence system integration descriptions
170
181
  email: hedgehogshiatus@gmail.com
171
182
  executables: []
@@ -622,7 +633,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
622
633
  requirements:
623
634
  - - ">="
624
635
  - !ruby/object:Gem::Version
625
- hash: -3536209968277030369
636
+ hash: 1162902324164620948
626
637
  segments:
627
638
  - 0
628
639
  version: "0"