Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'CHEF-1715'

  • Loading branch information...
commit 11ef5a97f55ff7df902c3160053d6a8a4c975c47 2 parents 31ef731 + 965d44c
@danielsdeleo danielsdeleo authored
Showing with 481 additions and 116 deletions.
  1. +1 −0  .gitignore
  2. +1 −1  chef-server-api/app/models/sandbox_file.rb
  3. +1 −1  chef-server-api/public/stylesheets/themes/blue/style.css
  4. +1 −1  chef-server-api/public/stylesheets/themes/default/style.css
  5. +1 −1  chef-server-api/public/stylesheets/themes/djime-cerulean/style.css
  6. +1 −1  chef-server-api/public/stylesheets/themes/orange/style.css
  7. +1 −1  chef-server-api/spec/unit/sandbox_file_spec.rb
  8. +1 −1  chef-server-webui/app/helpers/global_helpers.rb
  9. +1 −1  chef-server-webui/app/helpers/nodes_helper.rb
  10. +1 −1  chef-server-webui/app/helpers/openid_server_helpers.rb
  11. +1 −1  chef-server-webui/app/helpers/search_helper.rb
  12. +1 −1  chef-server-webui/app/views/databags/show.html.haml
  13. +1 −1  chef-server-webui/app/views/nodes/_action.html.haml
  14. +1 −1  chef-server-webui/app/views/openid_register/show.html.haml
  15. +1 −1  chef-server-webui/app/views/search/index.html.haml
  16. +1 −1  chef-server-webui/app/views/search/show.html.haml
  17. +1 −1  chef-server-webui/app/views/search_entries/index.html.haml
  18. +1 −1  chef-server-webui/app/views/search_entries/show.html.haml
  19. +1 −1  chef-server-webui/app/views/users/login.html.haml
  20. +1 −1  chef-server-webui/app/views/users/show.html.haml
  21. +1 −1  chef-server-webui/public/stylesheets/themes/blue/style.css
  22. +1 −1  chef-server-webui/public/stylesheets/themes/default/style.css
  23. +1 −1  chef-server-webui/public/stylesheets/themes/djime-cerulean/style.css
  24. +1 −1  chef-server-webui/public/stylesheets/themes/orange/style.css
  25. +1 −1  chef-server/lib/chef-server.rb
  26. +34 −1 chef/distro/common/markdown/knife.mkd
  27. +1 −1  chef/lib/chef/application/agent.rb
  28. +1 −1  chef/lib/chef/cookbook/syntax_check.rb
  29. +1 −1  chef/lib/chef/index_queue/amqp_client.rb
  30. +1 −1  chef/lib/chef/index_queue/consumer.rb
  31. +54 −0 chef/lib/chef/knife/bluebox_images_list.rb
  32. +157 −0 chef/lib/chef/knife/bluebox_server_create.rb
  33. +63 −0 chef/lib/chef/knife/bluebox_server_delete.rb
  34. +59 −0 chef/lib/chef/knife/bluebox_server_list.rb
  35. +1 −1  chef/lib/chef/knife/bootstrap/centos5-gems.erb
  36. +1 −1  chef/lib/chef/knife/bootstrap/fedora13-gems.erb
  37. +1 −1  chef/lib/chef/knife/exec.rb
  38. +1 −1  chef/lib/chef/mixin/create_path.rb
  39. +1 −1  chef/lib/chef/mixin/recipe_definition_dsl_core.rb
  40. +1 −1  chef/lib/chef/provider/breakpoint.rb
  41. +1 −1  chef/lib/chef/provider/cookbook_file.rb
  42. +1 −1  chef/lib/chef/provider/deploy/timestamped.rb
  43. +1 −1  chef/lib/chef/provider/group/pw.rb
  44. +1 −1  chef/lib/chef/provider/package/easy_install.rb
  45. +1 −1  chef/lib/chef/provider/service/windows.rb
  46. +1 −1  chef/lib/chef/provider/user/pw.rb
  47. +1 −1  chef/lib/chef/resource/deploy_revision.rb
  48. +1 −1  chef/lib/chef/resource_collection/stepable_iterator.rb
  49. +1 −1  chef/lib/chef/run_status.rb
  50. +1 −1  chef/lib/chef/shef.rb
  51. +1 −1  chef/lib/chef/shef/model_wrapper.rb
  52. +1 −1  chef/lib/chef/shef/shef_rest.rb
  53. +1 −1  chef/spec/data/knife_subcommand/test_yourself.rb
  54. +1 −1  chef/spec/functional/knife/cookbook_delete_spec.rb
  55. +1 −1  chef/spec/functional/knife/exec_spec.rb
  56. +1 −1  chef/spec/unit/file_access_control_spec.rb
  57. +1 −1  chef/spec/unit/log_spec.rb
  58. +1 −1  chef/spec/unit/mixin/convert_to_class_name_spec.rb
  59. +1 −1  chef/spec/unit/mixin/deprecation_spec.rb
  60. +1 −1  chef/spec/unit/provider/breakpoint_spec.rb
  61. +1 −1  chef/spec/unit/provider/deploy/revision_spec.rb
  62. +1 −1  chef/spec/unit/provider/deploy/timestamped_spec.rb
  63. +1 −1  chef/spec/unit/provider/directory_spec.rb
  64. +1 −1  chef/spec/unit/provider/group_spec.rb
  65. +1 −1  chef/spec/unit/provider/package/easy_install_spec.rb
  66. +1 −1  chef/spec/unit/provider/package/solaris_spec.rb
  67. +1 −1  chef/spec/unit/provider/remote_file_spec.rb
  68. +1 −1  chef/spec/unit/provider/service/arch_service_spec.rb
  69. +1 −1  chef/spec/unit/provider/service/init_service_spec.rb
  70. +1 −1  chef/spec/unit/provider/service/simple_service_spec.rb
  71. +1 −1  chef/spec/unit/provider/user/dscl_spec.rb
  72. +1 −1  chef/spec/unit/provider/user/pw_spec.rb
  73. +1 −1  chef/spec/unit/provider/user/windows_spec.rb
  74. +1 −1  chef/spec/unit/provider/user_spec.rb
  75. +1 −1  chef/spec/unit/resource/apt_package_spec.rb
  76. +1 −1  chef/spec/unit/resource/bash_spec.rb
  77. +1 −1  chef/spec/unit/resource/breakpoint_spec.rb
  78. +1 −1  chef/spec/unit/resource/csh_spec.rb
  79. +1 −1  chef/spec/unit/resource/deploy_revision_spec.rb
  80. +1 −1  chef/spec/unit/resource/directory_spec.rb
  81. +1 −1  chef/spec/unit/resource/dpkg_package_spec.rb
  82. +1 −1  chef/spec/unit/resource/http_request_spec.rb
  83. +1 −1  chef/spec/unit/resource/pacman_package_spec.rb
  84. +1 −1  chef/spec/unit/resource/perl_spec.rb
  85. +1 −1  chef/spec/unit/resource/portage_package_spec.rb
  86. +1 −1  chef/spec/unit/resource/python_spec.rb
  87. +1 −1  chef/spec/unit/resource/ruby_spec.rb
  88. +1 −1  chef/spec/unit/resource/subversion_spec.rb
  89. +1 −1  chef/spec/unit/resource/timestamped_deploy_spec.rb
  90. +1 −1  chef/spec/unit/run_status_spec.rb
  91. +1 −1  chef/spec/unit/shef/model_wrapper_spec.rb
  92. +1 −1  chef/spec/unit/webui_user_spec.rb
  93. +1 −1  features/api/cookbooks/list_cookbooks.feature
  94. +1 −1  features/api/roles/create_role_api.feature
  95. +1 −1  features/api/roles/update_roles_api.feature
  96. +1 −1  features/data/cookbooks/delayed_notifications/recipes/notify_a_resource_from_a_single_source.rb
  97. +1 −1  features/data/cookbooks/deploy/recipes/callbacks.rb
  98. +1 −1  features/data/cookbooks/deploy/recipes/embedded_recipe_callbacks.rb
  99. +1 −1  features/data/cookbooks/integration_setup/attributes/integration.rb
  100. +1 −1  features/data/cookbooks/manage_files/recipes/create_a_file.rb
  101. +1 −1  features/data/cookbooks/manage_files/recipes/delete_a_file.rb
  102. +1 −1  features/data/cookbooks/manage_files/recipes/delete_a_file_that_does_not_already_exist.rb
  103. +1 −1  features/data/cookbooks/manage_files/recipes/set_the_owner_of_a_created_file.rb
  104. +1 −1  features/data/cookbooks/manage_files/recipes/touch_a_file.rb
  105. +1 −1  features/data/cookbooks/packages/recipes/gem_package.rb
  106. +1 −1  features/data/cookbooks/packages/recipes/install_gem_noshell.rb
  107. +1 −1  features/data/cookbooks/packages/recipes/manually_upgrade_gem_package.rb
  108. +1 −1  features/data/cookbooks/packages/recipes/upgrade_gem_noshell.rb
  109. +1 −1  features/data/cookbooks/packages/recipes/upgrade_gem_package.rb
  110. +1 −1  features/data/cookbooks/transfer_remote_files/recipes/should_prefer_the_file_for_this_specific_host.rb
  111. +1 −1  features/data/cookbooks/transfer_remote_files/recipes/transfer_a_file_from_a_cookbook.rb
  112. +1 −1  ...a/cookbooks_not_uploaded_at_feature_start/testcookbook_valid_v0.1.0_with_different_dependencies/metadata.rb
  113. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.1.0/metadata.rb
  114. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.1.1/metadata.rb
  115. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.10.0/metadata.rb
  116. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.2.0/metadata.rb
  117. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.9.0/metadata.rb
  118. +1 −1  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.9.7/metadata.rb
  119. +1 −1  features/steps/cookbook_steps.rb
  120. +0 −2  features/steps/packages.rb
