berkshelf 0.6.0.beta2 → 0.6.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -2
 - data/.travis.yml +7 -0
 - data/Gemfile +1 -1
 - data/README.md +1 -0
 - data/Thorfile +7 -0
 - data/berkshelf.gemspec +4 -1
 - data/features/config.feature +97 -0
 - data/features/config_command.feature +10 -0
 - data/features/cookbook_command.feature +12 -12
 - data/features/default_locations.feature +5 -0
 - data/features/install.feature +16 -0
 - data/features/json_formatter.feature +1 -1
 - data/features/step_definitions/cli_steps.rb +5 -1
 - data/features/step_definitions/filesystem_steps.rb +45 -23
 - data/features/upload_command.feature +4 -4
 - data/generator_files/Gemfile.erb +2 -2
 - data/generator_files/Vagrantfile.erb +34 -13
 - data/generator_files/config.json +22 -0
 - data/lib/berkshelf/cli.rb +24 -9
 - data/lib/berkshelf/config.rb +51 -0
 - data/lib/berkshelf/config_generator.rb +8 -0
 - data/lib/berkshelf/config_validator.rb +78 -0
 - data/lib/berkshelf/cookbook_generator.rb +2 -2
 - data/lib/berkshelf/core_ext/file_utils.rb +36 -0
 - data/lib/berkshelf/downloader.rb +41 -14
 - data/lib/berkshelf/errors.rb +20 -0
 - data/lib/berkshelf/formatters/human_readable.rb +7 -0
 - data/lib/berkshelf/git.rb +13 -3
 - data/lib/berkshelf/init_generator.rb +17 -4
 - data/lib/berkshelf/locations/chef_api_location.rb +1 -1
 - data/lib/berkshelf/locations/git_location.rb +1 -1
 - data/lib/berkshelf/locations/site_location.rb +1 -1
 - data/lib/berkshelf/version.rb +1 -1
 - data/lib/berkshelf.rb +17 -10
 - data/spec/support/knife.rb +1 -1
 - data/spec/support/matchers/file_system_matchers.rb +16 -1
 - data/spec/unit/berkshelf/config_spec.rb +91 -0
 - data/spec/unit/berkshelf/config_validator_spec.rb +68 -0
 - data/spec/unit/berkshelf/cookbook_source_spec.rb +4 -4
 - data/spec/unit/berkshelf/core_ext/file_utils_spec.rb +23 -0
 - data/spec/unit/berkshelf/init_generator_spec.rb +34 -32
 - data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +1 -1
 - data/spec/unit/berkshelf/lockfile_spec.rb +2 -2
 - data/spec/unit/berkshelf/resolver_spec.rb +1 -1
 - data/spec/unit/berkshelf/uploader_spec.rb +1 -1
 - metadata +68 -5
 - data/lib/vagrant_init.rb +0 -2
 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Berkshelf
         
     | 
