cucumber-chef 3.0.0.rc.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/WIKI.md CHANGED
@@ -314,6 +314,83 @@ Displays information on the status of the current test lab containers:
314
314
  | mysql-test-1 | true | ubuntu | 192.168.0.220 | 00:00:5e:ea:fe:28 | Chef: 10.18.2 | true |
315
315
  +----------------------+-------+--------+---------------+-------------------+---------------+---------+
316
316
 
317
+ ## `cucumber-chef displayconfig`
318
+
319
+ Display various configuration information:
320
+
321
+ $ cucumber-chef displayconfig
322
+ cucumber-chef v3.0.0.rc.5
323
+ --------------------------------------------------------------------------------
324
+ ---
325
+ :mode: :user
326
+ :prerelease: true
327
+ :user: zpatten
328
+ :artifacts:
329
+ chef-client-log: /var/log/chef/client.log
330
+ chef-client-stacktrace: /var/chef/cache/chef-stacktrace.out
331
+ :chef:
332
+ :version: 10.24.0
333
+ :default_password: p@ssw0rd1
334
+ :render_client_rb: true
335
+ :cookbook_paths:
336
+ - cookbooks
337
+ - site-cookbooks
338
+ :test_lab:
339
+ :hostname: cucumber-chef
340
+ :tld: test-lab
341
+ :command_timeout: 1800
342
+ :provider: :vagrant
343
+ :aws:
344
+ :bootstrap_user: ubuntu
345
+ :lab_user: cucumber-chef
346
+ :lxc_user: root
347
+ :ssh:
348
+ :lab_port: 22
349
+ :lxc_port: 22
350
+ :ubuntu_release: precise
351
+ :aws_instance_arch: i386
352
+ :aws_instance_disk_store: ebs
353
+ :aws_instance_type: c1.medium
354
+ :aws_security_group: cucumber-chef
355
+ :identity_file:
356
+ :aws_access_key_id:
357
+ :aws_secret_access_key:
358
+ :aws_ssh_key_id:
359
+ :region: us-west-2
360
+ :availability_zone: us-west-2a
361
+ :vagrant:
362
+ :bootstrap_user: vagrant
363
+ :lab_user: cucumber-chef
364
+ :lxc_user: root
365
+ :ssh:
366
+ :lab_ip: 192.168.33.10
367
+ :lab_port: 22
368
+ :lxc_port: 22
369
+ :cpus: 4
370
+ :memory: 4096
371
+ :identity_file: /home/zpatten/.vagrant.d/insecure_private_key
372
+
373
+ --------------------------------------------------------------------------------
374
+ root_dir = "/home/zpatten/code/cc-chef-repo/vendor/checkouts/cucumber-chef"
375
+ home_dir = "/home/zpatten/code/cc-chef-repo/.cucumber-chef"
376
+ log_file = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/cucumber-chef.log"
377
+ artifacts_dir = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/vagrant/artifacts"
378
+ config_rb = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/config.rb"
379
+ labfile = "/home/zpatten/code/cc-chef-repo/Labfile"
380
+ chef_repo = "/home/zpatten/code/cc-chef-repo"
381
+ chef_user = "zpatten"
382
+ chef_identity = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/vagrant/zpatten.pem"
383
+ bootstrap_user = "vagrant"
384
+ bootstrap_user_home_dir = "/home/vagrant"
385
+ bootstrap_identity = "/home/zpatten/.vagrant.d/insecure_private_key"
386
+ lab_user = "cucumber-chef"
387
+ lab_user_home_dir = "/home/cucumber-chef"
388
+ lab_identity = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/vagrant/id_rsa-cucumber-chef"
389
+ lxc_user = "root"
390
+ lxc_user_home_dir = "/root"
391
+ lxc_identity = "/home/zpatten/code/cc-chef-repo/.cucumber-chef/vagrant/id_rsa-root"
392
+ chef_pre_11 = true
393
+ --------------------------------------------------------------------------------
317
394
 
318
395
  # RESOURCES
319
396
 
data/bin/cucumber-chef CHANGED
@@ -18,8 +18,6 @@ class CucumberChef < Thor
18
18
 
