chef 15.6.10 → 15.7.30
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.
- checksums.yaml +4 -4
 - data/Gemfile +1 -1
 - data/README.md +2 -2
 - data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +22 -5
 - data/lib/chef/cookbook/cookbook_version_loader.rb +12 -6
 - data/lib/chef/cookbook_loader.rb +55 -2
 - data/lib/chef/cookbook_uploader.rb +2 -0
 - data/lib/chef/cookbook_version.rb +17 -0
 - data/lib/chef/dist.rb +3 -3
 - data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
 - data/lib/chef/knife/bootstrap.rb +5 -0
 - data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
 - data/lib/chef/knife/cookbook_upload.rb +75 -45
 - data/lib/chef/knife/core/bootstrap_context.rb +5 -5
 - data/lib/chef/knife/core/windows_bootstrap_context.rb +1 -1
 - data/lib/chef/knife/supermarket_install.rb +1 -1
 - data/lib/chef/log/winevt.rb +1 -1
 - data/lib/chef/mixin/openssl_helper.rb +21 -0
 - data/lib/chef/monkey_patches/net_http.rb +0 -38
 - data/lib/chef/provider/cron.rb +54 -9
 - data/lib/chef/provider/cron/aix.rb +9 -2
 - data/lib/chef/provider/launchd.rb +1 -1
 - data/lib/chef/provider/user/aix.rb +1 -1
 - data/lib/chef/provider/user/mac.rb +17 -22
 - data/lib/chef/provider/windows_task.rb +2 -2
 - data/lib/chef/resource/archive_file.rb +5 -2
 - data/lib/chef/resource/cron.rb +29 -0
 - data/lib/chef/resource/cron_d.rb +29 -0
 - data/lib/chef/resource/openssl_x509_certificate.rb +32 -21
 - data/lib/chef/resource/sudo.rb +13 -4
 - data/lib/chef/version.rb +2 -2
 - data/lib/chef/version_string.rb +3 -126
 - data/spec/data/cookbooks/apache2/metadata.json +33 -0
 - data/spec/data/cookbooks/java/metadata.json +33 -0
 - data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
 - data/spec/integration/knife/chef_fs_data_store_spec.rb +7 -2
 - data/spec/integration/knife/cookbook_upload_spec.rb +10 -0
 - data/spec/integration/knife/deps_spec.rb +11 -0
 - data/spec/integration/knife/upload_spec.rb +115 -14
 - data/spec/unit/cookbook/cookbook_version_loader_spec.rb +7 -4
 - data/spec/unit/knife/cookbook_upload_spec.rb +79 -18
 - data/spec/unit/mixin/openssl_helper_spec.rb +42 -0
 - data/spec/unit/provider/cron_spec.rb +127 -0
 - data/spec/unit/provider/user/aix_spec.rb +2 -2
 - metadata +8 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 21a65c380c16265bc74c76cb525f691c84c26327e067a6149805219a6424c793
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a0b987c14a4f944998856755ce3c29079437537656a23677c990354d4f412ad9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 5dd7d0407f6ab4162bb06dba39338ff1559a124eed0254e7621e727bcf20793e4c4ba024e56b111d1ffdacaf7df70d1c05e66668d270ab46f0aca0eb6f0d2e01
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 90d03863587712d956ae1f1115f5f1d0d3ea09ef9f52c0f4c1adfd7820c75869428edf8cf614babd6b02f46a39a0d56d6baaa7ad5d8a8bcd8640bcd4252313dd
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -8,7 +8,7 @@ source "https://rubygems.org" 
     | 
|
| 
       8 
8 
     | 
    
         
             
            gem "chef", path: "."
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            # necessary until we release ohai 15
         
     | 
| 
       11 
     | 
    
         
            -
            gem "ohai", git: "https://github.com/chef/ohai.git", branch: " 
     | 
| 
      
 11 
     | 
    
         
            +
            gem "ohai", git: "https://github.com/chef/ohai.git", branch: "15-stable"
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            gem "chef-utils", path: File.expand_path("../chef-utils", __FILE__) if File.exist?(File.expand_path("../chef-utils", __FILE__))
         
     | 
| 
       14 
14 
     | 
    
         
             
            gem "chef-config", path: File.expand_path("../chef-config", __FILE__) if File.exist?(File.expand_path("../chef-config", __FILE__))
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Chef Infra
         
     | 
| 
       2 