View
1  .gitignore
@@ -27,3 +27,4 @@ erl_crash.dump
.idea
features/data/repo/checksums/
*.rbc
+.rvmrc
View
2  chef-server-api/app/models/sandbox_file.rb
@@ -117,4 +117,4 @@ def commit_tempfile_to(destination_file_path)
end
-end
View
2  chef-server-api/public/stylesheets/themes/blue/style.css
@@ -277,4 +277,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-api/public/stylesheets/themes/default/style.css
@@ -264,4 +264,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-api/public/stylesheets/themes/djime-cerulean/style.css
@@ -295,4 +295,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-api/public/stylesheets/themes/orange/style.css
@@ -260,4 +260,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-api/spec/unit/sandbox_file_spec.rb
@@ -141,4 +141,4 @@
end
-end
View
2  chef-server-webui/app/helpers/global_helpers.rb
@@ -36,4 +36,4 @@
# end
# end
# end
-#
View
2  chef-server-webui/app/helpers/nodes_helper.rb
@@ -40,4 +40,4 @@
# end
# end
# end
-#
View
2  chef-server-webui/app/helpers/openid_server_helpers.rb
@@ -29,4 +29,4 @@
# end
# end
# end
-#
View
2  chef-server-webui/app/helpers/search_helper.rb
@@ -41,4 +41,4 @@
# end
# end
# end # Merb
-#
View
2  chef-server-webui/app/views/databags/show.html.haml
@@ -16,4 +16,4 @@
%td
= link_to('Edit', url(:edit_databag_databag_item, :id => databag_item_uri[0], :databag_id => @databag_name))
|
- = link_to('Delete', url(:databag_databag_item, :id => databag_item_uri[0], :databag_id => @databag_name), :method => "delete", :confirm => "Really delete Databag Item #{databag_item_uri[0]}? There is no undo.")
View
2  chef-server-webui/app/views/nodes/_action.html.haml
@@ -10,4 +10,4 @@
%td
- resource_hash[rk].each do |resource|
= partial(:resource, :resource => resource)
-
View
2  chef-server-webui/app/views/openid_register/show.html.haml
@@ -4,4 +4,4 @@
.inner
= link_to "OpenID URL", url(:openid_node, { :id => @registered_node.name.gsub(/\./, "_")})
%br= "Validated: #{@registered_node.validated}"
- %br= "Admin: #{@registered_node.admin}"
View
2  chef-server-webui/app/views/search/index.html.haml
@@ -5,4 +5,4 @@
- @search_indexes.sort{ |a,b| a.to_s <=> b.to_s}.each do |index|
%form.form{ :method => "get", "accept-charset" => "UTF-8", :action => url(:search, { :id => index[0]})}
.group.label= text_field :name => "q", :label => "Query (i.e. attribute:value, leave empty to search all) "
- .group= submit "Search #{index[0]}"
View
2  chef-server-webui/app/views/search/show.html.haml
@@ -10,4 +10,4 @@
- @results.each do |result|
- result.each do |o|
%tr
- %td= link_to(o.name, url(@type.to_sym, determine_name(@type.to_sym, o)))
View
2  chef-server-webui/app/views/search_entries/index.html.haml
@@ -5,4 +5,4 @@
- result.each do |k, v|
%tr.attr_group
%td.attr_name= k
- %td.attr_value= v.kind_of?(Array) ? v.join(",") : v
View
2  chef-server-webui/app/views/search_entries/show.html.haml
@@ -4,4 +4,4 @@
- @entry.each do |k, v|
%tr.attr_group
%td.attr_name= k
- %td.attr_value= v.kind_of?(Array) ? v.join(",") : v
View
2  chef-server-webui/app/views/users/login.html.haml
@@ -13,4 +13,4 @@
.inner
= partial('form', :header => "Login", :form_id => 'login', :submit_name => "login", :submit_id => "login_button", :form_for => 'login', :form_url => url(:users_login_exec) )
-
View
2  chef-server-webui/app/views/users/show.html.haml
@@ -10,4 +10,4 @@
= @user.admin
.left
%h3 OpenID
- = @user.openid || "No OpenID associated to this user account."
View
2  chef-server-webui/public/stylesheets/themes/blue/style.css
@@ -277,4 +277,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-webui/public/stylesheets/themes/default/style.css
@@ -264,4 +264,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-webui/public/stylesheets/themes/djime-cerulean/style.css
@@ -295,4 +295,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server-webui/public/stylesheets/themes/orange/style.css
@@ -260,4 +260,4 @@ ul.list li .item .avatar {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-right-radius: 4px;
-}
View
2  chef-server/lib/chef-server.rb
@@ -17,4 +17,4 @@
#
module ChefServer
-end
View
35 chef/distro/common/markdown/knife.mkd
@@ -538,10 +538,43 @@ Show a specific role.
The next sections describe sub-commands to work with various Cloud Computing APIs to launch server instances with validation and run-time configuration that Chef knows about. These sub-commands require the fog Ruby library. On Debian and Ubuntu systems with Opscode's apt repository (apt.opscode.com), this is the package `libfog-ruby`. It is also available as a RubyGem, `fog`.
-The Rackspace and Terremark server creation sub-commands are at an early stage of development. They do not yet use the `bootstrap` sub-command to install Chef, and make a few assumptions to be aware. Right now when creating instances of these types, knife will assume an Ubuntu image, install Ruby from packages, RubyGems from source and Chef as a RubyGem. As these commands are developed further, they will utilize the `bootstrap` sub-command.
+The Blue Box, Rackspace and Terremark server creation sub-commands are at an early stage of development. They do not yet use the `bootstrap` sub-command to install Chef, and make a few assumptions to be aware. Right now when creating instances of these types, knife will assume an Ubuntu image, install Ruby from packages, RubyGems from source and Chef as a RubyGem. As these commands are developed further, they will utilize the `bootstrap` sub-command.
In order to use knife with the various __CLOUD COMPUTING SUB-COMMANDS__, credentials need to be added to the configuration file. See __CONFIGURATION__.
+## BLUE BOX SUB-COMMANDS
+
+__bluebox server create [RUN LIST...]__ _(options)_
+
+ * `-f`, `--flavor FLAVOR`:
+ This is the product type (Block size) you're requesting to deploy. Requires the UUID of the image.
+
+ * `-i`, `--image IMAGE`:
+ The image (or OS distribution) to deploy. This can be a pre-built Blue Box template, or this can be a template you've archived previously. Requires the UUID of the image.
+
+ * `-U`, `--username USERNAME`:
+ Username created on the deployed server. Defaults to "deploy".
+
+ * `-P`, `--password PASSWORD`:
+ Password installed for the created user on the deployed server. Can be bypassed by defining a SSH key in your knife configuration ( Chef::Config[:knife][:ssh_key] ).
+
+ * `--bootstrap true/false`:
+ Allows you to enable or disable the bootstrap process.
+
+Creates a new Blue Box Group Blocks instance and bootstraps it by checking out a github repo and installs a bare minimum installation of chef on the instance; it then executes the specified run list.
+
+__bluebox server delete BLOCK-HOSTNAME__
+
+Deletes a running Blue Box Group Blocks server.
+
+__bluebox server list__
+
+Lists running Blue Box Group Blocks servers.
+
+__bluebox images list__
+
+Lists the available Blue Box Group Blocks server images to boot.
+
## EC2 SUB-COMMANDS
Chef is commonly used with Amazon AWS EC2 nodes. This sub-command will generate instance metadata that can be used to automatically configure an EC2 instance with Chef. This requires an AMI that has Chef preinstalled with a configuration file that can parse the metadata at run-time. At this time this is the only sub-command for EC2, but more may be added later similar to __RACKSPACE__ and __TERREMARK__ below.
View
2  chef/lib/chef/application/agent.rb
@@ -15,4 +15,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-require 'chef/application'
View
2  chef/lib/chef/cookbook/syntax_check.rb
@@ -133,4 +133,4 @@ def validate_ruby_file(ruby_file)
end
end
-end
View
2  chef/lib/chef/index_queue/amqp_client.rb
@@ -110,4 +110,4 @@ def amqp_opts
end
end
-end
View
2  chef/lib/chef/index_queue/consumer.rb
@@ -73,4 +73,4 @@ def assert_method_whitelisted(method_name)
end
end
-end
View
54 chef/lib/chef/knife/bluebox_images_list.rb
@@ -0,0 +1,54 @@
+#
+# Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
+# Copyright:: Copyright (c) 2010 Blue Box Group
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'chef/knife'
+require 'json'
+
+class Chef
+ class Knife
+ class BlueboxImagesList < Knife
+
+ banner "knife bluebox images list"
+
+ def highline
+ @highline ||= HighLine.new
+ end
+
+ def run
+ require 'fog'
+ require 'highline'
+
+ bluebox = Fog::Bluebox.new(
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
+ )
+
+ images = bluebox.images.inject({}) { |h,i| h[i.id] = i.description; h }
+
+ image_list = [ highline.color('ID', :bold), highline.color('Name', :bold) ]
+
+ bluebox.images.each do |server|
+ image_list << server.id.to_s
+ image_list << server.description
+ end
+ puts highline.list(image_list, :columns_across, 2)
+
+ end
+ end
+ end
+end
View
157 chef/lib/chef/knife/bluebox_server_create.rb
@@ -0,0 +1,157 @@
+#
+# Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
+# Copyright:: Copyright (c) 2010 Blue Box Group
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'chef/knife'
+require 'json'
+
+class Chef
+ class Knife
+ class BlueboxServerCreate < Knife
+
+ banner "knife bluebox server create [RUN LIST...] (options)"
+
+ option :flavor,
+ :short => "-f FLAVOR",
+ :long => "--flavor FLAVOR",
+ :description => "The flavor of server",
+ :default => "94fd37a7-2606-47f7-84d5-9000deda52ae"
+
+ option :image,
+ :short => "-i IMAGE",
+ :long => "--image IMAGE",
+ :description => "The image of the server",
+ :default => "03807e08-a13d-44e4-b011-ebec7ef2c928"
+
+ option :username,
+ :short => "-U KEY",
+ :long => "--username username",
+ :description => "Username on new server",
+ :default => "deploy"
+
+ option :password,
+ :short => "-P password",
+ :long => "--password password",
+ :description => "User password on new server.",
+ :default => ""
+
+ option :bootstrap,
+ :long => "--bootstrap false",
+ :description => "Disables the bootstrapping process.",
+ :default => true
+
+ def h
+ @highline ||= HighLine.new
+ end
+
+ def run
+ require 'fog'
+ require 'highline'
+ require 'net/ssh/multi'
+ require 'readline'
+ require 'erb'
+
+ bluebox = Fog::Bluebox.new(
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
+ )
+
+ flavors = bluebox.flavors.inject({}) { |h,f| h[f.id] = f.description; h }
+ images = bluebox.images.inject({}) { |h,i| h[i.id] = i.description; h }
+
+ puts "#{h.color("Deploying a new Blue Box Block...", :green)}\n\n"
+ server_args = {
+ :flavor_id => config[:flavor],
+ :image_id => config[:image],
+ :user => config[:username],
+ :password => config[:password]
+ }
+ server_args[:ssh_key] = Chef::Config[:knife][:ssh_key] if Chef::Config[:knife][:ssh_key]
+
+ server = bluebox.servers.new(server_args)
+ response = server.save
+ $stdout.sync = true
+
+ # Wait for the server to start
+ begin
+
+ # Make sure we could properly queue the server for creation on BBG.
+ raise Fog::Bluebox::BlockInstantiationError if server.status != "queued"
+ puts "#{h.color("Hostname", :cyan)}: #{server.hostname}"
+ puts "#{h.color("Server Status", :cyan)}: #{server.status.capitalize}"
+ puts "#{h.color("Flavor", :cyan)}: #{flavors[server.flavor_id]}"
+ puts "#{h.color("Image", :cyan)}: #{images[server.image_id]}"
+ puts "#{h.color("IP Address", :cyan)}: #{server.ips[0]['address']}"
+
+ # The server was succesfully queued... Now wait for it to spin up...
+ print "\n#{h.color("Requesting status of #{server.hostname}\n", :magenta)}"
+
+ # Allow for 5 minutes to time out...
+ # ready? will raise Fog::Bluebox::BlockInstantiationError if block creation fails.
+ unless server.wait_for( 5 * 60 ){ print "."; STDOUT.flush; ready? }
+
+ # The server wasn't started in 5 minutes... Send a destroy call to make sure it doesn't spin up on us later...
+ server.destroy
+ raise Fog::Bluebox::BlockInstantiationError, "BBG server not available after 5 minutes"
+
+ else
+ print "\n\n#{h.color("BBG Server startup succesful. Accessible at #{server.hostname}\n", :green)}"
+
+ # Make sure we should be bootstrapping.
+ unless config[:bootstrap]
+ puts "\n\n#{h.color("Boostrapping disabled per command line inputs. Exiting here.}", :green)}"
+ return true
+ end
+
+ # Bootstrap away!
+ print "\n\n#{h.color("Starting bootstrapping process...", :green)}\n"
+
+ # Connect via SSH and make this all happen.
+ begin
+ bootstrap = Chef::Knife::Bootstrap.new
+ bootstrap.name_args = [ server.ips[0]['address'] ]
+ bootstrap.config[:run_list] = @name_args
+ unless Chef::Config[:knife][:ssh_key]
+ bootstrap.config[:password] = password
+ end
+ bootstrap.config[:ssh_user] = config[:username]
+ bootstrap.config[:identity_file] = config[:identity_file]
+ bootstrap.config[:chef_node_name] = config[:chef_node_name] || server.hostname
+ bootstrap.config[:use_sudo] = true
+ bootstrap.run
+ rescue Errno::ECONNREFUSED
+ puts h.color("Connection refused on SSH, retrying - CTRL-C to abort")
+ sleep 1
+ retry
+ rescue Errno::ETIMEDOUT
+ puts h.color("Connection timed out on SSH, retrying - CTRL-C to abort")
+ sleep 1
+ retry
+ end
+
+ end
+
+ rescue Fog::Bluebox::BlockInstantiationError => e
+
+ puts "\n\n#{h.color("Encountered error starting up BBG block. Auto destroy called. Please try again.", :red)}"
+
+ end
+
+ end
+ end
+ end
+end
View
63 chef/lib/chef/knife/bluebox_server_delete.rb
@@ -0,0 +1,63 @@
+#
+# Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
+# Copyright:: Copyright (c) 2010 Blue Box Group
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'chef/knife'
+require 'json'
+
+class Chef
+ class Knife
+ class BlueboxServerDelete < Knife
+
+ banner "knife bluebox server delete BLOCK-HOSTNAME"
+
+ def h
+ @highline ||= HighLine.new
+ end
+
+ def run
+ require 'fog'
+ require 'highline'
+ require 'readline'
+
+ bluebox = Fog::Bluebox.new(
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
+ )
+
+ # Build hash of hostname => id
+ servers = bluebox.servers.inject({}) { |h,f| h[f.hostname] = f.id; h }
+
+ unless servers.has_key?(@name_args[0])
+ Chef::Log.warn("I can't find a block named #{@name_args[0]}")
+ return false
+ end
+
+ confirm(h.color("Do you really want to delete block UUID #{servers[@name_args[0]]} with hostname #{@name_args[0]}", :green))
+
+ begin
+ response = bluebox.destroy_block(servers[@name_args[0]])
+ if response.status == 200
+ Chef::Log.warn("Deleted server #{servers[@name_args[0]]} named #{@name_args[0]}")
+ end
+ rescue Excon::Errors::UnprocessableEntity
+ Chef::Log.warn("There was a problem deleting #{@name_args[0]}. Please check Box Panel.")
+ end
+ end
+ end
+ end
+end
View
59 chef/lib/chef/knife/bluebox_server_list.rb
@@ -0,0 +1,59 @@
+#
+# Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
+# Copyright:: Copyright (c) 2010 Blue Box Group
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'chef/knife'
+require 'json'
+
+class Chef
+ class Knife
+ class BlueboxServerList < Knife
+
+ banner "knife bluebox server list (options)"
+
+ def h
+ @highline ||= HighLine.new
+ end
+
+ def run
+ require 'fog'
+ require 'highline'
+ require 'net/ssh/multi'
+ require 'readline'
+
+ bluebox = Fog::Bluebox.new(
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
+ )
+
+ # Make hash of flavor id => name and image id => name
+ flavors = bluebox.flavors.inject({}) { |h,f| h[f.id] = f.description; h }
+ images = bluebox.images.inject({}) { |h,i| h[i.id] = i.description; h }
+
+ server_list = [ h.color('ID', :bold), h.color('Hostname', :bold), h.color('IP Address', :bold) ]
+
+ bluebox.servers.each do |server|
+ server_list << server.id.to_s
+ server_list << server.hostname
+ server_list << server.ips[0]["address"]
+ end
+ puts h.list(server_list, :columns_across, 3)
+
+ end
+ end
+ end
+end
View
2  chef/lib/chef/knife/bootstrap/centos5-gems.erb
@@ -38,4 +38,4 @@ cat <<'EOP'
EOP
) > /etc/chef/first-boot.json
-/usr/bin/chef-client -j /etc/chef/first-boot.json'
View
2  chef/lib/chef/knife/bootstrap/fedora13-gems.erb
@@ -35,4 +35,4 @@ cat <<'EOP'
EOP
) > /etc/chef/first-boot.json
-/usr/bin/chef-client -j /etc/chef/first-boot.json'
View
2  chef/lib/chef/knife/exec.rb
@@ -49,4 +49,4 @@ def run
end
end
-end
View
2  chef/lib/chef/mixin/create_path.rb
@@ -53,4 +53,4 @@ def create_path(file_path)
end
end
-end
View
2  chef/lib/chef/mixin/recipe_definition_dsl_core.rb
@@ -78,4 +78,4 @@ def method_missing(method_symbol, *args, &block)
end
end
-end
View
2  chef/lib/chef/provider/breakpoint.rb
@@ -33,4 +33,4 @@ def action_break
end
end
-end
View
2  chef/lib/chef/provider/cookbook_file.rb
@@ -97,4 +97,4 @@ def content_stale?
end
end
-end
View
2  chef/lib/chef/provider/deploy/timestamped.rb
@@ -30,4 +30,4 @@ def release_slug
end
end
end
-end
View
2  chef/lib/chef/provider/group/pw.rb
@@ -81,4 +81,4 @@ def set_members_option
end
end
end
-end
View
2  chef/lib/chef/provider/package/easy_install.rb
@@ -111,4 +111,4 @@ def purge_package(name, version)
end
end
end
-end
View
2  chef/lib/chef/provider/service/windows.rb
@@ -126,4 +126,4 @@ def determine_startup_type
{:automatic => 'auto', :mannual => 'demand'}[@new_resource.startup_type]
end
-end
View
2  chef/lib/chef/provider/user/pw.rb
@@ -110,4 +110,4 @@ def modify_password
end
end
end
-end
View
2  chef/lib/chef/resource/deploy_revision.rb
@@ -32,4 +32,4 @@ class DeployBranch < Chef::Resource::DeployRevision
end
end
-end
View
2  chef/lib/chef/resource_collection/stepable_iterator.rb
@@ -121,4 +121,4 @@ def call_iterator_block
end
end
-end
View
2  chef/lib/chef/run_status.rb
@@ -118,4 +118,4 @@ def formatted_exception
@exception && "#{@exception.class.name}: #{@exception.message}"
end
-end
View
2  chef/lib/chef/shef.rb
@@ -322,4 +322,4 @@ def config_file_for_shef_mode(environment)
end
-end
View
2  chef/lib/chef/shef/model_wrapper.rb
@@ -117,4 +117,4 @@ def list_objects
end
-end
View
2  chef/lib/chef/shef/shef_rest.rb
@@ -25,4 +25,4 @@ class ShefREST < Chef::REST
alias :delete :delete_rest
end
-end
View
2  chef/spec/data/knife_subcommand/test_yourself.rb
@@ -10,4 +10,4 @@ def run
self # return self so tests can poke at me
end
end
-end
View
2  chef/spec/functional/knife/cookbook_delete_spec.rb
@@ -154,4 +154,4 @@
end
-end
View
2  chef/spec/functional/knife/exec_spec.rb
@@ -55,4 +55,4 @@
$output.string.should match(%r{node\[ohai-world\]})
end
-end
+end
View
2  chef/spec/unit/file_access_control_spec.rb
@@ -178,4 +178,4 @@
@fac.should be_modified
end
-end
+end
View
2  chef/spec/unit/log_spec.rb
@@ -21,4 +21,4 @@
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
describe Chef::Log do
-end
+end
View
2  chef/spec/unit/mixin/convert_to_class_name_spec.rb
@@ -44,4 +44,4 @@ class ConvertToClassTestHarness
@convert.snake_case_basename("NameSpaced::Class::ExtraWin").should == "extra_win"
end
-end
+end
View
2  chef/spec/unit/mixin/deprecation_spec.rb
@@ -31,4 +31,4 @@
@deprecated_ivar.to_sym.should == :value
end
-end
+end
View
2  chef/spec/unit/provider/breakpoint_spec.rb
@@ -50,4 +50,4 @@
@provider.action_break
end
-end
+end
View
2  chef/spec/unit/provider/deploy/revision_spec.rb
@@ -97,4 +97,4 @@
@provider.all_releases.should == [oldest, latest]
end
-end
+end
View
2  chef/spec/unit/provider/deploy/timestamped_spec.rb
@@ -36,4 +36,4 @@
@timestamped_deploy.send(:release_slug).should == "20040815162342"
end
-end
+end
View
2  chef/spec/unit/provider/directory_spec.rb
@@ -93,4 +93,4 @@ def load_mock_provider
File.stub!(:stat).once.and_return(cstats)
@directory.load_current_resource
end
-end
+end
View
2  chef/spec/unit/provider/group_spec.rb
@@ -226,4 +226,4 @@
lambda { @provider.action_modify }.should raise_error(Chef::Exceptions::Group)
end
end
-end
+end
View
2  chef/spec/unit/provider/package/easy_install_spec.rb
@@ -105,4 +105,4 @@
end
end
-end
+end
View
2  chef/spec/unit/provider/package/solaris_spec.rb
@@ -165,4 +165,4 @@
end
end
-end
+end
View
2  chef/spec/unit/provider/remote_file_spec.rb
@@ -221,4 +221,4 @@
end
end
-end
+end
View
2  chef/spec/unit/provider/service/arch_service_spec.rb
@@ -315,4 +315,4 @@
end
end
end
-end
+end
View
2  chef/spec/unit/provider/service/init_service_spec.rb
@@ -194,4 +194,4 @@
@provider.reload_service()
end
end
-end
+end
View
2  chef/spec/unit/provider/service/simple_service_spec.rb
@@ -145,4 +145,4 @@
@provider.reload_service()
end
end
-end
+end
View
2  chef/spec/unit/provider/user/dscl_spec.rb
@@ -435,4 +435,4 @@
@provider.unlock_user
end
end
-end
+end
View
2  chef/spec/unit/provider/user/pw_spec.rb
@@ -228,4 +228,4 @@
lambda { @provider.load_current_resource }.should_not raise_error(Chef::Exceptions::User)
end
end
-end
+end
View
2  chef/spec/unit/provider/user/windows_spec.rb
@@ -174,4 +174,4 @@ class NetUser
@provider.unlock_user
end
end
-end
+end
View
2  chef/spec/unit/provider/user_spec.rb
@@ -391,4 +391,4 @@
@new_resource.gid.should == 999
end
end
-end
+end
View
2  chef/spec/unit/resource/apt_package_spec.rb
@@ -35,4 +35,4 @@
it "should set the provider to Chef::Provider::Package::Apt" do
@resource.provider.should eql(Chef::Provider::Package::Apt)
end
-end
+end
View
2  chef/spec/unit/resource/bash_spec.rb
@@ -37,4 +37,4 @@
@resource.interpreter.should eql("bash")
end
-end
+end
View
2  chef/spec/unit/resource/breakpoint_spec.rb
@@ -40,4 +40,4 @@
@breakpoint.provider.should == Chef::Provider::Breakpoint
end
-end
+end
View
2  chef/spec/unit/resource/csh_spec.rb
@@ -37,4 +37,4 @@
@resource.interpreter.should eql("csh")
end
-end
+end
View
2  chef/spec/unit/resource/deploy_revision_spec.rb
@@ -34,4 +34,4 @@
@resource.provider.should == Chef::Provider::Deploy::Revision
end
-end
+end
View
2  chef/spec/unit/resource/directory_spec.rb
@@ -76,4 +76,4 @@
lambda { @resource.recursive "monkey" }.should raise_error(ArgumentError)
end
-end
+end
View
2  chef/spec/unit/resource/dpkg_package_spec.rb
@@ -35,4 +35,4 @@
it "should set the provider to Chef::Provider::Package::Dpkg" do
@resource.provider.should eql(Chef::Provider::Package::Dpkg)
end
-end
+end
View
2  chef/spec/unit/resource/http_request_spec.rb
@@ -43,4 +43,4 @@
@resource.message.should eql("monkeybars")
end
-end
+end
View
2  chef/spec/unit/resource/pacman_package_spec.rb
@@ -35,4 +35,4 @@
it "should set the provider to Chef::Provider::Package::Pacman" do
@resource.provider.should eql(Chef::Provider::Package::Pacman)
end
-end
+end
View
2  chef/spec/unit/resource/perl_spec.rb
@@ -37,4 +37,4 @@
@resource.interpreter.should eql("perl")
end
-end
+end
View
2  chef/spec/unit/resource/portage_package_spec.rb
@@ -35,4 +35,4 @@
it "should set the provider to Chef::Provider::Package::Portage" do
@resource.provider.should eql(Chef::Provider::Package::Portage)
end
-end
+end
View
2  chef/spec/unit/resource/python_spec.rb
@@ -37,4 +37,4 @@
@resource.interpreter.should eql("python")
end
-end
+end
View
2  chef/spec/unit/resource/ruby_spec.rb
@@ -37,4 +37,4 @@
@resource.interpreter.should eql("ruby")
end
-end
+end
View
2  chef/spec/unit/resource/subversion_spec.rb
@@ -55,4 +55,4 @@
@svn.svn_arguments.should be_nil
end
-end
+end
View
2  chef/spec/unit/resource/timestamped_deploy_spec.rb
@@ -25,4 +25,4 @@
@resource.provider.should == Chef::Provider::Deploy::Timestamped
end
-end
+end
View
2  chef/spec/unit/run_status_spec.rb
@@ -141,4 +141,4 @@
end
end
end
-end
+end
View
2  chef/spec/unit/shef/model_wrapper_spec.rb
@@ -94,4 +94,4 @@
end
-end
+end
View
2  chef/spec/unit/webui_user_spec.rb
@@ -235,4 +235,4 @@
end
end
-end
+end
View
2  features/api/cookbooks/list_cookbooks.feature
@@ -43,4 +43,4 @@ Feature: List cookbooks via the REST API
Scenario: List cookbooks with a wrong private key
Given I am an administrator
When I 'GET' the path '/cookbooks' using a wrong private key
- Then I should get a '401 "Unauthorized"' exception
+ Then I should get a '401 "Unauthorized"' exception
View
2  features/api/roles/create_role_api.feature
@@ -35,4 +35,4 @@ Feature: Create a role via the REST API
When I 'POST' the 'role' to the path '/roles'
Then the inflated responses key 'uri' should match '^http://.+/roles/role_not_exist$'
When I 'GET' the path '/roles/role_not_exist'
- Then the stringified response should be the stringified 'role'
+ Then the stringified response should be the stringified 'role'
View
2  features/api/roles/update_roles_api.feature
@@ -41,4 +41,4 @@ Feature: Update a role
When I 'PUT' the 'role' to the path '/roles/webserver'
Then the inflated response should respond to 'run_list' with '["role[not_exist]"]'
When I 'GET' the path '/roles/webserver'
- Then the inflated response should respond to 'run_list' with '["role[not_exist]"]'
+ Then the inflated response should respond to 'run_list' with '["role[not_exist]"]'
View
2  features/data/cookbooks/delayed_notifications/recipes/notify_a_resource_from_a_single_source.rb
@@ -23,4 +23,4 @@
execute "echo foo" do
notifies :create, resources("file[#{node[:tmpdir]}/notified_file.txt]"), :delayed
-end
+end
View
2  features/data/cookbooks/deploy/recipes/callbacks.rb
@@ -75,4 +75,4 @@
"deploy/before_symlink.rb" => "deploy/before_symlink.rb",
"deploy/before_restart.rb" => "deploy/before_restart.rb",
"deploy/after_restart.rb" => "deploy/after_restart.rb"
-end
+end
View
2  features/data/cookbooks/deploy/recipes/embedded_recipe_callbacks.rb
@@ -67,4 +67,4 @@
end
end
-end
+end
View
2  features/data/cookbooks/integration_setup/attributes/integration.rb
@@ -22,4 +22,4 @@
int(Mash.new)
int[:tmpdir] = File.join(Dir.tmpdir, "chef_integration")
-tmpdir int[:tmpdir]
+tmpdir int[:tmpdir]
View
2  features/data/cookbooks/manage_files/recipes/create_a_file.rb
@@ -19,4 +19,4 @@
file "#{node[:tmpdir]}/create_a_file.txt" do
action :create
-end
+end
View
2  features/data/cookbooks/manage_files/recipes/delete_a_file.rb
@@ -21,4 +21,4 @@
file "#{node[:tmpdir]}/create_a_file.txt" do
action :delete
-end
+end
View
2  features/data/cookbooks/manage_files/recipes/delete_a_file_that_does_not_already_exist.rb
@@ -19,4 +19,4 @@
file "#{node[:tmpdir]}/create_a_file.txt" do
action :delete
-end
+end
View
2  features/data/cookbooks/manage_files/recipes/set_the_owner_of_a_created_file.rb
@@ -20,4 +20,4 @@
file "#{node[:tmpdir]}/create_a_file.txt" do
owner 'nobody'
action :create
-end
+end
View
2  features/data/cookbooks/manage_files/recipes/touch_a_file.rb
@@ -19,4 +19,4 @@
file "#{node[:tmpdir]}/touch_test.txt" do
action :touch
-end
+end
View
2  features/data/cookbooks/packages/recipes/gem_package.rb
@@ -23,4 +23,4 @@
source "http://localhost:8000"
version "0.1.0"
options "-i #{node[:tmpdir]}/installed-gems/"
-end
+end
View
2  features/data/cookbooks/packages/recipes/install_gem_noshell.rb
@@ -23,4 +23,4 @@
source "http://localhost:8000"
version "0.1.0"
options :install_dir => "#{node[:tmpdir]}/installed-gems/"
-end
+end
View
2  features/data/cookbooks/packages/recipes/manually_upgrade_gem_package.rb
@@ -29,4 +29,4 @@
source "http://localhost:8000"
options "-i #{node[:tmpdir]}/installed-gems/"
version "0.1.1"
-end
+end
View
2  features/data/cookbooks/packages/recipes/upgrade_gem_noshell.rb
@@ -30,4 +30,4 @@
source "http://localhost:8000"
options :install_dir => "#{node[:tmpdir]}/installed-gems/"
action :upgrade
-end
+end
View
2  features/data/cookbooks/packages/recipes/upgrade_gem_package.rb
@@ -30,4 +30,4 @@
source "http://localhost:8000"
options "-i #{node[:tmpdir]}/installed-gems/"
action :upgrade
-end
+end
View
2  features/data/cookbooks/transfer_remote_files/recipes/should_prefer_the_file_for_this_specific_host.rb
@@ -19,4 +19,4 @@
remote_file "#{node[:tmpdir]}/host_specific.txt" do
source "host_specific.txt"
-end
+end
View
2  features/data/cookbooks/transfer_remote_files/recipes/transfer_a_file_from_a_cookbook.rb
@@ -19,4 +19,4 @@
remote_file "#{node[:tmpdir]}/transfer_a_file_from_a_cookbook.txt" do
source "transfer_a_file_from_a_cookbook.txt"
-end
+end
View
2  ...ookbooks_not_uploaded_at_feature_start/testcookbook_valid_v0.1.0_with_different_dependencies/metadata.rb
@@ -4,4 +4,4 @@
description "Description"
long_description "Long description"
version "0.1"
-depends "aws"
+depends "aws"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.1.0/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.1.0"
+version "0.1.0"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.1.1/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.1.1"
+version "0.1.1"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.10.0/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.10.0"
+version "0.10.0"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.2.0/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.2.0"
+version "0.2.0"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.9.0/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.9.0"
+version "0.9.0"
View
2  features/data/cookbooks_not_uploaded_at_feature_start/version_test_0.9.7/metadata.rb
@@ -3,4 +3,4 @@
maintainer_email "do_not_reply@opscode.com"
license "Apache 2.0"
description "Tests cookbook versioning in environments"
-version "0.9.7"
+version "0.9.7"
View
2  features/steps/cookbook_steps.rb
@@ -390,4 +390,4 @@ def compare_manifests(manifest1, manifest2)
When "I fully upload a sandboxed cookbook force-named 'version_test' versioned '0.9.0' with 'version_test_0.9.0'"
When "I fully upload a sandboxed cookbook force-named 'version_test' versioned '0.10.0' with 'version_test_0.10.0'"
When "I fully upload a sandboxed cookbook force-named 'version_test' versioned '0.9.7' with 'version_test_0.9.7'"
-end
+end
View
2  features/steps/packages.rb
@@ -110,7 +110,6 @@ def remove_integration_test_apt_source
Then "a file named 'installed-gems/gems/#{gem_name}-#{version}' should not exist"
end
-
def dpkg_should_be_installed(pkg_name)
shell_out!("dpkg -l #{pkg_name}")
end
@@ -118,4 +117,3 @@ def dpkg_should_be_installed(pkg_name)
Then "the dpkg package '$package_name' should be installed" do |package_name|
dpkg_should_be_installed(package_name)
end
-
Please sign in to comment.
Something went wrong with that request. Please try again.