| 
      
 2 
     | 
    
         
            +
            [](https://travis-ci.org/RiotGames/berkshelf)
         
     | 
| 
       2 
3 
     | 
    
         
             
            [](https://codeclimate.com/github/RiotGames/berkshelf)
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            Manage a Cookbook or an Application's Cookbook dependencies
         
     | 
    
        data/Thorfile
    CHANGED
    
    | 
         @@ -36,6 +36,13 @@ class Default < Thor 
     | 
|
| 
       36 
36 
     | 
    
         
             
                exec "cucumber --color --format progress --tags ~@no_run"
         
     | 
| 
       37 
37 
     | 
    
         
             
              end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
              desc "ci", "Run all test suites"
         
     | 
| 
      
 40 
     | 
    
         
            +
              def ci
         
     | 
| 
      
 41 
     | 
    
         
            +
                ENV['CI'] = 'true' # Travis-CI also sets this, but set it here for local testing
         
     | 
| 
      
 42 
     | 
    
         
            +
                exec "rspec --tag ~chef_server --tag ~focus spec &&
         
     | 
| 
      
 43 
     | 
    
         
            +
                      cucumber --format progress --tags ~@chef_server"
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
       39 
46 
     | 
    
         
             
              class VCR < Thor
         
     | 
| 
       40 
47 
     | 
    
         
             
                namespace :vcr
         
     | 
| 
       41 
48 
     | 
    
         | 
    
        data/berkshelf.gemspec
    CHANGED
    
    | 
         @@ -16,14 +16,17 @@ Gem::Specification.new do |s| 
     | 
|
| 
       16 
16 
     | 
    
         
             
              s.version               = Berkshelf::VERSION
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.required_ruby_version = ">= 1.9.1"
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
      
 19 
     | 
    
         
            +
              s.add_runtime_dependency 'chozo', '>= 0.1.0'
         
     | 
| 
       19 
20 
     | 
    
         
             
              s.add_runtime_dependency 'ridley',  '>= 0.0.5'
         
     | 
| 
       20 
     | 
    
         
            -
              s.add_runtime_dependency 'solve',   '>= 0. 
     | 
| 
      
 21 
     | 
    
         
            +
              s.add_runtime_dependency 'solve',   '>= 0.4.0.rc1'
         
     | 
| 
       21 
22 
     | 
    
         
             
              s.add_runtime_dependency 'chef',    '~> 10.12'
         
     | 
| 
       22 
23 
     | 
    
         
             
              s.add_runtime_dependency 'minitar'
         
     | 
| 
       23 
24 
     | 
    
         
             
              s.add_runtime_dependency 'thor',    '~> 0.16.0'
         
     | 
| 
       24 
25 
     | 
    
         
             
              s.add_runtime_dependency 'vagrant', '~> 1.0.5'
         
     | 
| 
       25 
26 
     | 
    
         
             
              s.add_runtime_dependency 'activesupport'
         
     | 
| 
       26 
27 
     | 
    
         
             
              s.add_runtime_dependency 'multi_json'
         
     | 
| 
      
 28 
     | 
    
         
            +
              s.add_runtime_dependency 'hashie'
         
     | 
| 
      
 29 
     | 
    
         
            +
              s.add_runtime_dependency 'activemodel'
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
       28 
31 
     | 
    
         
             
              s.add_development_dependency 'redcarpet'
         
     | 
| 
       29 
32 
     | 
    
         
             
              s.add_development_dependency 'cucumber'
         
     | 
| 
         @@ -0,0 +1,97 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Feature: cookbook creation with a config file
         
     | 
| 
      
 2 
     | 
    
         
            +
              As a Cookbook author  
         
     | 
| 
      
 3 
     | 
    
         
            +
              I want to quickly generate a cookbook with my own customizations
         
     | 
| 
      
 4 
     | 
    
         
            +
              So that I don't have to spend time modifying the default generated output each time
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              Scenario: creating a new cookbook when no Berkshelf config exists
         
     | 
| 
      
 7 
     | 
    
         
            +
                Given I do not have a Berkshelf config file
         
     | 
| 
      
 8 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion"
         
     | 
| 
      
 9 
     | 
    
         
            +
                Then the resulting "sparkle_motion" Vagrantfile should contain:
         
     | 
| 
      
 10 
     | 
    
         
            +
                  | config.vm.host_name = "sparkle_motion-berkshelf" |
         
     | 
| 
      
 11 
     | 
    
         
            +
                  | config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal" |
         
     | 
| 
      
 12 
     | 
    
         
            +
                  | config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box" |
         
     | 
| 
      
 13 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              Scenario: creating a new cookbook using a Berkshelf config
         
     | 
| 
      
 16 
     | 
    
         
            +
                Given I have a Berkshelf config file containing:
         
     | 
| 
      
 17 
     | 
    
         
            +
                """
         
     | 
| 
      
 18 
     | 
    
         
            +
                {
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "vagrant": {
         
     | 
| 
      
 20 
     | 
    
         
            +
                    "vm": {
         
     | 
| 
      
 21 
     | 
    
         
            +
                      "box": "my_box",
         
     | 
| 
      
 22 
     | 
    
         
            +
                      "box_url": "http://files.vagrantup.com/lucid64.box",
         
     | 
| 
      
 23 
     | 
    
         
            +
                      "forward_port": {
         
     | 
| 
      
 24 
     | 
    
         
            +
                        "12345": "54321"
         
     | 
| 
      
 25 
     | 
    
         
            +
                      },
         
     | 
| 
      
 26 
     | 
    
         
            +
                      "host_name": "my_host",
         
     | 
| 
      
 27 
     | 
    
         
            +
                      "network": {
         
     | 
| 
      
 28 
     | 
    
         
            +
                        "bridged": true,
         
     | 
| 
      
 29 
     | 
    
         
            +
                        "hostonly": "12.34.56.78"
         
     | 
| 
      
 30 
     | 
    
         
            +
                      }
         
     | 
| 
      
 31 
     | 
    
         
            +
                    }
         
     | 
| 
      
 32 
     | 
    
         
            +
                  }
         
     | 
| 
      
 33 
     | 
    
         
            +
                }
         
     | 
| 
      
 34 
     | 
    
         
            +
                """
         
     | 
| 
      
 35 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion"
         
     | 
| 
      
 36 
     | 
    
         
            +
                Then the resulting "sparkle_motion" Vagrantfile should contain:
         
     | 
| 
      
 37 
     | 
    
         
            +
                  | config.vm.box = "my_box" |
         
     | 
| 
      
 38 
     | 
    
         
            +
                  | config.vm.box_url = "http://files.vagrantup.com/lucid64.box" |
         
     | 
| 
      
 39 
     | 
    
         
            +
                  | config.vm.forward_port 12345, 54321 |
         
     | 
| 
      
 40 
     | 
    
         
            +
                  | config.vm.host_name = "my_host" |
         
     | 
| 
      
 41 
     | 
    
         
            +
                  | config.vm.network :hostonly, "12.34.56.78" |
         
     | 
| 
      
 42 
     | 
    
         
            +
                  | config.vm.network :bridged |
         
     | 
| 
      
 43 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              Scenario: creating a new cookbook using a partial Berkshelf config
         
     | 
| 
      
 46 
     | 
    
         
            +
                Given I have a Berkshelf config file containing:
         
     | 
| 
      
 47 
     | 
    
         
            +
                """
         
     | 
| 
      
 48 
     | 
    
         
            +
                {
         
     | 
| 
      
 49 
     | 
    
         
            +
                  "vagrant": {
         
     | 
| 
      
 50 
     | 
    
         
            +
                    "vm": {
         
     | 
| 
      
 51 
     | 
    
         
            +
                      "forward_port": {
         
     | 
| 
      
 52 
     | 
    
         
            +
                        "12345": "54321"
         
     | 
| 
      
 53 
     | 
    
         
            +
                      }
         
     | 
| 
      
 54 
     | 
    
         
            +
                    }
         
     | 
| 
      
 55 
     | 
    
         
            +
                  }
         
     | 
| 
      
 56 
     | 
    
         
            +
                }
         
     | 
| 
      
 57 
     | 
    
         
            +
                """
         
     | 
| 
      
 58 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion"
         
     | 
| 
      
 59 
     | 
    
         
            +
                Then the resulting "sparkle_motion" Vagrantfile should contain:
         
     | 
| 
      
 60 
     | 
    
         
            +
                  | config.vm.forward_port 12345, 54321 |
         
     | 
| 
      
 61 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              Scenario: creating a new cookbook using an invalid Berkshelf config
         
     | 
| 
      
 64 
     | 
    
         
            +
                Given I have a Berkshelf config file containing:
         
     | 
| 
      
 65 
     | 
    
         
            +
                """
         
     | 
| 
      
 66 
     | 
    
         
            +
                {
         
     | 
| 
      
 67 
     | 
    
         
            +
                  "wat": null
         
     | 
| 
      
 68 
     | 
    
         
            +
                }
         
     | 
| 
      
 69 
     | 
    
         
            +
                """
         
     | 
| 
      
 70 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion"
         
     | 
| 
      
 71 
     | 
    
         
            +
                Then the output should contain "Invalid configuration"
         
     | 
| 
      
 72 
     | 
    
         
            +
                And the output should contain "wat is not a valid key"
         
     | 
| 
      
 73 
     | 
    
         
            +
                And the CLI should exit with the status code for error "InvalidConfiguration"
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              Scenario: creating a new cookbook with a chef client config
         
     | 
| 
      
 76 
     | 
    
         
            +
                Given I have a Berkshelf config file containing:
         
     | 
| 
      
 77 
     | 
    
         
            +
                """
         
     | 
| 
      
 78 
     | 
    
         
            +
                {
         
     | 
| 
      
 79 
     | 
    
         
            +
                  "vagrant": {
         
     | 
| 
      
 80 
     | 
    
         
            +
                    "chef": {
         
     | 
| 
      
 81 
     | 
    
         
            +
                      "chef_server_url": "localhost:4000",
         
     | 
| 
      
 82 
     | 
    
         
            +
                      "validation_client_name": "my_client-validator",
         
     | 
| 
      
 83 
     | 
    
         
            +
                      "validation_key_path": "/a/b/c/my_client-validator.pem"
         
     | 
| 
      
 84 
     | 
    
         
            +
                    },
         
     | 
| 
      
 85 
     | 
    
         
            +
                    "vm": {
         
     | 
| 
      
 86 
     | 
    
         
            +
                      "provision": "chef_client"
         
     | 
| 
      
 87 
     | 
    
         
            +
                    }
         
     | 
| 
      
 88 
     | 
    
         
            +
                  }
         
     | 
| 
      
 89 
     | 
    
         
            +
                }
         
     | 
| 
      
 90 
     | 
    
         
            +
                """
         
     | 
| 
      
 91 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion"
         
     | 
| 
      
 92 
     | 
    
         
            +
                Then the resulting "sparkle_motion" Vagrantfile should contain:
         
     | 
| 
      
 93 
     | 
    
         
            +
                  | config.vm.provision :chef_client |
         
     | 
| 
      
 94 
     | 
    
         
            +
                  | chef.chef_server_url = "localhost:4000" |
         
     | 
| 
      
 95 
     | 
    
         
            +
                  | chef.validation_client_name = "my_client-validator" |
         
     | 
| 
      
 96 
     | 
    
         
            +
                  | chef.validation_key_path = "/a/b/c/my_client-validator.pem" |
         
     | 
| 
      
 97 
     | 
    
         
            +
                Then the exit status should be 0
         
     | 
| 
         @@ -0,0 +1,10 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Feature: config command
         
     | 
| 
      
 2 
     | 
    
         
            +
              As a Cookbook author  
         
     | 
| 
      
 3 
     | 
    
         
            +
              I want to quickly generate a Berkshelf config
         
     | 
| 
      
 4 
     | 
    
         
            +
              So I can easily tell which options are available to me
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              Scenario: creating a new config
         
     | 
| 
      
 7 
     | 
    
         
            +
                Given I do not have a Berkshelf config file
         
     | 
| 
      
 8 
     | 
    
         
            +
                When I run the config command
         
     | 
| 
      
 9 
     | 
    
         
            +
                Then I should have a Berkshelf config file
         
     | 
| 
      
 10 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
         @@ -8,18 +8,6 @@ Feature: cookbook command 
     | 
|
| 
       8 
8 
     | 
    
         
             
                Then I should have a new cookbook skeleton "sparkle_motion"
         
     | 
| 
       9 
9 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              Scenario: creating a new cookbook skeleton with Vagrant support
         
     | 
| 
       12 
     | 
    
         
            -
                When I run the cookbook command to create "sparkle_motion" with options:
         
     | 
| 
       13 
     | 
    
         
            -
                  | --vagrant |
         
     | 
| 
       14 
     | 
    
         
            -
                Then I should have a new cookbook skeleton "sparkle_motion" with Vagrant support
         
     | 
| 
       15 
     | 
    
         
            -
                And the exit status should be 0
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              Scenario: creating a new cookbook skeleton with Git support
         
     | 
| 
       18 
     | 
    
         
            -
                When I run the cookbook command to create "sparkle_motion" with options:
         
     | 
| 
       19 
     | 
    
         
            -
                  | --git |
         
     | 
| 
       20 
     | 
    
         
            -
                Then I should have a new cookbook skeleton "sparkle_motion" with Git support
         
     | 
| 
       21 
     | 
    
         
            -
                And the exit status should be 0
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
11 
     | 
    
         
             
              Scenario: creating a new cookbook skeleton with Foodcritic support
         
     | 
| 
       24 
12 
     | 
    
         
             
                When I run the cookbook command to create "sparkle_motion" with options:
         
     | 
| 
       25 
13 
     | 
    
         
             
                  | --foodcritic |
         
     | 
| 
         @@ -37,3 +25,15 @@ Feature: cookbook command 
     | 
|
| 
       37 
25 
     | 
    
         
             
                  | --no-bundler |
         
     | 
| 
       38 
26 
     | 
    
         
             
                Then I should have a new cookbook skeleton "sparkle_motion" without Bundler support
         
     | 
| 
       39 
27 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              Scenario: creating a new cookbook skeleton without Git support
         
     | 
| 
      
 30 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion" with options:
         
     | 
| 
      
 31 
     | 
    
         
            +
                  | --skip-git |
         
     | 
| 
      
 32 
     | 
    
         
            +
                Then I should have a new cookbook skeleton "sparkle_motion" without Git support
         
     | 
| 
      
 33 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              Scenario: creating a new cookbook skeleton without Vagrant support
         
     | 
| 
      
 36 
     | 
    
         
            +
                When I run the cookbook command to create "sparkle_motion" with options:
         
     | 
| 
      
 37 
     | 
    
         
            +
                  | --skip-vagrant |
         
     | 
| 
      
 38 
     | 
    
         
            +
                Then I should have a new cookbook skeleton "sparkle_motion" without Vagrant support
         
     | 
| 
      
 39 
     | 
    
         
            +
                And the exit status should be 0
         
     | 
| 
         @@ -4,6 +4,7 @@ Feature: Berksfile default locations 
     | 
|
| 
       4 
4 
     | 
    
         
             
              So I can set the precedence of where cookbook sources are downloaded from or define an alternate location for all 
         
     | 
| 
       5 
5 
     | 
    
         
             
              cookbook sources to attempt to retrieve from
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       7 
8 
     | 
    
         
             
              Scenario: with a default chef_api(1) and site(2) location with a cookbook source that is satisfied by the chef_api(1) location
         
     | 
| 
       8 
9 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       9 
10 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -23,6 +24,7 @@ Feature: Berksfile default locations 
     | 
|
| 
       23 
24 
     | 
    
         
             
                  | artifact | 0.10.0 |
         
     | 
| 
       24 
25 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       26 
28 
     | 
    
         
             
              Scenario: with a default chef_api(1) and site(2) location with a cookbook source that is not satisfied by the chef_api(1) location
         
     | 
| 
       27 
29 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       28 
30 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -42,6 +44,7 @@ Feature: Berksfile default locations 
     | 
|
| 
       42 
44 
     | 
    
         
             
                  | artifact | 0.10.0 |
         
     | 
| 
       43 
45 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       44 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       45 
48 
     | 
    
         
             
              Scenario: with a default site(1) and chef_api(2) location with a cookbook source that is satisfied by the site(1) location
         
     | 
| 
       46 
49 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       47 
50 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -61,6 +64,7 @@ Feature: Berksfile default locations 
     | 
|
| 
       61 
64 
     | 
    
         
             
                  | artifact | 0.10.0 |
         
     | 
| 
       62 
65 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       63 
66 
     | 
    
         | 
| 
      
 67 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       64 
68 
     | 
    
         
             
              Scenario: with a default chef_api(1) location and a cookbook source that is satisfied by the chef_api(1) location but has an explicit location set
         
     | 
| 
       65 
69 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       66 
70 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -79,6 +83,7 @@ Feature: Berksfile default locations 
     | 
|
| 
       79 
83 
     | 
    
         
             
                  | artifact | 0.10.0 |
         
     | 
| 
       80 
84 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       81 
85 
     | 
    
         | 
| 
      
 86 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       82 
87 
     | 
    
         
             
              Scenario: with a defualt chef_api(1) location and a cookbook source that is not satisfied by it
         
     | 
| 
       83 
88 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       84 
89 
     | 
    
         
             
                  """
         
     | 
    
        data/features/install.feature
    CHANGED
    
    | 
         @@ -194,6 +194,7 @@ Feature: install cookbooks from a Berksfile 
     | 
|
| 
       194 
194 
     | 
    
         
             
                  """
         
     | 
| 
       195 
195 
     | 
    
         
             
                And the CLI should exit with the status code for error "InternalError"
         
     | 
| 
       196 
196 
     | 
    
         | 
| 
      
 197 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       197 
198 
     | 
    
         
             
              Scenario: with a cookbook definition containing a chef_api source location
         
     | 
| 
       198 
199 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       199 
200 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -258,3 +259,18 @@ Feature: install cookbooks from a Berksfile 
     | 
|
| 
       258 
259 
     | 
    
         
             
                  Source 'artifact' is a 'chef_api' location with a URL for it's value but is missing options: 'node_name', 'client_key'.
         
     | 
| 
       259 
260 
     | 
    
         
             
                  """
         
     | 
| 
       260 
261 
     | 
    
         
             
                And the CLI should exit with the status code for error "InvalidChefAPILocation"
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
              Scenario: with a git error during download
         
     | 
| 
      
 264 
     | 
    
         
            +
                Given I write to "Berksfile" with:
         
     | 
| 
      
 265 
     | 
    
         
            +
                  """
         
     | 
| 
      
 266 
     | 
    
         
            +
                  cookbook "ohai"
         
     | 
| 
      
 267 
     | 
    
         
            +
                  cookbook "doesntexist", git: "git://github.com/asdjhfkljashflkjashfakljsf"
         
     | 
| 
      
 268 
     | 
    
         
            +
                  """
         
     | 
| 
      
 269 
     | 
    
         
            +
                When I run the install command
         
     | 
| 
      
 270 
     | 
    
         
            +
                Then the output should contain:
         
     | 
| 
      
 271 
     | 
    
         
            +
                  """
         
     | 
| 
      
 272 
     | 
    
         
            +
                  Installing ohai (1.1.2) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
         
     | 
| 
      
 273 
     | 
    
         
            +
                  Failed to download doesntexist from git: 'git://github.com/asdjhfkljashflkjashfakljsf'
         
     | 
| 
      
 274 
     | 
    
         
            +
                  An error occured during Git execution:
         
     | 
| 
      
 275 
     | 
    
         
            +
                  """
         
     | 
| 
      
 276 
     | 
    
         
            +
                  And the CLI should exit with the status code for error "GitError"
         
     | 
| 
         @@ -29,7 +29,7 @@ Feature: --format json 
     | 
|
| 
       29 
29 
     | 
    
         
             
                And the JSON at "cookbooks/0/version" should be "1.2.4"
         
     | 
| 
       30 
30 
     | 
    
         
             
                And the JSON should not have "cookbooks/0/location"
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
              @ 
     | 
| 
      
 32 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       33 
33 
     | 
    
         
             
              Scenario: JSON output when running the upload command
         
     | 
| 
       34 
34 
     | 
    
         
             
                Given a Berksfile with path location sources to fixtures:
         
     | 
| 
       35 
35 
     | 
    
         
             
                  | example_cookbook | example_cookbook-0.5.0 |
         
     | 
| 
         @@ -59,13 +59,17 @@ When /^I run the upload command with flags:$/ do |flags| 
     | 
|
| 
       59 
59 
     | 
    
         
             
            end
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
            When /^I run the cookbook command to create "(.*?)"$/ do |name|
         
     | 
| 
       62 
     | 
    
         
            -
              run_simple(unescape("berks cookbook #{name}"))
         
     | 
| 
      
 62 
     | 
    
         
            +
              run_simple(unescape("berks cookbook #{name}"), false)
         
     | 
| 
       63 
63 
     | 
    
         
             
            end
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
65 
     | 
    
         
             
            When /^I run the cookbook command to create "(.*?)" with options:$/ do |name, options|
         
     | 
| 
       66 
66 
     | 
    
         
             
              run_simple(unescape("berks cookbook #{name} #{options.raw.join(" ")}"))
         
     | 
| 
       67 
67 
     | 
    
         
             
            end
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
      
 69 
     | 
    
         
            +
            When /^I run the config command$/ do
         
     | 
| 
      
 70 
     | 
    
         
            +
              run_simple unescape("berks config")
         
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       69 
73 
     | 
    
         
             
            Then /^the CLI should exit with the status code for error "(.*?)"$/ do |error_constant|
         
     | 
| 
       70 
74 
     | 
    
         
             
              exit_status = Berkshelf.const_get(error_constant).status_code
         
     | 
| 
       71 
75 
     | 
    
         
             
              assert_exit_status(exit_status)
         
     | 
| 
         @@ -18,6 +18,16 @@ Given /^I do not have a Berksfile\.lock$/ do 
     | 
|
| 
       18 
18 
     | 
    
         
             
              in_current_dir { FileUtils.rm_f(Berkshelf::Lockfile::DEFAULT_FILENAME) }
         
     | 
| 
       19 
19 
     | 
    
         
             
            end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
            Given /^I have a Berkshelf config file containing:$/ do |contents|
         
     | 
| 
      
 22 
     | 
    
         
            +
              write_file File.expand_path("~/.berkshelf/config.json"), contents
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            Given /^I do not have a Berkshelf config file$/ do
         
     | 
| 
      
 26 
     | 
    
         
            +
              file = File.expand_path "~/.berkshelf/config.json"
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              remove_file file if File.exists? file
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       21 
31 
     | 
    
         
             
            Given /^the cookbook "(.*?)" has the file "(.*?)" with:$/ do |cookbook_name, file_name, content|
         
     | 
| 
       22 
32 
     | 
    
         
             
              write_file(File.join(cookbook_name, file_name), content)
         
     | 
| 
       23 
33 
     | 
    
         
             
            end
         
     | 
| 
         @@ -85,27 +95,17 @@ Then /^I should have a new cookbook skeleton "(.*?)"$/ do |name| 
     | 
|
| 
       85 
95 
     | 
    
         
             
                directory "templates" do
         
     | 
| 
       86 
96 
     | 
    
         
             
                  directory "default"
         
     | 
| 
       87 
97 
     | 
    
         
             
                end
         
     | 
| 
       88 
     | 
    
         
            -
                file " 
     | 
| 
       89 
     | 
    
         
            -
                file " 
     | 
| 
      
 98 
     | 
    
         
            +
                file ".gitignore"
         
     | 
| 
      
 99 
     | 
    
         
            +
                file "chefignore"
         
     | 
| 
       90 
100 
     | 
    
         
             
                file "Berksfile" do
         
     | 
| 
       91 
101 
     | 
    
         
             
                  contains "metadata"
         
     | 
| 
       92 
102 
     | 
    
         
             
                end
         
     | 
| 
       93 
     | 
    
         
            -
                file "chefignore"
         
     | 
| 
       94 
     | 
    
         
            -
                file "Berksfile"
         
     | 
| 
       95 
103 
     | 
    
         
             
                file "Gemfile" do
         
     | 
| 
       96 
104 
     | 
    
         
             
                  contains "gem 'berkshelf'"
         
     | 
| 
       97 
     | 
    
         
            -
                end
         
     | 
| 
       98 
     | 
    
         
            -
              }
         
     | 
| 
       99 
     | 
    
         
            -
            end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
            Then /^I should have a new cookbook skeleton "(.*?)" with Vagrant support$/ do |name|
         
     | 
| 
       102 
     | 
    
         
            -
              steps %Q{ Then I should have a new cookbook skeleton "#{name}" }
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
              cb_path = Pathname.new(current_dir).join(name)
         
     | 
| 
       105 
     | 
    
         
            -
              cb_path.should have_structure {
         
     | 
| 
       106 
     | 
    
         
            -
                file "Gemfile" do
         
     | 
| 
       107 
105 
     | 
    
         
             
                  contains "gem 'vagrant'"
         
     | 
| 
       108 
106 
     | 
    
         
             
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
                file "metadata.rb"
         
     | 
| 
      
 108 
     | 
    
         
            +
                file "README.md"
         
     | 
| 
       109 
109 
     | 
    
         
             
                file "Vagrantfile" do
         
     | 
| 
       110 
110 
     | 
    
         
             
                  contains "require 'berkshelf/vagrant'"
         
     | 
| 
       111 
111 
     | 
    
         
             
                  contains "recipe[#{name}::default]"
         
     | 
| 
         @@ -113,15 +113,6 @@ Then /^I should have a new cookbook skeleton "(.*?)" with Vagrant support$/ do | 
     | 
|
| 
       113 
113 
     | 
    
         
             
              }
         
     | 
| 
       114 
114 
     | 
    
         
             
            end
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
            Then /^I should have a new cookbook skeleton "(.*?)" with Git support$/ do |name|
         
     | 
| 
       117 
     | 
    
         
            -
              steps %Q{ Then I should have a new cookbook skeleton "#{name}" }
         
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
              cb_path = Pathname.new(current_dir).join(name)
         
     | 
| 
       120 
     | 
    
         
            -
              cb_path.should have_structure {
         
     | 
| 
       121 
     | 
    
         
            -
                file ".gitignore"
         
     | 
| 
       122 
     | 
    
         
            -
              }
         
     | 
| 
       123 
     | 
    
         
            -
            end
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
116 
     | 
    
         
             
            Then /^I should have a new cookbook skeleton "(.*?)" with Foodcritic support$/ do |name|
         
     | 
| 
       126 
117 
     | 
    
         
             
              steps %Q{ Then I should have a new cookbook skeleton "#{name}" }
         
     | 
| 
       127 
118 
     | 
    
         | 
| 
         @@ -178,6 +169,21 @@ Then /^I should have a new cookbook skeleton "(.*?)" without Bundler support$/ d 
     | 
|
| 
       178 
169 
     | 
    
         
             
              }
         
     | 
| 
       179 
170 
     | 
    
         
             
            end
         
     | 
| 
       180 
171 
     | 
    
         | 
| 
      
 172 
     | 
    
         
            +
            Then /^I should have a new cookbook skeleton "(.*?)" without Git support$/ do |name|
         
     | 
| 
      
 173 
     | 
    
         
            +
              Pathname.new(current_dir).join(name).should have_structure {
         
     | 
| 
      
 174 
     | 
    
         
            +
                no_file ".gitignore"
         
     | 
| 
      
 175 
     | 
    
         
            +
              }
         
     | 
| 
      
 176 
     | 
    
         
            +
            end
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            Then /^I should have a new cookbook skeleton "(.*?)" without Vagrant support$/ do |name|
         
     | 
| 
      
 179 
     | 
    
         
            +
              Pathname.new(current_dir).join(name).should have_structure {
         
     | 
| 
      
 180 
     | 
    
         
            +
                file "Gemfile" do
         
     | 
| 
      
 181 
     | 
    
         
            +
                  does_not_contain "gem 'vagrant'"
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
                no_file "Vagrantfile"
         
     | 
| 
      
 184 
     | 
    
         
            +
              }
         
     | 
| 
      
 185 
     | 
    
         
            +
            end
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
       181 
187 
     | 
    
         
             
            Then /^the cookbook "(.*?)" should have the following files:$/ do |name, files|
         
     | 
| 
       182 
188 
     | 
    
         
             
              check_file_presence(files.raw.map{|file_row| File.join(name, file_row[0])}, true)
         
     | 
| 
       183 
189 
     | 
    
         
             
            end
         
     | 
| 
         @@ -195,6 +201,16 @@ Then /^the file "(.*?)" in the cookbook "(.*?)" should contain:$/ do |file_name, 
     | 
|
| 
       195 
201 
     | 
    
         
             
              }
         
     | 
| 
       196 
202 
     | 
    
         
             
            end
         
     | 
| 
       197 
203 
     | 
    
         | 
| 
      
 204 
     | 
    
         
            +
            Then /^the resulting "(.+)" Vagrantfile should contain:$/ do |cookbook_name, content|
         
     | 
| 
      
 205 
     | 
    
         
            +
              Pathname.new(current_dir).join(cookbook_name).should have_structure {
         
     | 
| 
      
 206 
     | 
    
         
            +
                file "Vagrantfile" do
         
     | 
| 
      
 207 
     | 
    
         
            +
                  content.respond_to?(:raw) ?
         
     | 
| 
      
 208 
     | 
    
         
            +
                    content.raw.flatten.each { |string| contains string } :
         
     | 
| 
      
 209 
     | 
    
         
            +
                    contains(content)
         
     | 
| 
      
 210 
     | 
    
         
            +
                end
         
     | 
| 
      
 211 
     | 
    
         
            +
              }
         
     | 
| 
      
 212 
     | 
    
         
            +
            end
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
       198 
214 
     | 
    
         
             
            Then /^the directory "(.*?)" should have the following files:$/ do |name, files|
         
     | 
| 
       199 
215 
     | 
    
         
             
              check_file_presence(files.raw.map{|file_row| File.join(name, file_row[0])}, true)
         
     | 
| 
       200 
216 
     | 
    
         
             
            end
         
     | 
| 
         @@ -218,3 +234,9 @@ end 
     | 
|
| 
       218 
234 
     | 
    
         
             
            Then /^the current directory should not have the following files:$/ do |files|
         
     | 
| 
       219 
235 
     | 
    
         
             
              check_file_presence(files.raw.map{|file_row| file_row[0]}, false)
         
     | 
| 
       220 
236 
     | 
    
         
             
            end
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
            Then /^I should have a Berkshelf config file$/ do
         
     | 
| 
      
 239 
     | 
    
         
            +
              Pathname.new(ENV['HOME']).join(".berkshelf").should have_structure {
         
     | 
| 
      
 240 
     | 
    
         
            +
                file "config.json"
         
     | 
| 
      
 241 
     | 
    
         
            +
              }
         
     | 
| 
      
 242 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -3,7 +3,7 @@ Feature: upload command 
     | 
|
| 
       3 
3 
     | 
    
         
             
              I need a way to upload cookbooks to a Chef server that I have installed into my Bookshelf
         
     | 
| 
       4 
4 
     | 
    
         
             
              So they are available to Chef clients
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
              @no_run @ 
     | 
| 
      
 6 
     | 
    
         
            +
              @no_run @chef_server
         
     | 
| 
       7 
7 
     | 
    
         
             
              Scenario: running the upload command when the Sources in the Berksfile are already installed
         
     | 
| 
       8 
8 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       9 
9 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -23,7 +23,7 @@ Feature: upload command 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  | openssl | 1.0.0 |
         
     | 
| 
       24 
24 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
              @ 
     | 
| 
      
 26 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       27 
27 
     | 
    
         
             
              Scenario: running the upload command when the Sources in the Berksfile have not been installed
         
     | 
| 
       28 
28 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       29 
29 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -42,7 +42,7 @@ Feature: upload command 
     | 
|
| 
       42 
42 
     | 
    
         
             
                  | openssl | 1.0.0 |
         
     | 
| 
       43 
43 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
              @ 
     | 
| 
      
 45 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       46 
46 
     | 
    
         
             
              Scenario: running the upload command with a Berksfile containing a source that has a path location
         
     | 
| 
       47 
47 
     | 
    
         
             
                Given a Berksfile with path location sources to fixtures:
         
     | 
| 
       48 
48 
     | 
    
         
             
                  | example_cookbook | example_cookbook-0.5.0 |
         
     | 
| 
         @@ -55,7 +55,7 @@ Feature: upload command 
     | 
|
| 
       55 
55 
     | 
    
         
             
                  | example_cookbook | 0.5.0 |
         
     | 
| 
       56 
56 
     | 
    
         
             
                And the exit status should be 0
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
              @ 
     | 
| 
      
 58 
     | 
    
         
            +
              @chef_server
         
     | 
| 
       59 
59 
     | 
    
         
             
              Scenario: running the upload command with a Berksfile containing a source that has a Git location
         
     | 
| 
       60 
60 
     | 
    
         
             
                Given I write to "Berksfile" with:
         
     | 
| 
       61 
61 
     | 
    
         
             
                  """
         
     | 
    
        data/generator_files/Gemfile.erb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            source  
     | 
| 
      
 1 
     | 
    
         
            +
            source :rubygems
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            gem 'berkshelf'
         
     | 
| 
       4 
4 
     | 
    
         
             
            <% if options[:foodcritic] -%>
         
     | 
| 
         @@ -7,6 +7,6 @@ gem 'thor-foodcritic' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            <% if options[:scmversion] -%>
         
     | 
| 
       8 
8 
     | 
    
         
             
            gem 'thor-scmversion'
         
     | 
| 
       9 
9 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       10 
     | 
    
         
            -
            <%  
     | 
| 
      
 10 
     | 
    
         
            +
            <% unless options[:skip_vagrant] -%>
         
     | 
| 
       11 
11 
     | 
    
         
             
            gem 'vagrant', '~> 1.0.5'
         
     | 
| 
       12 
12 
     | 
    
         
             
            <% end -%>
         
     | 
| 
         @@ -27,11 +27,24 @@ Vagrant::Config.run do |config| 
     | 
|
| 
       27 
27 
     | 
    
         
             
              # to skip installing and copying to Vagrant's shelf.
         
     | 
| 
       28 
28 
     | 
    
         
             
              # config.berkshelf.except = []
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
            <% if options[:berkshelf_config][:vagrant][:vm][:box].present? -%>
         
     | 
| 
      
 31 
     | 
    
         
            +
              config.vm.host_name = "<%= options[:berkshelf_config][:vagrant][:vm][:host_name] %>"
         
     | 
| 
      
 32 
     | 
    
         
            +
            <% else -%>
         
     | 
| 
      
 33 
     | 
    
         
            +
              config.vm.host_name = "<%= "#{cookbook_name}-berkshelf" %>"
         
     | 
| 
      
 34 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
       31 
36 
     | 
    
         | 
| 
       32 
37 
     | 
    
         
             
              # CentOS 6.3
         
     | 
| 
      
 38 
     | 
    
         
            +
            <% if options[:berkshelf_config][:vagrant][:vm][:box].present? -%>
         
     | 
| 
      
 39 
     | 
    
         
            +
              config.vm.box = "<%= options[:berkshelf_config][:vagrant][:vm][:box] %>"
         
     | 
| 
      
 40 
     | 
    
         
            +
            <% else %>
         
     | 
| 
       33 
41 
     | 
    
         
             
              config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal"
         
     | 
| 
      
 42 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
      
 43 
     | 
    
         
            +
            <% if options[:berkshelf_config][:vagrant][:vm][:box_url].present? -%>
         
     | 
| 
      
 44 
     | 
    
         
            +
              config.vm.box_url = "<%= options[:berkshelf_config][:vagrant][:vm][:box_url] %>"
         
     | 
| 
      
 45 
     | 
    
         
            +
            <% else %>
         
     | 
| 
       34 
46 
     | 
    
         
             
              config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box"
         
     | 
| 
      
 47 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
       35 
48 
     | 
    
         | 
| 
       36 
49 
     | 
    
         
             
              # Boot with a GUI so you can see the screen. (Default is headless)
         
     | 
| 
       37 
50 
     | 
    
         
             
              # config.vm.boot_mode = :gui
         
     | 
| 
         @@ -40,16 +53,22 @@ Vagrant::Config.run do |config| 
     | 
|
| 
       40 
53 
     | 
    
         
             
              # via the IP. Host-only networks can talk to the host machine as well as
         
     | 
| 
       41 
54 
     | 
    
         
             
              # any other machines on the same network, but cannot be accessed (through this
         
     | 
| 
       42 
55 
     | 
    
         
             
              # network interface) by any external networks.
         
     | 
| 
       43 
     | 
    
         
            -
              config.vm.network :hostonly, "33.33.33.10"
         
     | 
| 
      
 56 
     | 
    
         
            +
              # config.vm.network :hostonly, "33.33.33.10"
         
     | 
| 
      
 57 
     | 
    
         
            +
            <% if options[:berkshelf_config][:vagrant][:vm][:network][:hostonly].present? -%>
         
     | 
| 
      
 58 
     | 
    
         
            +
              config.vm.network :hostonly, "<%= options[:berkshelf_config][:vagrant][:vm][:network][:hostonly] %>"
         
     | 
| 
      
 59 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
       44 
60 
     | 
    
         | 
| 
       45 
61 
     | 
    
         
             
              # Assign this VM to a bridged network, allowing you to connect directly to a
         
     | 
| 
       46 
62 
     | 
    
         
             
              # network using the host's network device. This makes the VM appear as another
         
     | 
| 
       47 
63 
     | 
    
         
             
              # physical device on your network.
         
     | 
| 
       48 
     | 
    
         
            -
               
     | 
| 
      
 64 
     | 
    
         
            +
              <% unless options[:berkshelf_config][:vagrant][:vm][:network][:bridged].present? %># <% end %>config.vm.network :bridged
         
     | 
| 
       49 
65 
     | 
    
         | 
| 
       50 
66 
     | 
    
         
             
              # Forward a port from the guest to the host, which allows for outside
         
     | 
| 
       51 
67 
     | 
    
         
             
              # computers to access the VM, whereas host only networking does not.
         
     | 
| 
       52 
68 
     | 
    
         
             
              # config.vm.forward_port 80, 8080
         
     | 
| 
      
 69 
     | 
    
         
            +
            <% options[:berkshelf_config][:vagrant][:vm][:forward_port].each do |guest, host| %>
         
     | 
| 
      
 70 
     | 
    
         
            +
              config.vm.forward_port <%= guest %>, <%= host %>
         
     | 
| 
      
 71 
     | 
    
         
            +
            <% end if options[:berkshelf_config][:vagrant][:vm][:forward_port].present? %>
         
     | 
| 
       53 
72 
     | 
    
         | 
| 
       54 
73 
     | 
    
         
             
              # Share an additional folder to the guest VM. The first argument is
         
     | 
| 
       55 
74 
     | 
    
         
             
              # an identifier, the second is the path on the guest to mount the
         
     | 
| 
         @@ -59,6 +78,17 @@ Vagrant::Config.run do |config| 
     | 
|
| 
       59 
78 
     | 
    
         
             
              config.ssh.max_tries = 40
         
     | 
| 
       60 
79 
     | 
    
         
             
              config.ssh.timeout   = 120
         
     | 
| 
       61 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
            <% if options[:berkshelf_config][:vagrant][:vm][:provision] == "chef_client" -%>
         
     | 
| 
      
 82 
     | 
    
         
            +
              config.vm.provision :chef_client do |chef|
         
     | 
| 
      
 83 
     | 
    
         
            +
                chef.chef_server_url = "<%= options[:berkshelf_config][:vagrant][:chef][:chef_server_url] %>"
         
     | 
| 
      
 84 
     | 
    
         
            +
                chef.validation_client_name = "<%= options[:berkshelf_config][:vagrant][:chef][:validation_client_name] %>"
         
     | 
| 
      
 85 
     | 
    
         
            +
                chef.validation_key_path = "<%= options[:berkshelf_config][:vagrant][:chef][:validation_key_path] %>"
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                chef.run_list = [
         
     | 
| 
      
 88 
     | 
    
         
            +
                  "recipe[<%= cookbook_name %>::default]"
         
     | 
| 
      
 89 
     | 
    
         
            +
                ]
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
            <% else -%>
         
     | 
| 
       62 
92 
     | 
    
         
             
              config.vm.provision :chef_solo do |chef|    
         
     | 
| 
       63 
93 
     | 
    
         
             
                chef.json = {
         
     | 
| 
       64 
94 
     | 
    
         
             
                  :mysql => {
         
     | 
| 
         @@ -72,14 +102,5 @@ Vagrant::Config.run do |config| 
     | 
|
| 
       72 
102 
     | 
    
         
             
                  "recipe[<%= cookbook_name %>::default]"
         
     | 
| 
       73 
103 
     | 
    
         
             
                ]
         
     | 
| 
       74 
104 
     | 
    
         
             
              end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
              # config.vm.provision :chef_client do |chef|
         
     | 
| 
       77 
     | 
    
         
            -
              #   chef.chef_server_url = 'https://api.opscode.com/organizations/vialstudios'
         
     | 
| 
       78 
     | 
    
         
            -
              #   chef.validation_client_name = 'vialstudios-validator'
         
     | 
| 
       79 
     | 
    
         
            -
              #   chef.validation_key_path = '/Users/reset/.chef/vialstudios-validator.pem'
         
     | 
| 
       80 
     | 
    
         
            -
              #
         
     | 
| 
       81 
     | 
    
         
            -
              #   chef.run_list = [
         
     | 
| 
       82 
     | 
    
         
            -
              #     "recipe[<%= cookbook_name %>::default]"
         
     | 
| 
       83 
     | 
    
         
            -
              #   ]
         
     | 
| 
       84 
     | 
    
         
            -
              # end
         
     | 
| 
      
 105 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
       85 
106 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "vagrant": {
         
     | 
| 
      
 3 
     | 
    
         
            +
                "chef": {
         
     | 
| 
      
 4 
     | 
    
         
            +
                  "chef_server_url": "https://api.opscode.com/organizations/ORGNAME",
         
     | 
| 
      
 5 
     | 
    
         
            +
                    "validation_client_name": "ORGNAME-validator",
         
     | 
| 
      
 6 
     | 
    
         
            +
                    "validation_key_path": "~/validation.pem"
         
     | 
| 
      
 7 
     | 
    
         
            +
                },
         
     | 
| 
      
 8 
     | 
    
         
            +
                "vm": {
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "box": "base",
         
     | 
| 
      
 10 
     | 
    
         
            +
                  "box_url": "http://files.vagrantup.com/lucid64.box",
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "forward_port": {
         
     | 
| 
      
 12 
     | 
    
         
            +
                    "80": "8080"
         
     | 
| 
      
 13 
     | 
    
         
            +
                  },
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "host_name": "berkshelf-cookbook",
         
     | 
| 
      
 15 
     | 
    
         
            +
                  "network": {
         
     | 
| 
      
 16 
     | 
    
         
            +
                    "bridged": true,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    "hostonly": "192.168.33.10"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  },
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "provision": "chef_solo"
         
     | 
| 
      
 20 
     | 
    
         
            +
                }
         
     | 
| 
      
 21 
     | 
    
         
            +
              }
         
     | 
| 
      
 22 
     | 
    
         
            +
            }
         
     | 
    
        data/lib/berkshelf/cli.rb
    CHANGED
    
    | 
         @@ -27,6 +27,11 @@ module Berkshelf 
     | 
|
| 
       27 
27 
     | 
    
         
             
                map 'ver'       => :version
         
     | 
| 
       28 
28 
     | 
    
         
             
                map 'book'      => :cookbook
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                desc "config", "Generate a default Berkshelf configuration file"
         
     | 
| 
      
 31 
     | 
    
         
            +
                def config
         
     | 
| 
      
 32 
     | 
    
         
            +
                  ConfigGenerator.new.invoke_all
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       30 
35 
     | 
    
         
             
                class_option :config,
         
     | 
| 
       31 
36 
     | 
    
         
             
                  type: :string,
         
     | 
| 
       32 
37 
     | 
    
         
             
                  default: Berkshelf::DEFAULT_CONFIG,
         
     | 
| 
         @@ -145,21 +150,12 @@ module Berkshelf 
     | 
|
| 
       145 
150 
     | 
    
         
             
                  Berkshelf.formatter.msg license
         
     | 
| 
       146 
151 
     | 
    
         
             
                end
         
     | 
| 
       147 
152 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
                method_option :vagrant,
         
     | 
| 
       149 
     | 
    
         
            -
                  type: :boolean,
         
     | 
| 
       150 
     | 
    
         
            -
                  desc: "Creates a Vagrantfile and dynamically change other generated files to support Vagrant"
         
     | 
| 
       151 
     | 
    
         
            -
                method_option :git,
         
     | 
| 
       152 
     | 
    
         
            -
                  type: :boolean,
         
     | 
| 
       153 
     | 
    
         
            -
                  desc: "Creates additional git specific files if your project will be managed by git"
         
     | 
| 
       154 
153 
     | 
    
         
             
                method_option :foodcritic,
         
     | 
| 
       155 
154 
     | 
    
         
             
                  type: :boolean,
         
     | 
| 
       156 
155 
     | 
    
         
             
                  desc: "Creates a Thorfile with Foodcritic support to lint test your cookbook"
         
     | 
| 
       157 
156 
     | 
    
         
             
                method_option :scmversion,
         
     | 
| 
       158 
157 
     | 
    
         
             
                  type: :boolean,
         
     | 
| 
       159 
158 
     | 
    
         
             
                  desc: "Creates a Thorfile with SCMVersion support to manage versions for continuous integration"
         
     | 
| 
       160 
     | 
    
         
            -
                method_option :no_bundler,
         
     | 
| 
       161 
     | 
    
         
            -
                  type: :boolean,
         
     | 
| 
       162 
     | 
    
         
            -
                  desc: "Skips generation of a Gemfile and other Bundler specific support"
         
     | 
| 
       163 
159 
     | 
    
         
             
                method_option :license,
         
     | 
| 
       164 
160 
     | 
    
         
             
                  type: :string,
         
     | 
| 
       165 
161 
     | 
    
         
             
                  default: "reserved",
         
     | 
| 
         @@ -173,8 +169,27 @@ module Berkshelf 
     | 
|
| 
       173 
169 
     | 
    
         
             
                  type: :string,
         
     | 
| 
       174 
170 
     | 
    
         
             
                  desc: "Email address of cookbook maintainer",
         
     | 
| 
       175 
171 
     | 
    
         
             
                  aliases: "-e"
         
     | 
| 
      
 172 
     | 
    
         
            +
                method_option :no_bundler,
         
     | 
| 
      
 173 
     | 
    
         
            +
                  type: :boolean,
         
     | 
| 
      
 174 
     | 
    
         
            +
                  desc: "Skips generation of a Gemfile and other Bundler specific support"
         
     | 
| 
      
 175 
     | 
    
         
            +
                method_option :vagrant,
         
     | 
| 
      
 176 
     | 
    
         
            +
                  type: :boolean,
         
     | 
| 
      
 177 
     | 
    
         
            +
                  hide: true
         
     | 
| 
      
 178 
     | 
    
         
            +
                method_option :skip_vagrant,
         
     | 
| 
      
 179 
     | 
    
         
            +
                  type: :boolean,
         
     | 
| 
      
 180 
     | 
    
         
            +
                  desc: "Skips adding a Vagrantfile and adding supporting gems to the Gemfile"
         
     | 
| 
      
 181 
     | 
    
         
            +
                method_option :git,
         
     | 
| 
      
 182 
     | 
    
         
            +
                  type: :boolean,
         
     | 
| 
      
 183 
     | 
    
         
            +
                  hide: true
         
     | 
| 
      
 184 
     | 
    
         
            +
                method_option :skip_git,
         
     | 
| 
      
 185 
     | 
    
         
            +
                  type: :boolean,
         
     | 
| 
      
 186 
     | 
    
         
            +
                  desc: "Skips adding a .gitignore and running git init in the cookbook directory"
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
       176 
188 
     | 
    
         
             
                desc "cookbook NAME", "Create a skeleton for a new cookbook"
         
     | 
| 
       177 
189 
     | 
    
         
             
                def cookbook(name)
         
     | 
| 
      
 190 
     | 
    
         
            +
                  Berkshelf.formatter.deprecation "--git is now the default" if options[:git]
         
     | 
| 
      
 191 
     | 
    
         
            +
                  Berkshelf.formatter.deprecation "--vagrant is now the default" if options[:vagrant]
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
       178 
193 
     | 
    
         
             
                  ::Berkshelf::CookbookGenerator.new([name, File.join(Dir.pwd, name)], options).invoke_all
         
     | 
| 
       179 
194 
     | 
    
         
             
                end
         
     | 
| 
       180 
195 
     | 
    
         |