2 
     | 
    
         
             
            [](https://codeclimate.com/github/chef/chef)
         
     | 
| 
       3 
     | 
    
         
            -
            [](https://buildkite.com/chef-oss/chef-chef-chef-15-verify)
         
     | 
| 
       4 
4 
     | 
    
         
             
            [](https://badge.fury.io/rb/chef)
         
     | 
| 
       5 
5 
     | 
    
         
             
            [](https://github.com/chef/chef/blob/v15.2.21/docs/dev/design_documents/client_release_cadence.md)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
         @@ -32,7 +32,7 @@ Other useful resources for Chef Infra users: 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
            Issues can be reported by using [GitHub Issues](https://github.com/chef/chef/issues).
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            Note that this repository is primarily for reporting issues in the chef-client itself. 
     | 
| 
      
 35 
     | 
    
         
            +
            Note that this repository is primarily for reporting issues in the chef-client itself.  For reporting issues against other Chef projects, please look up the appropriate repository. If you're unsure where to submit an issue, please ask in the #chef-dev channel in [Chef Community Slack](https://community-slack.chef.io/).
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            ## How We Build & Release Chef
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
         @@ -72,12 +72,29 @@ class Chef 
     | 
|
| 
       72 
72 
     | 
    
         
             
                      end
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
                      def upload_cookbook(other, options)
         
     | 
| 
       75 
     | 
    
         
            -
                         
     | 
| 
       76 
     | 
    
         
            -
                         
     | 
| 
       77 
     | 
    
         
            -
                        uploader = Chef::CookbookUploader.new(cookbook_to_upload, force: options[:force], rest: chef_rest)
         
     | 
| 
      
 75 
     | 
    
         
            +
                        cookbook = other.chef_object if other.chef_object
         
     | 
| 
      
 76 
     | 
    
         
            +
                        raise Chef::Exceptions::MetadataNotFound.new(cookbook.root_paths[0], cookbook.name) unless cookbook.has_metadata_file?
         
     | 
| 
       78 
77 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
                         
     | 
| 
       80 
     | 
    
         
            -
                           
     | 
| 
      
 78 
     | 
    
         
            +
                        if cookbook
         
     | 
| 
      
 79 
     | 
    
         
            +
                          begin
         
     | 
| 
      
 80 
     | 
    
         
            +
                            tmp_cl = Chef::CookbookLoader.copy_to_tmp_dir_from_array([cookbook])
         
     | 
| 
      
 81 
     | 
    
         
            +
                            tmp_cl.load_cookbooks
         
     | 
| 
      
 82 
     | 
    
         
            +
                            tmp_cl.compile_metadata
         
     | 
| 
      
 83 
     | 
    
         
            +
                            tmp_cl.freeze_versions if options[:freeze]
         
     | 
| 
      
 84 
     | 
    
         
            +
                            cookbook_for_upload = []
         
     | 
| 
      
 85 
     | 
    
         
            +
                            tmp_cl.each do |cookbook_name, cookbook|
         
     | 
| 
      
 86 
     | 
    
         
            +
                              cookbook_for_upload << cookbook
         
     | 
| 
      
 87 
     | 
    
         
            +
                            end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                            uploader = Chef::CookbookUploader.new(cookbook_for_upload, force: options[:force], rest: chef_rest)
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                            with_actual_cookbooks_dir(other.parent.file_path) do
         
     | 
| 
      
 92 
     | 
    
         
            +
                              uploader.upload_cookbooks
         
     | 
| 
      
 93 
     | 
    
         
            +
                            end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                          ensure
         
     | 
| 
      
 96 
     | 
    
         
            +
                            tmp_cl.unlink!
         
     | 
| 
      
 97 
     | 
    
         
            +
                          end
         
     | 
| 
       81 
98 
     | 
    
         
             
                        end
         
     | 
| 
       82 
99 
     | 
    
         
             
                      end
         
     | 
| 
       83 
100 
     | 
    
         | 
| 
         @@ -65,19 +65,24 @@ class Chef 
     | 
|
| 
       65 
65 
     | 
    
         
             
                  # Load the cookbook. Raises an error if the cookbook_path given to the
         
     | 
| 
       66 
66 
     | 
    
         
             
                  # constructor doesn't point to a valid cookbook.
         
     | 
| 
       67 
67 
     | 
    
         
             
                  def load!
         
     | 
| 
       68 
     | 
    
         
            -
                     
     | 
| 
      
 68 
     | 
    
         
            +
                    metadata # force lazy evaluation to occur
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                    # re-raise any exception that occurred when reading the metadata
         
     | 
| 
      
 71 
     | 
    
         
            +
                    raise_metadata_error!
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                    load_all_files
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    remove_ignored_files
         
     | 
| 
       69 
76 
     | 
    
         | 
| 
       70 
77 
     | 
    
         
             
                    if empty?
         
     | 
| 
       71 
78 
     | 
    
         
             
                      raise Exceptions::CookbookNotFoundInRepo, "The directory #{cookbook_path} does not contain a cookbook"
         
     | 
| 
       72 
79 
     | 
    
         
             
                    end
         
     | 
| 
       73 
80 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                     
     | 
| 
      
 81 
     | 
    
         
            +
                    cookbook_settings
         
     | 
| 
       75 
82 
     | 
    
         
             
                  end
         
     | 
| 
       76 
83 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                  # Load the cookbook. Does not raise an error if given a non-cookbook
         
     | 
| 
       78 
     | 
    
         
            -
                  # directory as the cookbook_path. This behavior is provided for
         
     | 
| 
       79 
     | 
    
         
            -
                  # compatibility, it is recommended to use #load! instead.
         
     | 
| 
       80 
84 
     | 
    
         
             
                  def load
         
     | 
| 
      
 85 
     | 
    
         
            +
                    Chef::Log.warn "load method is deprecated. Use load! instead"
         
     | 
| 
       81 
86 
     | 
    
         
             
                    metadata # force lazy evaluation to occur
         
     | 
| 
       82 
87 
     | 
    
         | 
| 
       83 
88 
     | 
    
         
             
                    # re-raise any exception that occurred when reading the metadata
         
     | 
| 
         @@ -88,8 +93,9 @@ class Chef 
     | 
|
| 
       88 
93 
     | 
    
         
             
                    remove_ignored_files
         
     | 
| 
       89 
94 
     | 
    
         | 
| 
       90 
95 
     | 
    
         
             
                    if empty?
         
     | 
| 
       91 
     | 
    
         
            -
                       
     | 
| 
      
 96 
     | 
    
         
            +
                      raise Exceptions::CookbookNotFoundInRepo, "The directory #{cookbook_path} does not contain a cookbook"
         
     | 
| 
       92 
97 
     | 
    
         
             
                    end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
       93 
99 
     | 
    
         
             
                    cookbook_settings
         
     | 
| 
       94 
100 
     | 
    
         
             
                  end
         
     | 
| 
       95 
101 
     | 
    
         | 
    
        data/lib/chef/cookbook_loader.rb
    CHANGED
    
    | 
         @@ -44,11 +44,14 @@ class Chef 
     | 
|
| 
       44 
44 
     | 
    
         
             
                # @return [Array<String>] the array of repo paths containing cookbook dirs
         
     | 
| 
       45 
45 
     | 
    
         
             
                attr_reader :repo_paths
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
                attr_accessor :tmp_working_dir_path
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
       47 
49 
     | 
    
         
             
                # XXX: this is highly questionable combined with the Hash-style each method
         
     | 
| 
       48 
50 
     | 
    
         
             
                include Enumerable
         
     | 
| 
       49 
51 
     | 
    
         | 
| 
       50 
52 
     | 
    
         
             
                # @param repo_paths [Array<String>] the array of repo paths containing cookbook dirs
         
     | 
| 
       51 
53 
     | 
    
         
             
                def initialize(*repo_paths)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @tmp_working_dir_path = nil
         
     | 
| 
       52 
55 
     | 
    
         
             
                  @repo_paths = repo_paths.flatten.compact.map { |p| File.expand_path(p) }
         
     | 
| 
       53 
56 
     | 
    
         
             
                  raise ArgumentError, "You must specify at least one cookbook repo path" if @repo_paths.empty?
         
     | 
| 
       54 
57 
     | 
    
         
             
                end
         
     | 
| 
         @@ -92,11 +95,11 @@ class Chef 
     | 
|
| 
       92 
95 
     | 
    
         | 
| 
       93 
96 
     | 
    
         
             
                  loader = cookbook_version_loaders[cookbook_name]
         
     | 
| 
       94 
97 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
                  loader.load
         
     | 
| 
      
 98 
     | 
    
         
            +
                  loader.load!
         
     | 
| 
       96 
99 
     | 
    
         | 
| 
       97 
100 
     | 
    
         
             
                  cookbook_version = loader.cookbook_version
         
     | 
| 
       98 
101 
     | 
    
         
             
                  cookbooks_by_name[cookbook_name] = cookbook_version
         
     | 
| 
       99 
     | 
    
         
            -
                  metadata[cookbook_name] = cookbook_version.metadata
         
     | 
| 
      
 102 
     | 
    
         
            +
                  metadata[cookbook_name] = cookbook_version.metadata unless cookbook_version.nil?
         
     | 
| 
       100 
103 
     | 
    
         
             
                  cookbook_version
         
     | 
| 
       101 
104 
     | 
    
         
             
                end
         
     | 
| 
       102 
105 
     | 
    
         | 
| 
         @@ -135,6 +138,56 @@ class Chef 
     | 
|
| 
       135 
138 
     | 
    
         
             
                  cookbooks_by_name.values
         
     | 
| 
       136 
139 
     | 
    
         
             
                end
         
     | 
| 
       137 
140 
     | 
    
         | 
| 
      
 141 
     | 
    
         
            +
                # This method creates tmp directory and copies all cookbooks into it and creates cookbook loder object which points to tmp directory
         
     | 
| 
      
 142 
     | 
    
         
            +
                def self.copy_to_tmp_dir_from_array(cookbooks)
         
     | 
| 
      
 143 
     | 
    
         
            +
                  tmp_cookbook_file = Tempfile.new("tmp_working_dir_path")
         
     | 
| 
      
 144 
     | 
    
         
            +
                  tmp_cookbook_file.close
         
     | 
| 
      
 145 
     | 
    
         
            +
                  @tmp_working_dir_path = tmp_cookbook_file.path
         
     | 
| 
      
 146 
     | 
    
         
            +
                  File.unlink(@tmp_working_dir_path)
         
     | 
| 
      
 147 
     | 
    
         
            +
                  FileUtils.mkdir_p(@tmp_working_dir_path)
         
     | 
| 
      
 148 
     | 
    
         
            +
                  cookbooks.each do |cookbook|
         
     | 
| 
      
 149 
     | 
    
         
            +
                    checksums_to_on_disk_paths = cookbook.checksums
         
     | 
| 
      
 150 
     | 
    
         
            +
                    cookbook.each_file do |manifest_record|
         
     | 
| 
      
 151 
     | 
    
         
            +
                      path_in_cookbook = manifest_record[:path]
         
     | 
| 
      
 152 
     | 
    
         
            +
                      on_disk_path = checksums_to_on_disk_paths[manifest_record[:checksum]]
         
     | 
| 
      
 153 
     | 
    
         
            +
                      dest = File.join(@tmp_working_dir_path, cookbook.name.to_s, path_in_cookbook)
         
     | 
| 
      
 154 
     | 
    
         
            +
                      FileUtils.mkdir_p(File.dirname(dest))
         
     | 
| 
      
 155 
     | 
    
         
            +
                      FileUtils.cp_r(on_disk_path, dest)
         
     | 
| 
      
 156 
     | 
    
         
            +
                    end
         
     | 
| 
      
 157 
     | 
    
         
            +
                  end
         
     | 
| 
      
 158 
     | 
    
         
            +
                  tmp_cookbook_loader ||= begin
         
     | 
| 
      
 159 
     | 
    
         
            +
                    Chef::Cookbook::FileVendor.fetch_from_disk(@tmp_working_dir_path)
         
     | 
| 
      
 160 
     | 
    
         
            +
                    CookbookLoader.new(@tmp_working_dir_path)
         
     | 
| 
      
 161 
     | 
    
         
            +
                  end
         
     | 
| 
      
 162 
     | 
    
         
            +
                  tmp_cookbook_loader.tmp_working_dir_path = @tmp_working_dir_path
         
     | 
| 
      
 163 
     | 
    
         
            +
                  tmp_cookbook_loader
         
     | 
| 
      
 164 
     | 
    
         
            +
                end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                # generates metadata.json adds it in the manifest
         
     | 
| 
      
 167 
     | 
    
         
            +
                def compile_metadata
         
     | 
| 
      
 168 
     | 
    
         
            +
                  each do |cookbook_name, cookbook|
         
     | 
| 
      
 169 
     | 
    
         
            +
                    compiled_metadata = cookbook.compile_metadata
         
     | 
| 
      
 170 
     | 
    
         
            +
                    if compiled_metadata
         
     | 
| 
      
 171 
     | 
    
         
            +
                      cookbook.all_files << compiled_metadata
         
     | 
| 
      
 172 
     | 
    
         
            +
                      cookbook.cookbook_manifest.send(:generate_manifest)
         
     | 
| 
      
 173 
     | 
    
         
            +
                    end
         
     | 
| 
      
 174 
     | 
    
         
            +
                  end
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                # freeze versions of all the cookbooks
         
     | 
| 
      
 178 
     | 
    
         
            +
                def freeze_versions
         
     | 
| 
      
 179 
     | 
    
         
            +
                  each do |cookbook_name, cookbook|
         
     | 
| 
      
 180 
     | 
    
         
            +
                    cookbook.freeze_version
         
     | 
| 
      
 181 
     | 
    
         
            +
                  end
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                # removes the tmp_dir_path
         
     | 
| 
      
 185 
     | 
    
         
            +
                def unlink!
         
     | 
| 
      
 186 
     | 
    
         
            +
                  raise "Invalid directory path." if @tmp_working_dir_path.nil?
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                  FileUtils.rm_rf(@tmp_working_dir_path)
         
     | 
| 
      
 189 
     | 
    
         
            +
                end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
       138 
191 
     | 
    
         
             
                alias :cookbooks :values
         
     | 
| 
       139 
192 
     | 
    
         | 
| 
       140 
193 
     | 
    
         
             
                private
         
     | 
| 
         @@ -139,6 +139,8 @@ class Chef 
     | 
|
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
                def validate_cookbooks
         
     | 
| 
       141 
141 
     | 
    
         
             
                  cookbooks.each do |cb|
         
     | 
| 
      
 142 
     | 
    
         
            +
                    next if cb.nil?
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
       142 
144 
     | 
    
         
             
                    syntax_checker = Chef::Cookbook::SyntaxCheck.new(cb.root_dir)
         
     | 
| 
       143 
145 
     | 
    
         
             
                    Chef::Log.info("Validating ruby files")
         
     | 
| 
       144 
146 
     | 
    
         
             
                    exit(1) unless syntax_checker.validate_ruby_files
         
     | 
| 
         @@ -445,6 +445,10 @@ class Chef 
     | 
|
| 
       445 
445 
     | 
    
         
             
                  end
         
     | 
| 
       446 
446 
     | 
    
         
             
                end
         
     | 
| 
       447 
447 
     | 
    
         | 
| 
      
 448 
     | 
    
         
            +
                def has_metadata_file?
         
     | 
| 
      
 449 
     | 
    
         
            +
                  all_files.include?(metadata_json_file) || all_files.include?(metadata_rb_file)
         
     | 
| 
      
 450 
     | 
    
         
            +
                end
         
     | 
| 
      
 451 
     | 
    
         
            +
             
     | 
| 
       448 
452 
     | 
    
         
             
                ##
         
     | 
| 
       449 
453 
     | 
    
         
             
                # REST API
         
     | 
| 
       450 
454 
     | 
    
         
             
                ##
         
     | 
| 
         @@ -513,6 +517,19 @@ class Chef 
     | 
|
| 
       513 
517 
     | 
    
         
             
                  @cookbook_manifest ||= CookbookManifest.new(self)
         
     | 
| 
       514 
518 
     | 
    
         
             
                end
         
     | 
| 
       515 
519 
     | 
    
         | 
| 
      
 520 
     | 
    
         
            +
                def compile_metadata(path = root_dir)
         
     | 
| 
      
 521 
     | 
    
         
            +
                  json_file = "#{path}/metadata.json"
         
     | 
| 
      
 522 
     | 
    
         
            +
                  rb_file = "#{path}/metadata.rb"
         
     | 
| 
      
 523 
     | 
    
         
            +
                  return nil if File.exist?(json_file)
         
     | 
| 
      
 524 
     | 
    
         
            +
             
     | 
| 
      
 525 
     | 
    
         
            +
                  md = Chef::Cookbook::Metadata.new
         
     | 
| 
      
 526 
     | 
    
         
            +
                  md.from_file(rb_file)
         
     | 
| 
      
 527 
     | 
    
         
            +
                  f = File.open(json_file, "w")
         
     | 
| 
      
 528 
     | 
    
         
            +
                  f.write(Chef::JSONCompat.to_json_pretty(md))
         
     | 
| 
      
 529 
     | 
    
         
            +
                  f.close
         
     | 
| 
      
 530 
     | 
    
         
            +
                  f.path
         
     | 
| 
      
 531 
     | 
    
         
            +
                end
         
     | 
| 
      
 532 
     | 
    
         
            +
             
     | 
| 
       516 
533 
     | 
    
         
             
                private
         
     | 
| 
       517 
534 
     | 
    
         | 
| 
       518 
535 
     | 
    
         
             
                def find_preferred_manifest_record(node, segment, filename)
         
     | 
    
        data/lib/chef/dist.rb
    CHANGED
    
    | 
         @@ -9,13 +9,13 @@ class Chef 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                # A short designation for the product, used in Windows event logs
         
     | 
| 
       11 
11 
     | 
    
         
             
                # and some nomenclature.
         
     | 
| 
       12 
     | 
    
         
            -
                SHORT =  
     | 
| 
      
 12 
     | 
    
         
            +
                SHORT = ChefConfig::Dist::SHORT.freeze
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                # The name of the server product
         
     | 
| 
       15 
15 
     | 
    
         
             
                SERVER_PRODUCT = "Chef Infra Server".freeze
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                # The client's alias (chef-client)
         
     | 
| 
       18 
     | 
    
         
            -
                CLIENT =  
     | 
| 
      
 18 
     | 
    
         
            +
                CLIENT = ChefConfig::Dist::CLIENT.freeze
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                # name of the automate product
         
     | 
| 
       21 
21 
     | 
    
         
             
                AUTOMATE = "Chef Automate".freeze
         
     | 
| 
         @@ -52,7 +52,7 @@ class Chef 
     | 
|
| 
       52 
52 
     | 
    
         
             
                CONF_DIR = ChefConfig::Config.etc_chef_dir.freeze
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                # The user's configuration directory
         
     | 
| 
       55 
     | 
    
         
            -
                USER_CONF_DIR =  
     | 
| 
      
 55 
     | 
    
         
            +
                USER_CONF_DIR = ChefConfig::Dist::USER_CONF_DIR.freeze
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                # The server's configuration directory
         
     | 
| 
       58 
58 
     | 
    
         
             
                SERVER_CONF_DIR = "/etc/chef-server".freeze
         
     | 
    
        data/lib/chef/knife/bootstrap.rb
    CHANGED
    
    | 
         @@ -296,6 +296,11 @@ class Chef 
     | 
|
| 
       296 
296 
     | 
    
         
             
                    description: "URL to a custom installation script.",
         
     | 
| 
       297 
297 
     | 
    
         
             
                    proc: Proc.new { |u| Chef::Config[:knife][:bootstrap_url] = u }
         
     | 
| 
       298 
298 
     | 
    
         | 
| 
      
 299 
     | 
    
         
            +
                  option :bootstrap_product,
         
     | 
| 
      
 300 
     | 
    
         
            +
                    long: "--bootstrap-product PRODUCT",
         
     | 
| 
      
 301 
     | 
    
         
            +
                    description: "Product to install.",
         
     | 
| 
      
 302 
     | 
    
         
            +
                    default: "chef"
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
       299 
304 
     | 
    
         
             
                  option :msi_url, # Windows target only
         
     | 
| 
       300 
305 
     | 
    
         
             
                    short: "-m URL",
         
     | 
| 
       301 
306 
     | 
    
         
             
                    long: "--msi-url URL",
         
     | 
| 
         @@ -177,7 +177,7 @@ do_download() { 
     | 
|
| 
       177 
177 
     | 
    
         
             
              else
         
     | 
| 
       178 
178 
     | 
    
         
             
                echo "-----> Installing Chef Omnibus (<%= @config[:channel] %>/<%= version_to_install %>)"
         
     | 
| 
       179 
179 
     | 
    
         
             
                do_download ${install_sh} $tmp_dir/install.sh
         
     | 
| 
       180 
     | 
    
         
            -
                sh $tmp_dir/install.sh -P  
     | 
| 
      
 180 
     | 
    
         
            +
                sh $tmp_dir/install.sh -P <%= @config[:bootstrap_product] %> -c <%= @config[:channel] %> -v <%= version_to_install %>
         
     | 
| 
       181 
181 
     | 
    
         
             
              fi
         
     | 
| 
       182 
182 
     | 
    
         
             
            <% end %>
         
     | 
| 
       183 
183 
     | 
    
         | 
| 
         @@ -185,55 +185,55 @@ if test "x$tmp_dir" != "x"; then 
     | 
|
| 
       185 
185 
     | 
    
         
             
              rm -r "$tmp_dir"
         
     | 
| 
       186 
186 
     | 
    
         
             
            fi
         
     | 
| 
       187 
187 
     | 
    
         | 
| 
       188 
     | 
    
         
            -
            mkdir -p  
     | 
| 
      
 188 
     | 
    
         
            +
            mkdir -p /etc/chef
         
     | 
| 
       189 
189 
     | 
    
         | 
| 
       190 
190 
     | 
    
         
             
            <% if client_pem -%>
         
     | 
| 
       191 
     | 
    
         
            -
            (umask 077 && (cat >  
     | 
| 
      
 191 
     | 
    
         
            +
            (umask 077 && (cat > /etc/chef/client.pem <<'EOP'
         
     | 
| 
       192 
192 
     | 
    
         
             
            <%= ::File.read(::File.expand_path(client_pem)) %>
         
     | 
| 
       193 
193 
     | 
    
         
             
            EOP
         
     | 
| 
       194 
194 
     | 
    
         
             
            )) || exit 1
         
     | 
| 
       195 
195 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       196 
196 
     | 
    
         | 
| 
       197 
197 
     | 
    
         
             
            <% if validation_key -%>
         
     | 
| 
       198 
     | 
    
         
            -
            (umask 077 && (cat >  
     | 
| 
      
 198 
     | 
    
         
            +
            (umask 077 && (cat > /etc/chef/validation.pem <<'EOP'
         
     | 
| 
       199 
199 
     | 
    
         
             
            <%= validation_key %>
         
     | 
| 
       200 
200 
     | 
    
         
             
            EOP
         
     | 
| 
       201 
201 
     | 
    
         
             
            )) || exit 1
         
     | 
| 
       202 
202 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       203 
203 
     | 
    
         | 
| 
       204 
204 
     | 
    
         
             
            <% if encrypted_data_bag_secret -%>
         
     | 
| 
       205 
     | 
    
         
            -
            (umask 077 && (cat >  
     | 
| 
      
 205 
     | 
    
         
            +
            (umask 077 && (cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
         
     | 
| 
       206 
206 
     | 
    
         
             
            <%= encrypted_data_bag_secret %>
         
     | 
| 
       207 
207 
     | 
    
         
             
            EOP
         
     | 
| 
       208 
208 
     | 
    
         
             
            )) || exit 1
         
     | 
| 
       209 
209 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       210 
210 
     | 
    
         | 
| 
       211 
211 
     | 
    
         
             
            <% unless trusted_certs.empty? -%>
         
     | 
| 
       212 
     | 
    
         
            -
            mkdir -p  
     | 
| 
      
 212 
     | 
    
         
            +
            mkdir -p /etc/chef/trusted_certs
         
     | 
| 
       213 
213 
     | 
    
         
             
            <%= trusted_certs %>
         
     | 
| 
       214 
214 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       215 
215 
     | 
    
         | 
| 
       216 
216 
     | 
    
         
             
            <%# Generate Ohai Hints -%>
         
     | 
| 
       217 
217 
     | 
    
         
             
            <% unless @chef_config[:knife][:hints].nil? || @chef_config[:knife][:hints].empty? -%>
         
     | 
| 
       218 
     | 
    
         
            -
            mkdir -p  
     | 
| 
      
 218 
     | 
    
         
            +
            mkdir -p /etc/chef/ohai/hints
         
     | 
| 
       219 
219 
     | 
    
         | 
| 
       220 
220 
     | 
    
         
             
            <% @chef_config[:knife][:hints].each do |name, hash| -%>
         
     | 
| 
       221 
     | 
    
         
            -
            cat >  
     | 
| 
      
 221 
     | 
    
         
            +
            cat > /etc/chef/ohai/hints/<%= name %>.json <<'EOP'
         
     | 
| 
       222 
222 
     | 
    
         
             
            <%= Chef::JSONCompat.to_json(hash) %>
         
     | 
| 
       223 
223 
     | 
    
         
             
            EOP
         
     | 
| 
       224 
224 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       225 
225 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       226 
226 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
            cat >  
     | 
| 
      
 227 
     | 
    
         
            +
            cat > /etc/chef/client.rb <<'EOP'
         
     | 
| 
       228 
228 
     | 
    
         
             
            <%= config_content %>
         
     | 
| 
       229 
229 
     | 
    
         
             
            EOP
         
     | 
| 
       230 
230 
     | 
    
         | 
| 
       231 
     | 
    
         
            -
            cat >  
     | 
| 
      
 231 
     | 
    
         
            +
            cat > /etc/chef/first-boot.json <<'EOP'
         
     | 
| 
       232 
232 
     | 
    
         
             
            <%= Chef::JSONCompat.to_json(first_boot) %>
         
     | 
| 
       233 
233 
     | 
    
         
             
            EOP
         
     | 
| 
       234 
234 
     | 
    
         | 
| 
       235 
235 
     | 
    
         
             
            <% unless client_d.empty? -%>
         
     | 
| 
       236 
     | 
    
         
            -
            mkdir -p  
     | 
| 
      
 236 
     | 
    
         
            +
            mkdir -p /etc/chef/client.d
         
     | 
| 
       237 
237 
     | 
    
         
             
            <%= client_d %>
         
     | 
| 
       238 
238 
     | 
    
         
             
            <% end -%>
         
     | 
| 
       239 
239 
     | 
    
         | 
| 
         @@ -20,11 +20,14 @@ 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            require_relative "../knife"
         
     | 
| 
       22 
22 
     | 
    
         
             
            require_relative "../cookbook_uploader"
         
     | 
| 
      
 23 
     | 
    
         
            +
            require_relative "../mixin/file_class"
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
            class Chef
         
     | 
| 
       25 
26 
     | 
    
         
             
              class Knife
         
     | 
| 
       26 
27 
     | 
    
         
             
                class CookbookUpload < Knife
         
     | 
| 
       27 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                  include Chef::Mixin::FileClass
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       28 
31 
     | 
    
         
             
                  CHECKSUM = "checksum".freeze
         
     | 
| 
       29 
32 
     | 
    
         
             
                  MATCH_CHECKSUM = /[0-9a-f]{32,}/.freeze
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
         @@ -93,57 +96,84 @@ class Chef 
     | 
|
| 
       93 
96 
     | 
    
         
             
                    # to check for the existence of a cookbook's dependencies.
         
     | 
| 
       94 
97 
     | 
    
         
             
                    @server_side_cookbooks = Chef::CookbookVersion.list_all_versions
         
     | 
| 
       95 
98 
     | 
    
         
             
                    justify_width = @server_side_cookbooks.map(&:size).max.to_i + 2
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                       
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                      if cookbooks_for_upload.any?
         
     | 
| 
       105 
     | 
    
         
            -
                        begin
         
     | 
| 
       106 
     | 
    
         
            -
                          upload(cookbooks_for_upload, justify_width)
         
     | 
| 
       107 
     | 
    
         
            -
                        rescue Exceptions::CookbookFrozen
         
     | 
| 
       108 
     | 
    
         
            -
                          ui.warn("Not updating version constraints for some cookbooks in the environment as the cookbook is frozen.")
         
     | 
| 
       109 
     | 
    
         
            -
                        end
         
     | 
| 
       110 
     | 
    
         
            -
                        ui.info("Uploaded all cookbooks.")
         
     | 
| 
       111 
     | 
    
         
            -
                      else
         
     | 
| 
       112 
     | 
    
         
            -
                        cookbook_path = config[:cookbook_path].respond_to?(:join) ? config[:cookbook_path].join(", ") : config[:cookbook_path]
         
     | 
| 
       113 
     | 
    
         
            -
                        ui.warn("Could not find any cookbooks in your cookbook path: #{cookbook_path}. Use --cookbook-path to specify the desired path.")
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    cookbooks = []
         
     | 
| 
      
 101 
     | 
    
         
            +
                    cookbooks_to_upload.each do |cookbook_name, cookbook|
         
     | 
| 
      
 102 
     | 
    
         
            +
                      raise Chef::Exceptions::MetadataNotFound.new(cookbook.root_paths[0], cookbook_name) unless cookbook.has_metadata_file?
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                      if cookbook.metadata.name.nil?
         
     | 
| 
      
 105 
     | 
    
         
            +
                        message = "Cookbook loaded at path [#{cookbook.root_paths[0]}] has invalid metadata: #{cookbook.metadata.errors.join("; ")}"
         
     | 
| 
      
 106 
     | 
    
         
            +
                        raise Chef::Exceptions::MetadataNotValid, message
         
     | 
| 
       114 
107 
     | 
    
         
             
                      end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                      cookbooks << cookbook
         
     | 
| 
      
 110 
     | 
    
         
            +
                    end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                    if cookbooks.empty?
         
     | 
| 
      
 113 
     | 
    
         
            +
                      cookbook_path = config[:cookbook_path].respond_to?(:join) ? config[:cookbook_path].join(", ") : config[:cookbook_path]
         
     | 
| 
      
 114 
     | 
    
         
            +
                      ui.warn("Could not find any cookbooks in your cookbook path: #{cookbook_path}. Use --cookbook-path to specify the desired path.")
         
     | 
| 
       115 
115 
     | 
    
         
             
                    else
         
     | 
| 
       116 
     | 
    
         
            -
                       
     | 
| 
       117 
     | 
    
         
            -
                         
     | 
| 
       118 
     | 
    
         
            -
                         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
      
 116 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 117 
     | 
    
         
            +
                        tmp_cl = Chef::CookbookLoader.copy_to_tmp_dir_from_array(cookbooks)
         
     | 
| 
      
 118 
     | 
    
         
            +
                        tmp_cl.load_cookbooks
         
     | 
| 
      
 119 
     | 
    
         
            +
                        tmp_cl.compile_metadata
         
     | 
| 
      
 120 
     | 
    
         
            +
                        tmp_cl.freeze_versions if config[:freeze]
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                        cookbooks_for_upload = []
         
     | 
| 
      
 123 
     | 
    
         
            +
                        tmp_cl.each do |cookbook_name, cookbook|
         
     | 
| 
      
 124 
     | 
    
         
            +
                          cookbooks_for_upload << cookbook
         
     | 
| 
       121 
125 
     | 
    
         
             
                          version_constraints_to_update[cookbook_name] = cookbook.version
         
     | 
| 
       122 
     | 
    
         
            -
                        rescue Exceptions::CookbookNotFoundInRepo => e
         
     | 
| 
       123 
     | 
    
         
            -
                          upload_failures += 1
         
     | 
| 
       124 
     | 
    
         
            -
                          ui.error("Could not find cookbook #{cookbook_name} in your cookbook path, skipping it")
         
     | 
| 
       125 
     | 
    
         
            -
                          Log.debug(e)
         
     | 
| 
       126 
     | 
    
         
            -
                          upload_failures += 1
         
     | 
| 
       127 
     | 
    
         
            -
                        rescue Exceptions::CookbookFrozen
         
     | 
| 
       128 
     | 
    
         
            -
                          ui.warn("Not updating version constraints for #{cookbook_name} in the environment as the cookbook is frozen.")
         
     | 
| 
       129 
     | 
    
         
            -
                          upload_failures += 1
         
     | 
| 
       130 
126 
     | 
    
         
             
                        end
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 127 
     | 
    
         
            +
                        if config[:all]
         
     | 
| 
      
 128 
     | 
    
         
            +
                          if cookbooks_for_upload.any?
         
     | 
| 
      
 129 
     | 
    
         
            +
                            begin
         
     | 
| 
      
 130 
     | 
    
         
            +
                              upload(cookbooks_for_upload, justify_width)
         
     | 
| 
      
 131 
     | 
    
         
            +
                            rescue Chef::Exceptions::CookbookFrozen
         
     | 
| 
      
 132 
     | 
    
         
            +
                              ui.warn("Not updating version constraints for some cookbooks in the environment as the cookbook is frozen.")
         
     | 
| 
      
 133 
     | 
    
         
            +
                              ui.error("Uploading of some of the cookbooks must be failed. Remove cookbook whose version is frozen from your cookbooks repo OR use --force option.")
         
     | 
| 
      
 134 
     | 
    
         
            +
                              upload_failures += 1
         
     | 
| 
      
 135 
     | 
    
         
            +
                            rescue SystemExit => e
         
     | 
| 
      
 136 
     | 
    
         
            +
                              tmp_cl.unlink!
         
     | 
| 
      
 137 
     | 
    
         
            +
                              raise exit e.status
         
     | 
| 
      
 138 
     | 
    
         
            +
                            end
         
     | 
| 
      
 139 
     | 
    
         
            +
                            ui.info("Uploaded all cookbooks.") if upload_failures == 0
         
     | 
| 
      
 140 
     | 
    
         
            +
                          end
         
     | 
| 
      
 141 
     | 
    
         
            +
                        else
         
     | 
| 
      
 142 
     | 
    
         
            +
                          tmp_cl.each do |cookbook_name, cookbook|
         
     | 
| 
      
 143 
     | 
    
         
            +
                            begin
         
     | 
| 
      
 144 
     | 
    
         
            +
                              upload([cookbook], justify_width)
         
     | 
| 
      
 145 
     | 
    
         
            +
                              upload_ok += 1
         
     | 
| 
      
 146 
     | 
    
         
            +
                            rescue Exceptions::CookbookNotFoundInRepo => e
         
     | 
| 
      
 147 
     | 
    
         
            +
                              upload_failures += 1
         
     | 
| 
      
 148 
     | 
    
         
            +
                              ui.error("Could not find cookbook #{cookbook_name} in your cookbook path, skipping it")
         
     | 
| 
      
 149 
     | 
    
         
            +
                              Log.debug(e)
         
     | 
| 
      
 150 
     | 
    
         
            +
                              upload_failures += 1
         
     | 
| 
      
 151 
     | 
    
         
            +
                            rescue Exceptions::CookbookFrozen
         
     | 
| 
      
 152 
     | 
    
         
            +
                              ui.warn("Not updating version constraints for #{cookbook_name} in the environment as the cookbook is frozen.")
         
     | 
| 
      
 153 
     | 
    
         
            +
                              upload_failures += 1
         
     | 
| 
      
 154 
     | 
    
         
            +
                            rescue SystemExit => e
         
     | 
| 
      
 155 
     | 
    
         
            +
                              tmp_cl.unlink!
         
     | 
| 
      
 156 
     | 
    
         
            +
                              raise exit e.status
         
     | 
| 
      
 157 
     | 
    
         
            +
                            end
         
     | 
| 
      
 158 
     | 
    
         
            +
                          end
         
     | 
| 
       132 
159 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
      
 160 
     | 
    
         
            +
                          if upload_failures == 0
         
     | 
| 
      
 161 
     | 
    
         
            +
                            ui.info "Uploaded #{upload_ok} cookbook#{upload_ok == 1 ? "" : "s"}."
         
     | 
| 
      
 162 
     | 
    
         
            +
                          elsif upload_failures > 0 && upload_ok > 0
         
     | 
| 
      
 163 
     | 
    
         
            +
                            ui.warn "Uploaded #{upload_ok} cookbook#{upload_ok == 1 ? "" : "s"} ok but #{upload_failures} " +
         
     | 
| 
      
 164 
     | 
    
         
            +
                              "cookbook#{upload_failures == 1 ? "" : "s"} upload failed."
         
     | 
| 
      
 165 
     | 
    
         
            +
                          elsif upload_failures > 0 && upload_ok == 0
         
     | 
| 
      
 166 
     | 
    
         
            +
                            ui.error "Failed to upload #{upload_failures} cookbook#{upload_failures == 1 ? "" : "s"}."
         
     | 
| 
      
 167 
     | 
    
         
            +
                            exit 1
         
     | 
| 
      
 168 
     | 
    
         
            +
                          end
         
     | 
| 
      
 169 
     | 
    
         
            +
                        end
         
     | 
| 
      
 170 
     | 
    
         
            +
                        unless version_constraints_to_update.empty?
         
     | 
| 
      
 171 
     | 
    
         
            +
                          update_version_constraints(version_constraints_to_update) if config[:environment]
         
     | 
| 
      
 172 
     | 
    
         
            +
                        end
         
     | 
| 
      
 173 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 174 
     | 
    
         
            +
                        tmp_cl.unlink!
         
     | 
| 
       141 
175 
     | 
    
         
             
                      end
         
     | 
| 
       142 
176 
     | 
    
         
             
                    end
         
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
                    unless version_constraints_to_update.empty?
         
     | 
| 
       145 
     | 
    
         
            -
                      update_version_constraints(version_constraints_to_update) if config[:environment]
         
     | 
| 
       146 
     | 
    
         
            -
                    end
         
     | 
| 
       147 
177 
     | 
    
         
             
                  end
         
     | 
| 
       148 
178 
     | 
    
         | 
| 
       149 
179 
     | 
    
         
             
                  def cookbooks_to_upload
         
     | 
| 
         @@ -161,7 +191,7 @@ class Chef 
     | 
|
| 
       161 
191 
     | 
    
         
             
                              end
         
     | 
| 
       162 
192 
     | 
    
         
             
                            end
         
     | 
| 
       163 
193 
     | 
    
         
             
                          rescue Exceptions::CookbookNotFoundInRepo => e
         
     | 
| 
       164 
     | 
    
         
            -
                            ui.error( 
     | 
| 
      
 194 
     | 
    
         
            +
                            ui.error(e.message)
         
     | 
| 
       165 
195 
     | 
    
         
             
                            Log.debug(e)
         
     | 
| 
       166 
196 
     | 
    
         
             
                          end
         
     | 
| 
       167 
197 
     | 
    
         
             
                        end
         
     |