19
19
  CucumberChef.source_root(source_dir)
20
20
 
21
- get_aws_credentials
22
-
23
21
  templates = {
24
22
  "config-rb.erb" => "config.rb"
25
23
  }
@@ -70,51 +68,6 @@ class CucumberChef < Thor
70
68
  exit(255)
71
69
  end
72
70
 
73
- def get_aws_credentials
74
- say "OHAI!", :magenta
75
- puts
76
- say "Cucumber-Chef uses Amazon Web Services to build a test lab for automated infrastructure testing."
77
- say "I need a few details before I can set up your test lab for you."
78
- puts
79
- say "We're going to use symmetric keys to authenticate with the AWS API."
80
- say "First, I need your access key."
81
- say "Your access key identifies you as you make API calls. It's not a secret."
82
- say "You can find it under 'Access Credentials', on https://aws-portal.amazon.com/gp/aws/securityCredentials"
83
- puts
84
- @aws_access_key = ask "What is your AWS Access Key?", :bold
85
- puts
86
- say "Now I need your secret access key. This *is* a secret. The clue's in the name."
87
- say "This is just a string of characters used to create the digital signature included in your API requests."
88
- say "You can also find this under 'Access Credentials', on https://aws-portal.amazon.com/gp/aws/securityCredentials"
89
- puts
90
- @aws_secret_access_key = ask "What is your AWS Secret Access Key?", :bold
91
- puts
92
- say "Right. Now I need to know about the ssh key pair you want to use to connect to EC2 machines."
93
- say "I need the name of the key pair. You can see this on the AWS management console, under Network & Security > Key Pairs"
94
- puts
95
- @aws_ssh_id = ask "What is your AWS Key Pair called?", :bold
96
- puts
97
- say "I also need to know what the ssh key is called - the actual name of the file on your local machine, eg #{@aws_ssh_id}.pem"
98
- puts
99
- @aws_ssh_key = ask "What's the filename of your ssh key?", :bold
100
- puts
101
- say "And, finally, I need to know where you keep it, on the file system. Often this is ~/.ssh"
102
- puts
103
- @aws_ssh_key_dir = ask "What directory contains your ssh key?", :bold
104
- puts
105
- say "OK, nearly there. AWS uses different keys depending on which region you use."
106
- say "For example, 'us-east', 'us-west', or 'eu-west'"
107
- puts
108
- @region = ask "Which region are you using?", :bold
109
- puts
110
- say("One last thing. If you're using librarian-chef, we want to be sure all the hooks are in place.")
111
- puts
112
- @librarian_chef = yes?("Does this chef-repo use librarian-chef?", :bold)
113
- puts
114
- say "Awesome. Thank you!"
115
- puts
116
- end
117
-
118
71
  end
119
72
 
120
73
  ################################################################################
@@ -513,9 +466,11 @@ class CucumberChef < Thor
513
466
  "config_rb" => Cucumber::Chef.config_rb,
514
467
  "labfile" => Cucumber::Chef.labfile,
515
468
  "chef_repo" => Cucumber::Chef.chef_repo,
516
- "bootstrap_identity" => Cucumber::Chef.bootstrap_identity,
517
469
  "chef_user" => Cucumber::Chef.chef_user,
518
470
  "chef_identity" => Cucumber::Chef.chef_identity,
471
+ "bootstrap_user" => Cucumber::Chef.bootstrap_user,
472
+ "bootstrap_user_home_dir" => Cucumber::Chef.bootstrap_user_home_dir,
473
+ "bootstrap_identity" => Cucumber::Chef.bootstrap_identity,
519
474
  "lab_user" => Cucumber::Chef.lab_user,
520
475
  "lab_user_home_dir" => Cucumber::Chef.lab_user_home_dir,
521
476
  "lab_identity" => Cucumber::Chef.lab_identity,
@@ -27,48 +27,64 @@
27
27
  package p
28
28
  end
29
29
 
30
- [ node.cucumber_chef.lab_user, node.cucumber_chef.lxc_user ].flatten.each do |user|
31
- home_dir = (user == "root" ? "/#{user}" : "/home/#{user}")
30
+ [ node.cucumber_chef.lab_user, node.cucumber_chef.lxc_user ].each do |username|
31
+ home_dir = ((username.downcase == "root") ? "/#{username}" : "/home/#{username}")
32
+
33
+ user username do
34
+ comment username
35
+ home home_dir
36
+ shell "/bin/bash"
37
+ supports :manage_home => true
38
+ end
39
+
40
+ directory "create home directory for #{username}" do
41
+ path home_dir
42
+ owner username
43
+ group username
44
+ mode "0700"
32
45
 
33
- directory "create .ssh directory for #{user}" do
46
+ not_if { File.directory?(File.join(home_dir)) }
47
+ end
48
+
49
+ directory "create .ssh directory for #{username}" do
34
50
  path "#{home_dir}/.ssh"
35
- owner user
36
- group user
51
+ owner username
52
+ group username
37
53
  mode "0700"
38
54
 
39
55
  not_if { File.directory?(File.join(home_dir, ".ssh")) }
40
56
  end
41
57
 
42
- template "create ssh config for #{user}" do
58
+ template "create ssh config for #{username}" do
43
59
  path "#{home_dir}/.ssh/config"
44
60
  source "ssh-config.erb"
45
- owner user
46
- group user
61
+ owner username
62
+ group username
47
63
  mode "0600"
48
64
 
49
65
  not_if { File.exists?(File.join(home_dir, ".ssh", "config")) }
50
66
  end
51
67
 
52
- execute "generate ssh keypair for #{user}" do
68
+ execute "generate ssh keypair for #{username}" do
53
69
  command "ssh-keygen -q -N '' -f #{home_dir}/.ssh/id_rsa"
54
70
 
55
71
  not_if { File.exists?(File.join(home_dir, ".ssh", "id_rsa")) }
56
72
  end
57
73
 
58
- file "ensure ssh private key ownership for #{user}" do
74
+ file "ensure ssh private key ownership for #{username}" do
59
75
  path "#{home_dir}/.ssh/id_rsa"
60
- owner user
61
- group user
76
+ owner username
77
+ group username
62
78
  mode "0400"
63
79
  end
64
80
 
65
- file "ensure ssh public key ownership for #{user}" do
81
+ file "ensure ssh public key ownership for #{username}" do
66
82
  path "#{home_dir}/.ssh/id_rsa.pub"
67
- owner user
68
- group user
83
+ owner username
84
+ group username
69
85
  end
70
86
 
71
- execute "copy public key into authorized_keys for #{user}" do
87
+ execute "copy public key into authorized_keys for #{username}" do
72
88
  command "cat #{home_dir}/.ssh/id_rsa.pub | tee -a #{home_dir}/.ssh/authorized_keys"
73
89
 
74
90
  not_if do
@@ -76,6 +92,13 @@ end
76
92
  ($? == 0)
77
93
  end
78
94
  end
95
+
96
+ file "ensure ssh authorized_keys ownership for #{username}" do
97
+ path "#{home_dir}/.ssh/authorized_keys"
98
+ owner username
99
+ group username
100
+ end
101
+
79
102
  end
80
103
 
81
104
  file "remove update-motd" do
@@ -111,16 +134,3 @@ execute "set chef-client logging to debug" do
111
134
  ($? == 0)
112
135
  end
113
136
  end
114
-
115
-
116
- ################################################################################
117
- # CHEF-SOLR / APACHE SOLR
118
- ################################################################################
119
-
120
- # template "install custom solr config" do
121
- # path "/var/lib/chef/solr/conf/solrconfig.xml"
122
- # source "solrconfig.erb"
123
- # owner "chef"
124
- # group "chef"
125
- # mode "0644"
126
- # end
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
46
46
  s.add_dependency("rake", ">= 0.9.2")
47
47
  s.add_dependency("thor", ">= 0.15.2")
48
48
  s.add_dependency("ubuntu_ami", ">= 0.4.0")
49
- s.add_dependency("ztk", ">= 1.0.8")
49
+ s.add_dependency("ztk", ">= 1.0.9")
50
50
 
51
51
  s.add_development_dependency("simplecov", ">= 0.6.4")
52
52
  s.add_development_dependency("pry", ">= 0")
@@ -49,32 +49,30 @@ module Cucumber
49
49
 
50
50
  # PUSH CHEF-REPO
51
51
  #################
52
- if environment_variable_set?("PUSH")
53
- # Upload all of the chef-repo environments
54
- ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo environments to the test lab", :mark => "completed in %0.4f seconds.") do
55
- @test_lab.knife_cli(%(environment from file ./environments/*.rb), :silence => true)
56
- end
57
52
 
58
- # Upload all of the chef-repo cookbooks
59
- ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo cookbooks to the test lab", :mark => "completed in %0.4f seconds.") do
60
- cookbook_paths = ["./cookbooks"]
61
- cookbook_paths << "./site-cookbooks" if Cucumber::Chef::Config.librarian_chef
62
- @test_lab.knife_cli(%(cookbook upload --all --cookbook-path #{cookbook_paths.join(':')} --force), :silence => true)
63
- end
53
+ # Upload all of the chef-repo environments
54
+ ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo environments to the test lab", :mark => "completed in %0.4f seconds.") do
55
+ @test_lab.knife_cli(%(environment from file ./environments/*.rb), :silence => true)
56
+ end
64
57
 
65
- # Upload all of the chef-repo roles
66
- ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo roles to the test lab", :mark => "completed in %0.4f seconds.") do
67
- @test_lab.knife_cli(%(role from file ./roles/*.rb), :silence => true)
68
- end
58
+ # Upload all of the chef-repo cookbooks
59
+ ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo cookbooks to the test lab", :mark => "completed in %0.4f seconds.") do
60
+ cookbook_paths = Cucumber::Chef::Config.chef[:cookbook_paths]
61
+ @test_lab.knife_cli(%(cookbook upload --all --cookbook-path #{cookbook_paths.join(':')} --force), :silence => true)
62
+ end
69
63
 
70
- # Upload all of our chef-repo data bags
71
- Dir.glob("./data_bags/*").each do |data_bag_path|
72
- next if !File.directory?(data_bag_path)
73
- ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo data bag '#{File.basename(data_bag_path)}' to the test lab", :mark => "completed in %0.4f seconds.") do
74
- data_bag = File.basename(data_bag_path)
75
- @test_lab.knife_cli(%(data bag create "#{data_bag}"), :silence => true)
76
- @test_lab.knife_cli(%(data bag from file "#{data_bag}" "#{data_bag_path}"), :silence => true)
77
- end
64
+ # Upload all of the chef-repo roles
65
+ ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo roles to the test lab", :mark => "completed in %0.4f seconds.") do
66
+ @test_lab.knife_cli(%(role from file ./roles/*.rb), :silence => true)
67
+ end
68
+
69
+ # Upload all of our chef-repo data bags
70
+ Dir.glob("./data_bags/*").each do |data_bag_path|
71
+ next if !File.directory?(data_bag_path)
72
+ ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo data bag '#{File.basename(data_bag_path)}' to the test lab", :mark => "completed in %0.4f seconds.") do
73
+ data_bag = File.basename(data_bag_path)
74
+ @test_lab.knife_cli(%(data bag create "#{data_bag}"), :silence => true)
75
+ @test_lab.knife_cli(%(data bag from file "#{data_bag}" "#{data_bag_path}"), :silence => true)
78
76
  end
79
77
  end
80
78
 
@@ -170,18 +170,15 @@ module Cucumber
170
170
  mode :user
171
171
  prerelease (Cucumber::Chef.is_rc? ? true : false)
172
172
 
173
- librarian_chef false
174
-
175
173
  user (ENV['OPSCODE_USER'] || ENV['USER'])
176
174
 
177
175
  artifacts ({"chef-client-log" => "/var/log/chef/client.log",
178
176
  "chef-client-stacktrace" => "/var/chef/cache/chef-stacktrace.out"})
179
177
 
180
- chef ({:client_version => "10.18.2",
181
- :server_version => "10.18.2",
182
- :amqp_password => "p@ssw0rd1",
183
- :admin_password => "p@ssw0rd1",
184
- :render_client_rb => true})
178
+ chef ({:version => "latest",
179
+ :default_password => "p@ssw0rd1",
180
+ :render_client_rb => true,
181
+ :cookbook_paths => %w(cookbooks)})
185
182
 
186
183
  test_lab ({:hostname => "cucumber-chef",
187
184
  :tld => "test-lab"})
@@ -190,7 +187,8 @@ module Cucumber
190
187
 
191
188
  provider :vagrant
192
189
 
193
- aws ({:lab_user => "ubuntu",
190
+ aws ({:bootstrap_user => "ubuntu",
191
+ :lab_user => "cucumber-chef",
194
192
  :lxc_user => "root",
195
193
  :ssh => {
196
194
  :lab_port => 22,
@@ -202,12 +200,16 @@ module Cucumber
202
200
  :aws_instance_type => "m1.small",
203
201
  :aws_security_group => "cucumber-chef"})
204
202
 
205
- vagrant ({:lab_user => "vagrant",
203
+ vagrant ({:bootstrap_user => "vagrant",
204
+ :lab_user => "cucumber-chef",
206
205
  :lxc_user => "root",
207
206
  :ssh => {
207
+ :lab_ip => "127.0.0.1",
208
208
  :lab_port => 2222,
209
209
  :lxc_port => 22
210
- } })
210
+ },
211
+ :cpus => 1,
212
+ :memory => 1024 })
211
213
 
212
214
  ################################################################################
213
215
 
@@ -229,7 +229,7 @@ module Cucumber
229
229
  @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'locale-gen'), :silence => true)
230
230
  @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'locale-gen en_US'), :silence => true)
231
231
  @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'wget http://www.opscode.com/chef/install.sh'), :silence => true)
232
- @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'bash install.sh -v #{Cucumber::Chef::Config.chef[:server_version]}'), :silence => true)
232
+ @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'bash install.sh -v #{Cucumber::Chef::Config.chef[:version]}'), :silence => true)
233
233
  if distro.downcase == "fedora"
234
234
  @test_lab.bootstrap_ssh.exec(%(sudo chroot #{cache_rootfs} /bin/bash -c 'rpm -Uvh --nodeps /tmp/*rpm'), :silence => true)
235
235
  end
@@ -237,13 +237,16 @@ module Cucumber
237
237
  @test_lab.bootstrap_ssh.exec(%(sudo #{create_command(name, distro, release, arch)}), :silence => true)
238
238
  end
239
239
 
240
- lab_ssh_path = File.join(Cucumber::Chef.lab_user_home_dir, ".ssh")
241
- ssh_path = File.join(root(name), Cucumber::Chef.lxc_user_home_dir, ".ssh")
240
+ lab_user_ssh_path = File.join(Cucumber::Chef.lab_user_home_dir, ".ssh")
241
+ lxc_user_ssh_path = File.join(Cucumber::Chef.lxc_user_home_dir, ".ssh")
242
+
243
+ lxc_ssh_path = File.join(root(name), Cucumber::Chef.lxc_user_home_dir, ".ssh")
242
244
  motd_path = File.join(root(name), "etc", "motd")
243
245
 
244
- @test_lab.bootstrap_ssh.exec(%(sudo mkdir -vp #{ssh_path}), :silence => true)
245
- @test_lab.bootstrap_ssh.exec(%(sudo chmod 0700 #{ssh_path}), :silence => true)
246
- @test_lab.bootstrap_ssh.exec(%(sudo cat #{File.join(lab_ssh_path, "id_rsa.pub")} | sudo tee -a #{File.join(ssh_path, "authorized_keys")}), :silence => true)
246
+ @test_lab.bootstrap_ssh.exec(%(sudo mkdir -vp #{lxc_ssh_path}), :silence => true)
247
+ @test_lab.bootstrap_ssh.exec(%(sudo chmod 0700 #{lxc_ssh_path}), :silence => true)
248
+ @test_lab.bootstrap_ssh.exec(%(sudo cat #{File.join(lab_user_ssh_path, "id_rsa.pub")} | sudo tee -a #{File.join(lxc_ssh_path, "authorized_keys")}), :silence => true)
249
+ @test_lab.bootstrap_ssh.exec(%(sudo cat #{File.join(lxc_user_ssh_path, "id_rsa.pub")} | sudo tee -a #{File.join(lxc_ssh_path, "authorized_keys")}), :silence => true)
247
250
 
248
251
  @test_lab.bootstrap_ssh.exec(%(sudo rm -vf #{motd_path}), :silence => true)
249
252
  @test_lab.bootstrap_ssh.exec(%(sudo cp -v /etc/motd #{motd_path}), :silence => true)
@@ -71,6 +71,10 @@ module Cucumber
71
71
 
72
72
  ################################################################################
73
73
 
74
+ def ip
75
+ (Cucumber::Chef.lab_ip || super(:ip))
76
+ end
77
+
74
78
  def port
75
79
  (Cucumber::Chef.lab_ssh_port || super(:port))
76
80
  end
@@ -44,7 +44,20 @@ module Cucumber
44
44
 
45
45
  def create
46
46
  ZTK::Benchmark.bench(:message => "Creating #{Cucumber::Chef::Config.provider.upcase} instance", :mark => "completed in %0.4f seconds.", :stdout => @stdout) do
47
- self.vagrant_cli("up")
47
+
48
+ context = {
49
+ :ip => Cucumber::Chef.lab_ip,
50
+ :cpus => Cucumber::Chef::Config.vagrant[:cpus],
51
+ :memory => Cucumber::Chef::Config.vagrant[:memory]
52
+ }
53
+
54
+ vagrantfile_template = File.join(Cucumber::Chef.root_dir, "lib", "cucumber", "chef", "templates", "cucumber-chef", "Vagrantfile.erb")
55
+
56
+ vagrantfile = File.join(Cucumber::Chef.chef_repo, "Vagrantfile")
57
+
58
+ !File.exists?(vagrantfile) and IO.write(vagrantfile, ::ZTK::Template.render(vagrantfile_template, context))
59
+
60
+ self.vagrant_cli("up", id)
48
61
  ZTK::TCPSocketCheck.new(:host => self.ip, :port => self.port, :wait => 120).wait
49
62
  end
50
63
 
@@ -62,7 +75,7 @@ module Cucumber
62
75
 
63
76
  def destroy
64
77
  if exists?
65
- self.vagrant_cli("destroy", "--force")
78
+ self.vagrant_cli("destroy", "--force", id)
66
79
  else
67
80
  raise VagrantError, "We could not find a test lab!"
68
81
  end
@@ -79,7 +92,7 @@ module Cucumber
79
92
 
80
93
  def up
81
94
  if (exists? && dead?)
82
- self.vagrant_cli("up")
95
+ self.vagrant_cli("up", id)
83
96
  ZTK::TCPSocketCheck.new(:host => self.ip, :port => self.port, :wait => 120).wait
84
97
  else
85
98
  raise VagrantError, "We could not find a powered off test lab."
@@ -97,7 +110,7 @@ module Cucumber
97
110
 
98
111
  def down
99
112
  if (exists? && alive?)
100
- self.vagrant_cli("halt")
113
+ self.vagrant_cli("halt", id)
101
114
  else
102
115
  raise AWSError, "We could not find a running test lab."
103
116
  end
@@ -114,7 +127,7 @@ module Cucumber
114
127
 
115
128
  def reload
116
129
  if (exists? && alive?)
117
- self.vagrant_cli("reload")
130
+ self.vagrant_cli("reload", id)
118
131
  else
119
132
  raise AWSError, "We could not find a running test lab."
120
133
  end
@@ -142,7 +155,7 @@ module Cucumber
142
155
  ################################################################################
143
156
 
144
157
  def id
145
- "default"
158
+ "test-lab-#{ENV['USER']}".downcase
146
159
  end
147
160
 
148
161
  def state