chef 12.2.0.rc.1-x86-mingw32 → 12.2.0.rc.2-x86-mingw32
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/lib/chef/cookbook/remote_file_vendor.rb +1 -1
 - data/lib/chef/cookbook_manifest.rb +17 -3
 - data/lib/chef/cookbook_version.rb +19 -0
 - data/lib/chef/mixin/params_validate.rb +19 -42
 - data/lib/chef/platform/provider_priority_map.rb +1 -0
 - data/lib/chef/policy_builder/policyfile.rb +9 -5
 - data/lib/chef/provider/deploy.rb +87 -104
 - data/lib/chef/provider/dsc_resource.rb +1 -1
 - data/lib/chef/provider/git.rb +0 -4
 - data/lib/chef/provider/package/macports.rb +1 -0
 - data/lib/chef/resource.rb +0 -9
 - data/lib/chef/resource/deploy.rb +217 -52
 - data/lib/chef/resource/git.rb +1 -1
 - data/lib/chef/resource/lwrp_base.rb +8 -0
 - data/lib/chef/resource/macports_package.rb +1 -0
 - data/lib/chef/version.rb +1 -1
 - data/spec/functional/resource/deploy_revision_spec.rb +0 -35
 - data/spec/unit/cookbook/file_vendor_spec.rb +28 -8
 - data/spec/unit/cookbook_manifest_spec.rb +19 -2
 - data/spec/unit/cookbook_uploader_spec.rb +7 -1
 - data/spec/unit/mixin/params_validate_spec.rb +61 -75
 - data/spec/unit/policy_builder/policyfile_spec.rb +48 -13
 - data/spec/unit/resource/deploy_spec.rb +0 -27
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 95f1fc26dcbb0acd2ff639fbd4351c9b1db84230
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 9612d865502926406abf76a144d370f2099e56ec
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 86b701ae07c18f297733774d4bae5266256f7f5d2b944a6313f19f76559cd7c36f779d935922bc5c600fd94485ef9107c725374ad143b8cd187ea84a40be384b
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d7a2bb01f542028be6852cbefa05058f5d24ec4fd43715d485d17a7bb07cfea3fe81b334d9b5a7bf965ae72803caff3e9f3ff020d520c559eb049ecabd520c21
         
     | 
| 
         @@ -36,6 +36,7 @@ class Chef 
     | 
|
| 
       36 
36 
     | 
    
         
             
                def_delegator :@cookbook_version, :root_paths
         
     | 
| 
       37 
37 
     | 
    
         
             
                def_delegator :@cookbook_version, :segment_filenames
         
     | 
| 
       38 
38 
     | 
    
         
             
                def_delegator :@cookbook_version, :name
         
     | 
| 
      
 39 
     | 
    
         
            +
                def_delegator :@cookbook_version, :identifier
         
     | 
| 
       39 
40 
     | 
    
         
             
                def_delegator :@cookbook_version, :metadata
         
     | 
| 
       40 
41 
     | 
    
         
             
                def_delegator :@cookbook_version, :full_name
         
     | 
| 
       41 
42 
     | 
    
         
             
                def_delegator :@cookbook_version, :version
         
     | 
| 
         @@ -141,9 +142,16 @@ class Chef 
     | 
|
| 
       141 
142 
     | 
    
         
             
                # REST api. If there is an existing document on the server and it
         
     | 
| 
       142 
143 
     | 
    
         
             
                # is marked frozen, a PUT will result in a 409 Conflict.
         
     | 
| 
       143 
144 
     | 
    
         
             
                def save_url
         
     | 
| 
       144 
     | 
    
         
            -
                   
     | 
| 
      
 145 
     | 
    
         
            +
                  if policy_mode?
         
     | 
| 
      
 146 
     | 
    
         
            +
                    "#{named_cookbook_url}/#{identifier}"
         
     | 
| 
      
 147 
     | 
    
         
            +
                  else
         
     | 
| 
      
 148 
     | 
    
         
            +
                    "#{named_cookbook_url}/#{version}"
         
     | 
| 
      
 149 
     | 
    
         
            +
                  end
         
     | 
| 
       145 
150 
     | 
    
         
             
                end
         
     | 
| 
       146 
151 
     | 
    
         | 
| 
      
 152 
     | 
    
         
            +
                def named_cookbook_url
         
     | 
| 
      
 153 
     | 
    
         
            +
                  "#{cookbook_url_path}/#{name}"
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
       147 
155 
     | 
    
         
             
                # Adds the `force=true` parameter to the upload URL. This allows
         
     | 
| 
       148 
156 
     | 
    
         
             
                # the user to overwrite a frozen cookbook (a PUT against the
         
     | 
| 
       149 
157 
     | 
    
         
             
                # normal #save_url raises a 409 Conflict in this case).
         
     | 
| 
         @@ -214,10 +222,16 @@ class Chef 
     | 
|
| 
       214 
222 
     | 
    
         
             
                    end
         
     | 
| 
       215 
223 
     | 
    
         
             
                  end
         
     | 
| 
       216 
224 
     | 
    
         | 
| 
       217 
     | 
    
         
            -
                  manifest[:cookbook_name] = name.to_s
         
     | 
| 
       218 
225 
     | 
    
         
             
                  manifest[:metadata] = metadata
         
     | 
| 
       219 
226 
     | 
    
         
             
                  manifest[:version] = metadata.version
         
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
                  if policy_mode?
         
     | 
| 
      
 229 
     | 
    
         
            +
                    manifest[:name] = name.to_s
         
     | 
| 
      
 230 
     | 
    
         
            +
                    manifest[:identifier] = identifier
         
     | 
| 
      
 231 
     | 
    
         
            +
                  else
         
     | 
| 
      
 232 
     | 
    
         
            +
                    manifest[:name] = full_name
         
     | 
| 
      
 233 
     | 
    
         
            +
                    manifest[:cookbook_name] = name.to_s
         
     | 
| 
      
 234 
     | 
    
         
            +
                  end
         
     | 
| 
       221 
235 
     | 
    
         | 
| 
       222 
236 
     | 
    
         
             
                  @manifest_records_by_path = extract_manifest_records_by_path(manifest)
         
     | 
| 
       223 
237 
     | 
    
         
             
                  @manifest = manifest
         
     | 
| 
         @@ -78,6 +78,16 @@ class Chef 
     | 
|
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                attr_accessor :chef_server_rest
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                # The `identifier` field is used for cookbook_artifacts, which are
         
     | 
| 
      
 82 
     | 
    
         
            +
                # organized on the chef server according to their content. If the
         
     | 
| 
      
 83 
     | 
    
         
            +
                # policy_mode option to CookbookManifest is set to true it will include
         
     | 
| 
      
 84 
     | 
    
         
            +
                # this field in the manifest Hash and in the upload URL.
         
     | 
| 
      
 85 
     | 
    
         
            +
                #
         
     | 
| 
      
 86 
     | 
    
         
            +
                # This field may be removed or have different behavior in the future, don't
         
     | 
| 
      
 87 
     | 
    
         
            +
                # use it in 3rd party code.
         
     | 
| 
      
 88 
     | 
    
         
            +
                # @api private
         
     | 
| 
      
 89 
     | 
    
         
            +
                attr_accessor :identifier
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       81 
91 
     | 
    
         
             
                # The first root path is the primary cookbook dir, from which metadata is loaded
         
     | 
| 
       82 
92 
     | 
    
         
             
                def root_dir
         
     | 
| 
       83 
93 
     | 
    
         
             
                  root_paths[0]
         
     | 
| 
         @@ -458,6 +468,15 @@ class Chef 
     | 
|
| 
       458 
468 
     | 
    
         
             
                  cookbook_version
         
     | 
| 
       459 
469 
     | 
    
         
             
                end
         
     | 
| 
       460 
470 
     | 
    
         | 
| 
      
 471 
     | 
    
         
            +
                def self.from_cb_artifact_data(o)
         
     | 
| 
      
 472 
     | 
    
         
            +
                  cookbook_version = new(o["name"])
         
     | 
| 
      
 473 
     | 
    
         
            +
                  # We want the Chef::Cookbook::Metadata object to always be inflated
         
     | 
| 
      
 474 
     | 
    
         
            +
                  cookbook_version.metadata = Chef::Cookbook::Metadata.from_hash(o["metadata"])
         
     | 
| 
      
 475 
     | 
    
         
            +
                  cookbook_version.manifest = o
         
     | 
| 
      
 476 
     | 
    
         
            +
                  cookbook_version.identifier = o["identifier"]
         
     | 
| 
      
 477 
     | 
    
         
            +
                  cookbook_version
         
     | 
| 
      
 478 
     | 
    
         
            +
                end
         
     | 
| 
      
 479 
     | 
    
         
            +
             
     | 
| 
       461 
480 
     | 
    
         
             
                # @deprecated This method was used by the Ruby Chef Server and is no longer
         
     | 
| 
       462 
481 
     | 
    
         
             
                #   needed. There is no replacement.
         
     | 
| 
       463 
482 
     | 
    
         
             
                def generate_manifest_with_urls(&url_generator)
         
     | 
| 
         @@ -81,58 +81,34 @@ class Chef 
     | 
|
| 
       81 
81 
     | 
    
         
             
                    DelayedEvaluator.new(&block)
         
     | 
| 
       82 
82 
     | 
    
         
             
                  end
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                   
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                  def nillable_set_or_return(symbol, arg, validation)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  def set_or_return(symbol, arg, validation)
         
     | 
| 
       87 
85 
     | 
    
         
             
                    iv_symbol = "@#{symbol.to_s}".to_sym
         
     | 
| 
       88 
     | 
    
         
            -
                    if  
     | 
| 
       89 
     | 
    
         
            -
                       
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
      
 86 
     | 
    
         
            +
                    if arg == nil && self.instance_variable_defined?(iv_symbol) == true
         
     | 
| 
      
 87 
     | 
    
         
            +
                      ivar = self.instance_variable_get(iv_symbol)
         
     | 
| 
      
 88 
     | 
    
         
            +
                      if(ivar.is_a?(DelayedEvaluator))
         
     | 
| 
      
 89 
     | 
    
         
            +
                        validate({ symbol => ivar.call }, { symbol => validation })[symbol]
         
     | 
| 
       91 
90 
     | 
    
         
             
                      else
         
     | 
| 
       92 
     | 
    
         
            -
                         
     | 
| 
       93 
     | 
    
         
            -
                        set_ivar(iv_symbol, symbol, nil, validation)
         
     | 
| 
      
 91 
     | 
    
         
            +
                        ivar
         
     | 
| 
       94 
92 
     | 
    
         
             
                      end
         
     | 
| 
       95 
93 
     | 
    
         
             
                    else
         
     | 
| 
       96 
     | 
    
         
            -
                       
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 94 
     | 
    
         
            +
                      if(arg.is_a?(DelayedEvaluator))
         
     | 
| 
      
 95 
     | 
    
         
            +
                        val = arg
         
     | 
| 
      
 96 
     | 
    
         
            +
                      else
         
     | 
| 
      
 97 
     | 
    
         
            +
                        val = validate({ symbol => arg }, { symbol => validation })[symbol]
         
     | 
| 
       99 
98 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 99 
     | 
    
         
            +
                        # Handle the case where the "default" was a DelayedEvaluator. In
         
     | 
| 
      
 100 
     | 
    
         
            +
                        # this case, the block yields an optional parameter of +self+,
         
     | 
| 
      
 101 
     | 
    
         
            +
                        # which is the equivalent of "new_resource"
         
     | 
| 
      
 102 
     | 
    
         
            +
                        if val.is_a?(DelayedEvaluator)
         
     | 
| 
      
 103 
     | 
    
         
            +
                          val = val.call(self)
         
     | 
| 
      
 104 
     | 
    
         
            +
                        end
         
     | 
| 
      
 105 
     | 
    
         
            +
                      end
         
     | 
| 
      
 106 
     | 
    
         
            +
                      self.instance_variable_set(iv_symbol, val)
         
     | 
| 
       106 
107 
     | 
    
         
             
                    end
         
     | 
| 
       107 
108 
     | 
    
         
             
                  end
         
     | 
| 
       108 
109 
     | 
    
         | 
| 
       109 
110 
     | 
    
         
             
                  private
         
     | 
| 
       110 
111 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                  def get_ivar(iv_symbol, symbol, validation)
         
     | 
| 
       112 
     | 
    
         
            -
                    ivar = self.instance_variable_get(iv_symbol)
         
     | 
| 
       113 
     | 
    
         
            -
                    if(ivar.is_a?(DelayedEvaluator))
         
     | 
| 
       114 
     | 
    
         
            -
                      validate({ symbol => ivar.call }, { symbol => validation })[symbol]
         
     | 
| 
       115 
     | 
    
         
            -
                    else
         
     | 
| 
       116 
     | 
    
         
            -
                      ivar
         
     | 
| 
       117 
     | 
    
         
            -
                    end
         
     | 
| 
       118 
     | 
    
         
            -
                  end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                  def set_ivar(iv_symbol, symbol, arg, validation)
         
     | 
| 
       121 
     | 
    
         
            -
                    if(arg.is_a?(DelayedEvaluator))
         
     | 
| 
       122 
     | 
    
         
            -
                      val = arg
         
     | 
| 
       123 
     | 
    
         
            -
                    else
         
     | 
| 
       124 
     | 
    
         
            -
                      val = validate({ symbol => arg }, { symbol => validation })[symbol]
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                      # Handle the case where the "default" was a DelayedEvaluator. In
         
     | 
| 
       127 
     | 
    
         
            -
                      # this case, the block yields an optional parameter of +self+,
         
     | 
| 
       128 
     | 
    
         
            -
                      # which is the equivalent of "new_resource"
         
     | 
| 
       129 
     | 
    
         
            -
                      if val.is_a?(DelayedEvaluator)
         
     | 
| 
       130 
     | 
    
         
            -
                        val = val.call(self)
         
     | 
| 
       131 
     | 
    
         
            -
                      end
         
     | 
| 
       132 
     | 
    
         
            -
                    end
         
     | 
| 
       133 
     | 
    
         
            -
                    self.instance_variable_set(iv_symbol, val)
         
     | 
| 
       134 
     | 
    
         
            -
                  end
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
112 
     | 
    
         
             
                    # Return the value of a parameter, or nil if it doesn't exist.
         
     | 
| 
       137 
113 
     | 
    
         
             
                    def _pv_opts_lookup(opts, key)
         
     | 
| 
       138 
114 
     | 
    
         
             
                      if opts.has_key?(key.to_s)
         
     | 
| 
         @@ -263,3 +239,4 @@ class Chef 
     | 
|
| 
       263 
239 
     | 
    
         
             
                end
         
     | 
| 
       264 
240 
     | 
    
         
             
              end
         
     | 
| 
       265 
241 
     | 
    
         
             
            end
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
         @@ -239,7 +239,7 @@ class Chef 
     | 
|
| 
       239 
239 
     | 
    
         
             
                  def policyfile_location
         
     | 
| 
       240 
240 
     | 
    
         
             
                    if Chef::Config[:policy_document_native_api]
         
     | 
| 
       241 
241 
     | 
    
         
             
                      validate_policy_config!
         
     | 
| 
       242 
     | 
    
         
            -
                      " 
     | 
| 
      
 242 
     | 
    
         
            +
                      "policy_groups/#{policy_group}/policies/#{policy_name}"
         
     | 
| 
       243 
243 
     | 
    
         
             
                    else
         
     | 
| 
       244 
244 
     | 
    
         
             
                      "data/policyfiles/#{deployment_group}"
         
     | 
| 
       245 
245 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -368,16 +368,20 @@ class Chef 
     | 
|
| 
       368 
368 
     | 
    
         
             
                  end
         
     | 
| 
       369 
369 
     | 
    
         | 
| 
       370 
370 
     | 
    
         
             
                  def artifact_manifest_for(cookbook_name, lock_data)
         
     | 
| 
       371 
     | 
    
         
            -
                     
     | 
| 
       372 
     | 
    
         
            -
                    rel_url = "cookbook_artifacts/#{cookbook_name}/#{ 
     | 
| 
       373 
     | 
    
         
            -
                    http_api.get(rel_url)
         
     | 
| 
      
 371 
     | 
    
         
            +
                    identifier = lock_data["identifier"]
         
     | 
| 
      
 372 
     | 
    
         
            +
                    rel_url = "cookbook_artifacts/#{cookbook_name}/#{identifier}"
         
     | 
| 
      
 373 
     | 
    
         
            +
                    inflate_cbv_object(http_api.get(rel_url))
         
     | 
| 
       374 
374 
     | 
    
         
             
                  rescue Exception => e
         
     | 
| 
       375 
     | 
    
         
            -
                    message = "Error loading cookbook #{cookbook_name}  
     | 
| 
      
 375 
     | 
    
         
            +
                    message = "Error loading cookbook #{cookbook_name} with identifier #{identifier} from #{rel_url}: #{e.class} - #{e.message}"
         
     | 
| 
       376 
376 
     | 
    
         
             
                    err = Chef::Exceptions::CookbookNotFound.new(message)
         
     | 
| 
       377 
377 
     | 
    
         
             
                    err.set_backtrace(e.backtrace)
         
     | 
| 
       378 
378 
     | 
    
         
             
                    raise err
         
     | 
| 
       379 
379 
     | 
    
         
             
                  end
         
     | 
| 
       380 
380 
     | 
    
         | 
| 
      
 381 
     | 
    
         
            +
                  def inflate_cbv_object(raw_manifest)
         
     | 
| 
      
 382 
     | 
    
         
            +
                    Chef::CookbookVersion.from_cb_artifact_data(raw_manifest)
         
     | 
| 
      
 383 
     | 
    
         
            +
                  end
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
       381 
385 
     | 
    
         
             
                end
         
     | 
| 
       382 
386 
     | 
    
         
             
              end
         
     | 
| 
       383 
387 
     | 
    
         
             
            end
         
     | 
    
        data/lib/chef/provider/deploy.rb
    CHANGED
    
    | 
         @@ -42,38 +42,18 @@ class Chef 
     | 
|
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                    # @configuration is not used by Deploy, it is only for backwards compat with
         
     | 
| 
       44 
44 
     | 
    
         
             
                    # chef-deploy or capistrano hooks that might use it to get environment information
         
     | 
| 
       45 
     | 
    
         
            -
                    @configuration = new_resource.to_hash
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @configuration = @new_resource.to_hash
         
     | 
| 
       46 
46 
     | 
    
         
             
                    @configuration[:environment] = @configuration[:environment] && @configuration[:environment]["RAILS_ENV"]
         
     | 
| 
       47 
47 
     | 
    
         
             
                  end
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                  # @return [Array] create_dirs_before_symlink parameter set on the resource
         
     | 
| 
       50 
     | 
    
         
            -
                  def create_dirs_before_symlink
         
     | 
| 
       51 
     | 
    
         
            -
                    new_resource.create_dirs_before_symlink || []
         
     | 
| 
       52 
     | 
    
         
            -
                  end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                  # @return [Array] purge_before_symlink paremeter set on the resource
         
     | 
| 
       55 
     | 
    
         
            -
                  def purge_before_symlink
         
     | 
| 
       56 
     | 
    
         
            -
                    new_resource.purge_before_symlink || []
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                  # @return [Hash] symlinks parameter set on the resource
         
     | 
| 
       60 
     | 
    
         
            -
                  def symlinks
         
     | 
| 
       61 
     | 
    
         
            -
                    new_resource.symlinks || {}
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                  # @return [Hash] symlink_before_migrate parameter set on the resource
         
     | 
| 
       65 
     | 
    
         
            -
                  def symlink_before_migrate
         
     | 
| 
       66 
     | 
    
         
            -
                    new_resource.symlink_before_migrate || {}
         
     | 
| 
       67 
     | 
    
         
            -
                  end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
49 
     | 
    
         
             
                  def whyrun_supported?
         
     | 
| 
       70 
50 
     | 
    
         
             
                    true
         
     | 
| 
       71 
51 
     | 
    
         
             
                  end
         
     | 
| 
       72 
52 
     | 
    
         | 
| 
       73 
53 
     | 
    
         
             
                  def load_current_resource
         
     | 
| 
       74 
     | 
    
         
            -
                    scm_provider.load_current_resource
         
     | 
| 
       75 
     | 
    
         
            -
                    @release_path = new_resource.deploy_to + "/releases/#{release_slug}"
         
     | 
| 
       76 
     | 
    
         
            -
                    @shared_path = new_resource.shared_path
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @scm_provider.load_current_resource
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @release_path = @new_resource.deploy_to + "/releases/#{release_slug}"
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @shared_path = @new_resource.shared_path
         
     | 
| 
       77 
57 
     | 
    
         
             
                  end
         
     | 
| 
       78 
58 
     | 
    
         | 
| 
       79 
59 
     | 
    
         
             
                  def sudo(command,&block)
         
     | 
| 
         @@ -82,10 +62,10 @@ class Chef 
     | 
|
| 
       82 
62 
     | 
    
         | 
| 
       83 
63 
     | 
    
         
             
                  def run(command, &block)
         
     | 
| 
       84 
64 
     | 
    
         
             
                    exec = execute(command, &block)
         
     | 
| 
       85 
     | 
    
         
            -
                    exec.user(new_resource.user) if new_resource.user
         
     | 
| 
       86 
     | 
    
         
            -
                    exec.group(new_resource.group) if new_resource.group
         
     | 
| 
      
 65 
     | 
    
         
            +
                    exec.user(@new_resource.user) if @new_resource.user
         
     | 
| 
      
 66 
     | 
    
         
            +
                    exec.group(@new_resource.group) if @new_resource.group
         
     | 
| 
       87 
67 
     | 
    
         
             
                    exec.cwd(release_path) unless exec.cwd
         
     | 
| 
       88 
     | 
    
         
            -
                    exec.environment(new_resource.environment) unless exec.environment
         
     | 
| 
      
 68 
     | 
    
         
            +
                    exec.environment(@new_resource.environment) unless exec.environment
         
     | 
| 
       89 
69 
     | 
    
         
             
                    converge_by("execute #{command}") do
         
     | 
| 
       90 
70 
     | 
    
         
             
                      exec
         
     | 
| 
       91 
71 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -98,8 +78,8 @@ class Chef 
     | 
|
| 
       98 
78 
     | 
    
         
             
                      #There is no reason to assume 2 deployments in a single chef run, hence fails in whyrun.
         
     | 
| 
       99 
79 
     | 
    
         
             
                    end
         
     | 
| 
       100 
80 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                    [ new_resource.before_migrate, new_resource.before_symlink,
         
     | 
| 
       102 
     | 
    
         
            -
                      new_resource.before_restart, new_resource.after_restart ].each do |script|
         
     | 
| 
      
 81 
     | 
    
         
            +
                    [ @new_resource.before_migrate, @new_resource.before_symlink,
         
     | 
| 
      
 82 
     | 
    
         
            +
                      @new_resource.before_restart, @new_resource.after_restart ].each do |script|
         
     | 
| 
       103 
83 
     | 
    
         
             
                      requirements.assert(:deploy, :force_deploy) do |a|
         
     | 
| 
       104 
84 
     | 
    
         
             
                        callback_file = "#{release_path}/#{script}"
         
     | 
| 
       105 
85 
     | 
    
         
             
                        a.assertion do
         
     | 
| 
         @@ -120,7 +100,7 @@ class Chef 
     | 
|
| 
       120 
100 
     | 
    
         
             
                    save_release_state
         
     | 
| 
       121 
101 
     | 
    
         
             
                    if deployed?(release_path )
         
     | 
| 
       122 
102 
     | 
    
         
             
                      if current_release?(release_path )
         
     | 
| 
       123 
     | 
    
         
            -
                        Chef::Log.debug("#{new_resource} is the latest version")
         
     | 
| 
      
 103 
     | 
    
         
            +
                        Chef::Log.debug("#{@new_resource} is the latest version")
         
     | 
| 
       124 
104 
     | 
    
         
             
                      else
         
     | 
| 
       125 
105 
     | 
    
         
             
                        rollback_to release_path
         
     | 
| 
       126 
106 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -137,7 +117,7 @@ class Chef 
     | 
|
| 
       137 
117 
     | 
    
         
             
                      converge_by("delete deployed app at #{release_path} prior to force-deploy") do
         
     | 
| 
       138 
118 
     | 
    
         
             
                        Chef::Log.info("Already deployed app at #{release_path}, forcing.")
         
     | 
| 
       139 
119 
     | 
    
         
             
                        FileUtils.rm_rf(release_path)
         
     | 
| 
       140 
     | 
    
         
            -
                        Chef::Log.info("#{new_resource} forcing deploy of already deployed app at #{release_path}")
         
     | 
| 
      
 120 
     | 
    
         
            +
                        Chef::Log.info("#{@new_resource} forcing deploy of already deployed app at #{release_path}")
         
     | 
| 
       141 
121 
     | 
    
         
             
                      end
         
     | 
| 
       142 
122 
     | 
    
         
             
                    end
         
     | 
| 
       143 
123 
     | 
    
         | 
| 
         @@ -163,7 +143,7 @@ class Chef 
     | 
|
| 
       163 
143 
     | 
    
         | 
| 
       164 
144 
     | 
    
         
             
                    releases_to_nuke.each do |i|
         
     | 
| 
       165 
145 
     | 
    
         
             
                      converge_by("roll back by removing release #{i}") do
         
     | 
| 
       166 
     | 
    
         
            -
                        Chef::Log.info "#{new_resource} removing release: #{i}"
         
     | 
| 
      
 146 
     | 
    
         
            +
                        Chef::Log.info "#{@new_resource} removing release: #{i}"
         
     | 
| 
       167 
147 
     | 
    
         
             
                        FileUtils.rm_rf i
         
     | 
| 
       168 
148 
     | 
    
         
             
                      end
         
     | 
| 
       169 
149 
     | 
    
         
             
                      release_deleted(i)
         
     | 
| 
         @@ -177,21 +157,21 @@ class Chef 
     | 
|
| 
       177 
157 
     | 
    
         
             
                    copy_cached_repo
         
     | 
| 
       178 
158 
     | 
    
         
             
                    install_gems
         
     | 
| 
       179 
159 
     | 
    
         
             
                    enforce_ownership
         
     | 
| 
       180 
     | 
    
         
            -
                    callback(:before_migrate, new_resource.before_migrate)
         
     | 
| 
      
 160 
     | 
    
         
            +
                    callback(:before_migrate, @new_resource.before_migrate)
         
     | 
| 
       181 
161 
     | 
    
         
             
                    migrate
         
     | 
| 
       182 
     | 
    
         
            -
                    callback(:before_symlink, new_resource.before_symlink)
         
     | 
| 
      
 162 
     | 
    
         
            +
                    callback(:before_symlink, @new_resource.before_symlink)
         
     | 
| 
       183 
163 
     | 
    
         
             
                    symlink
         
     | 
| 
       184 
     | 
    
         
            -
                    callback(:before_restart, new_resource.before_restart)
         
     | 
| 
      
 164 
     | 
    
         
            +
                    callback(:before_restart, @new_resource.before_restart)
         
     | 
| 
       185 
165 
     | 
    
         
             
                    restart
         
     | 
| 
       186 
     | 
    
         
            -
                    callback(:after_restart, new_resource.after_restart)
         
     | 
| 
      
 166 
     | 
    
         
            +
                    callback(:after_restart, @new_resource.after_restart)
         
     | 
| 
       187 
167 
     | 
    
         
             
                    cleanup!
         
     | 
| 
       188 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} deployed to #{new_resource.deploy_to}"
         
     | 
| 
      
 168 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} deployed to #{@new_resource.deploy_to}"
         
     | 
| 
       189 
169 
     | 
    
         
             
                  end
         
     | 
| 
       190 
170 
     | 
    
         | 
| 
       191 
171 
     | 
    
         
             
                  def rollback
         
     | 
| 
       192 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} rolling back to previous release #{release_path}"
         
     | 
| 
      
 172 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} rolling back to previous release #{release_path}"
         
     | 
| 
       193 
173 
     | 
    
         
             
                    symlink
         
     | 
| 
       194 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} restarting with previous release"
         
     | 
| 
      
 174 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} restarting with previous release"
         
     | 
| 
       195 
175 
     | 
    
         
             
                    restart
         
     | 
| 
       196 
176 
     | 
    
         
             
                  end
         
     | 
| 
       197 
177 
     | 
    
         | 
| 
         @@ -199,7 +179,7 @@ class Chef 
     | 
|
| 
       199 
179 
     | 
    
         
             
                    @collection = Chef::ResourceCollection.new
         
     | 
| 
       200 
180 
     | 
    
         
             
                    case callback_code
         
     | 
| 
       201 
181 
     | 
    
         
             
                    when Proc
         
     | 
| 
       202 
     | 
    
         
            -
                      Chef::Log.info "#{new_resource} running callback #{what}"
         
     | 
| 
      
 182 
     | 
    
         
            +
                      Chef::Log.info "#{@new_resource} running callback #{what}"
         
     | 
| 
       203 
183 
     | 
    
         
             
                      recipe_eval(&callback_code)
         
     | 
| 
       204 
184 
     | 
    
         
             
                    when String
         
     | 
| 
       205 
185 
     | 
    
         
             
                      run_callback_from_file("#{release_path}/#{callback_code}")
         
     | 
| 
         @@ -211,17 +191,17 @@ class Chef 
     | 
|
| 
       211 
191 
     | 
    
         
             
                  def migrate
         
     | 
| 
       212 
192 
     | 
    
         
             
                    run_symlinks_before_migrate
         
     | 
| 
       213 
193 
     | 
    
         | 
| 
       214 
     | 
    
         
            -
                    if new_resource.migrate
         
     | 
| 
      
 194 
     | 
    
         
            +
                    if @new_resource.migrate
         
     | 
| 
       215 
195 
     | 
    
         
             
                      enforce_ownership
         
     | 
| 
       216 
196 
     | 
    
         | 
| 
       217 
     | 
    
         
            -
                      environment = new_resource.environment
         
     | 
| 
      
 197 
     | 
    
         
            +
                      environment = @new_resource.environment
         
     | 
| 
       218 
198 
     | 
    
         
             
                      env_info = environment && environment.map do |key_and_val|
         
     | 
| 
       219 
199 
     | 
    
         
             
                        "#{key_and_val.first}='#{key_and_val.last}'"
         
     | 
| 
       220 
200 
     | 
    
         
             
                      end.join(" ")
         
     | 
| 
       221 
201 
     | 
    
         | 
| 
       222 
     | 
    
         
            -
                      converge_by("execute migration command #{new_resource.migration_command}") do
         
     | 
| 
       223 
     | 
    
         
            -
                        Chef::Log.info "#{new_resource} migrating #{new_resource.user} with environment #{env_info}"
         
     | 
| 
       224 
     | 
    
         
            -
                        run_command(run_options(:command => new_resource.migration_command, :cwd=>release_path, :log_level => :info))
         
     | 
| 
      
 202 
     | 
    
         
            +
                      converge_by("execute migration command #{@new_resource.migration_command}") do
         
     | 
| 
      
 203 
     | 
    
         
            +
                        Chef::Log.info "#{@new_resource} migrating #{@new_resource.user} with environment #{env_info}"
         
     | 
| 
      
 204 
     | 
    
         
            +
                        run_command(run_options(:command => @new_resource.migration_command, :cwd=>release_path, :log_level => :info))
         
     | 
| 
       225 
205 
     | 
    
         
             
                      end
         
     | 
| 
       226 
206 
     | 
    
         
             
                    end
         
     | 
| 
       227 
207 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -230,18 +210,18 @@ class Chef 
     | 
|
| 
       230 
210 
     | 
    
         
             
                    purge_tempfiles_from_current_release
         
     | 
| 
       231 
211 
     | 
    
         
             
                    link_tempfiles_to_current_release
         
     | 
| 
       232 
212 
     | 
    
         
             
                    link_current_release_to_production
         
     | 
| 
       233 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} updated symlinks"
         
     | 
| 
      
 213 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} updated symlinks"
         
     | 
| 
       234 
214 
     | 
    
         
             
                  end
         
     | 
| 
       235 
215 
     | 
    
         | 
| 
       236 
216 
     | 
    
         
             
                  def restart
         
     | 
| 
       237 
     | 
    
         
            -
                    if restart_cmd = new_resource.restart_command
         
     | 
| 
      
 217 
     | 
    
         
            +
                    if restart_cmd = @new_resource.restart_command
         
     | 
| 
       238 
218 
     | 
    
         
             
                      if restart_cmd.kind_of?(Proc)
         
     | 
| 
       239 
     | 
    
         
            -
                        Chef::Log.info("#{new_resource} restarting app with embedded recipe")
         
     | 
| 
      
 219 
     | 
    
         
            +
                        Chef::Log.info("#{@new_resource} restarting app with embedded recipe")
         
     | 
| 
       240 
220 
     | 
    
         
             
                        recipe_eval(&restart_cmd)
         
     | 
| 
       241 
221 
     | 
    
         
             
                      else
         
     | 
| 
       242 
     | 
    
         
            -
                        converge_by("restart app using command #{new_resource.restart_command}") do
         
     | 
| 
       243 
     | 
    
         
            -
                          Chef::Log.info("#{new_resource} restarting app")
         
     | 
| 
       244 
     | 
    
         
            -
                          run_command(run_options(:command => new_resource.restart_command, :cwd => new_resource.current_path))
         
     | 
| 
      
 222 
     | 
    
         
            +
                        converge_by("restart app using command #{@new_resource.restart_command}") do
         
     | 
| 
      
 223 
     | 
    
         
            +
                          Chef::Log.info("#{@new_resource} restarting app")
         
     | 
| 
      
 224 
     | 
    
         
            +
                          run_command(run_options(:command => @new_resource.restart_command, :cwd => @new_resource.current_path))
         
     | 
| 
       245 
225 
     | 
    
         
             
                        end
         
     | 
| 
       246 
226 
     | 
    
         
             
                      end
         
     | 
| 
       247 
227 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -252,10 +232,10 @@ class Chef 
     | 
|
| 
       252 
232 
     | 
    
         
             
                      release_created(release_path)
         
     | 
| 
       253 
233 
     | 
    
         
             
                    end
         
     | 
| 
       254 
234 
     | 
    
         | 
| 
       255 
     | 
    
         
            -
                    chop = -1 - new_resource.keep_releases
         
     | 
| 
      
 235 
     | 
    
         
            +
                    chop = -1 - @new_resource.keep_releases
         
     | 
| 
       256 
236 
     | 
    
         
             
                    all_releases[0..chop].each do |old_release|
         
     | 
| 
       257 
237 
     | 
    
         
             
                      converge_by("remove old release #{old_release}") do
         
     | 
| 
       258 
     | 
    
         
            -
                        Chef::Log.info "#{new_resource} removing old release #{old_release}"
         
     | 
| 
      
 238 
     | 
    
         
            +
                        Chef::Log.info "#{@new_resource} removing old release #{old_release}"
         
     | 
| 
       259 
239 
     | 
    
         
             
                        FileUtils.rm_rf(old_release)
         
     | 
| 
       260 
240 
     | 
    
         
             
                      end
         
     | 
| 
       261 
241 
     | 
    
         
             
                      release_deleted(old_release)
         
     | 
| 
         @@ -263,11 +243,11 @@ class Chef 
     | 
|
| 
       263 
243 
     | 
    
         
             
                  end
         
     | 
| 
       264 
244 
     | 
    
         | 
| 
       265 
245 
     | 
    
         
             
                  def all_releases
         
     | 
| 
       266 
     | 
    
         
            -
                    Dir.glob(Chef::Util::PathHelper.escape_glob(new_resource.deploy_to) + "/releases/*").sort
         
     | 
| 
      
 246 
     | 
    
         
            +
                    Dir.glob(Chef::Util::PathHelper.escape_glob(@new_resource.deploy_to) + "/releases/*").sort
         
     | 
| 
       267 
247 
     | 
    
         
             
                  end
         
     | 
| 
       268 
248 
     | 
    
         | 
| 
       269 
249 
     | 
    
         
             
                  def update_cached_repo
         
     | 
| 
       270 
     | 
    
         
            -
                    if new_resource.svn_force_export
         
     | 
| 
      
 250 
     | 
    
         
            +
                    if @new_resource.svn_force_export
         
     | 
| 
       271 
251 
     | 
    
         
             
                    # TODO assertion, non-recoverable - @scm_provider must be svn if force_export?
         
     | 
| 
       272 
252 
     | 
    
         
             
                      svn_force_export
         
     | 
| 
       273 
253 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -276,92 +256,95 @@ class Chef 
     | 
|
| 
       276 
256 
     | 
    
         
             
                  end
         
     | 
| 
       277 
257 
     | 
    
         | 
| 
       278 
258 
     | 
    
         
             
                  def run_scm_sync
         
     | 
| 
       279 
     | 
    
         
            -
                    scm_provider.run_action(:sync)
         
     | 
| 
      
 259 
     | 
    
         
            +
                    @scm_provider.run_action(:sync)
         
     | 
| 
       280 
260 
     | 
    
         
             
                  end
         
     | 
| 
       281 
261 
     | 
    
         | 
| 
       282 
262 
     | 
    
         
             
                  def svn_force_export
         
     | 
| 
       283 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} exporting source repository"
         
     | 
| 
       284 
     | 
    
         
            -
                    scm_provider.run_action(:force_export)
         
     | 
| 
      
 263 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} exporting source repository"
         
     | 
| 
      
 264 
     | 
    
         
            +
                    @scm_provider.run_action(:force_export)
         
     | 
| 
       285 
265 
     | 
    
         
             
                  end
         
     | 
| 
       286 
266 
     | 
    
         | 
| 
       287 
267 
     | 
    
         
             
                  def copy_cached_repo
         
     | 
| 
       288 
     | 
    
         
            -
                    target_dir_path = new_resource.deploy_to + "/releases"
         
     | 
| 
      
 268 
     | 
    
         
            +
                    target_dir_path = @new_resource.deploy_to + "/releases"
         
     | 
| 
       289 
269 
     | 
    
         
             
                    converge_by("deploy from repo to #{target_dir_path} ") do
         
     | 
| 
       290 
270 
     | 
    
         
             
                      FileUtils.rm_rf(release_path) if ::File.exist?(release_path)
         
     | 
| 
       291 
271 
     | 
    
         
             
                      FileUtils.mkdir_p(target_dir_path)
         
     | 
| 
       292 
     | 
    
         
            -
                      FileUtils.cp_r(::File.join(new_resource.destination, "."), release_path, :preserve => true)
         
     | 
| 
       293 
     | 
    
         
            -
                      Chef::Log.info "#{new_resource} copied the cached checkout to #{release_path}"
         
     | 
| 
      
 272 
     | 
    
         
            +
                      FileUtils.cp_r(::File.join(@new_resource.destination, "."), release_path, :preserve => true)
         
     | 
| 
      
 273 
     | 
    
         
            +
                      Chef::Log.info "#{@new_resource} copied the cached checkout to #{release_path}"
         
     | 
| 
       294 
274 
     | 
    
         
             
                    end
         
     | 
| 
       295 
275 
     | 
    
         
             
                  end
         
     | 
| 
       296 
276 
     | 
    
         | 
| 
       297 
277 
     | 
    
         
             
                  def enforce_ownership
         
     | 
| 
       298 
     | 
    
         
            -
                    converge_by("force ownership of #{new_resource.deploy_to} to #{new_resource.group}:#{new_resource.user}") do
         
     | 
| 
       299 
     | 
    
         
            -
                      FileUtils.chown_R(new_resource.user, new_resource.group, new_resource.deploy_to)
         
     | 
| 
       300 
     | 
    
         
            -
                      Chef::Log.info("#{new_resource} set user to #{new_resource.user}") if new_resource.user
         
     | 
| 
       301 
     | 
    
         
            -
                      Chef::Log.info("#{new_resource} set group to #{new_resource.group}") if new_resource.group
         
     | 
| 
      
 278 
     | 
    
         
            +
                    converge_by("force ownership of #{@new_resource.deploy_to} to #{@new_resource.group}:#{@new_resource.user}") do
         
     | 
| 
      
 279 
     | 
    
         
            +
                      FileUtils.chown_R(@new_resource.user, @new_resource.group, @new_resource.deploy_to)
         
     | 
| 
      
 280 
     | 
    
         
            +
                      Chef::Log.info("#{@new_resource} set user to #{@new_resource.user}") if @new_resource.user
         
     | 
| 
      
 281 
     | 
    
         
            +
                      Chef::Log.info("#{@new_resource} set group to #{@new_resource.group}") if @new_resource.group
         
     | 
| 
       302 
282 
     | 
    
         
             
                    end
         
     | 
| 
       303 
283 
     | 
    
         
             
                  end
         
     | 
| 
       304 
284 
     | 
    
         | 
| 
       305 
285 
     | 
    
         
             
                  def verify_directories_exist
         
     | 
| 
       306 
     | 
    
         
            -
                    create_dir_unless_exists(new_resource.deploy_to)
         
     | 
| 
       307 
     | 
    
         
            -
                    create_dir_unless_exists(new_resource.shared_path)
         
     | 
| 
      
 286 
     | 
    
         
            +
                    create_dir_unless_exists(@new_resource.deploy_to)
         
     | 
| 
      
 287 
     | 
    
         
            +
                    create_dir_unless_exists(@new_resource.shared_path)
         
     | 
| 
       308 
288 
     | 
    
         
             
                  end
         
     | 
| 
       309 
289 
     | 
    
         | 
| 
       310 
290 
     | 
    
         
             
                  def link_current_release_to_production
         
     | 
| 
       311 
     | 
    
         
            -
                    converge_by(["remove existing link at #{new_resource.current_path}",
         
     | 
| 
       312 
     | 
    
         
            -
                                "link release #{release_path} into production at #{new_resource.current_path}"]) do
         
     | 
| 
       313 
     | 
    
         
            -
                      FileUtils.rm_f(new_resource.current_path)
         
     | 
| 
      
 291 
     | 
    
         
            +
                    converge_by(["remove existing link at #{@new_resource.current_path}",
         
     | 
| 
      
 292 
     | 
    
         
            +
                                "link release #{release_path} into production at #{@new_resource.current_path}"]) do
         
     | 
| 
      
 293 
     | 
    
         
            +
                      FileUtils.rm_f(@new_resource.current_path)
         
     | 
| 
       314 
294 
     | 
    
         
             
                      begin
         
     | 
| 
       315 
     | 
    
         
            -
                        FileUtils.ln_sf(release_path, new_resource.current_path)
         
     | 
| 
      
 295 
     | 
    
         
            +
                        FileUtils.ln_sf(release_path, @new_resource.current_path)
         
     | 
| 
       316 
296 
     | 
    
         
             
                      rescue => e
         
     | 
| 
       317 
297 
     | 
    
         
             
                        raise Chef::Exceptions::FileNotFound.new("Cannot symlink current release to production: #{e.message}")
         
     | 
| 
       318 
298 
     | 
    
         
             
                      end
         
     | 
| 
       319 
     | 
    
         
            -
                      Chef::Log.info "#{new_resource} linked release #{release_path} into production at #{new_resource.current_path}"
         
     | 
| 
      
 299 
     | 
    
         
            +
                      Chef::Log.info "#{@new_resource} linked release #{release_path} into production at #{@new_resource.current_path}"
         
     | 
| 
       320 
300 
     | 
    
         
             
                    end
         
     | 
| 
       321 
301 
     | 
    
         
             
                    enforce_ownership
         
     | 
| 
       322 
302 
     | 
    
         
             
                  end
         
     | 
| 
       323 
303 
     | 
    
         | 
| 
       324 
304 
     | 
    
         
             
                  def run_symlinks_before_migrate
         
     | 
| 
       325 
     | 
    
         
            -
                    links_info = symlink_before_migrate.map { |src, dst| "#{src} => #{dst}" }.join(", ")
         
     | 
| 
      
 305 
     | 
    
         
            +
                    links_info = @new_resource.symlink_before_migrate.map { |src, dst| "#{src} => #{dst}" }.join(", ")
         
     | 
| 
       326 
306 
     | 
    
         
             
                    converge_by("make pre-migration symlinks: #{links_info}") do
         
     | 
| 
       327 
     | 
    
         
            -
                      symlink_before_migrate.each do |src, dest|
         
     | 
| 
      
 307 
     | 
    
         
            +
                      @new_resource.symlink_before_migrate.each do |src, dest|
         
     | 
| 
       328 
308 
     | 
    
         
             
                        begin
         
     | 
| 
       329 
     | 
    
         
            -
                          FileUtils.ln_sf(new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
         
     | 
| 
      
 309 
     | 
    
         
            +
                          FileUtils.ln_sf(@new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
         
     | 
| 
       330 
310 
     | 
    
         
             
                        rescue => e
         
     | 
| 
       331 
     | 
    
         
            -
                          raise Chef::Exceptions::FileNotFound.new("Cannot symlink #{new_resource.shared_path}/#{src} to #{release_path}/#{dest} before migrate: #{e.message}")
         
     | 
| 
      
 311 
     | 
    
         
            +
                          raise Chef::Exceptions::FileNotFound.new("Cannot symlink #{@new_resource.shared_path}/#{src} to #{release_path}/#{dest} before migrate: #{e.message}")
         
     | 
| 
       332 
312 
     | 
    
         
             
                        end
         
     | 
| 
       333 
313 
     | 
    
         
             
                      end
         
     | 
| 
       334 
     | 
    
         
            -
                      Chef::Log.info "#{new_resource} made pre-migration symlinks"
         
     | 
| 
      
 314 
     | 
    
         
            +
                      Chef::Log.info "#{@new_resource} made pre-migration symlinks"
         
     | 
| 
       335 
315 
     | 
    
         
             
                    end
         
     | 
| 
       336 
316 
     | 
    
         
             
                  end
         
     | 
| 
       337 
317 
     | 
    
         | 
| 
       338 
318 
     | 
    
         
             
                  def link_tempfiles_to_current_release
         
     | 
| 
       339 
     | 
    
         
            -
                    dirs_info = create_dirs_before_symlink.join(",")
         
     | 
| 
       340 
     | 
    
         
            -
                    create_dirs_before_symlink.each do |dir|
         
     | 
| 
      
 319 
     | 
    
         
            +
                    dirs_info = @new_resource.create_dirs_before_symlink.join(",")
         
     | 
| 
      
 320 
     | 
    
         
            +
                    @new_resource.create_dirs_before_symlink.each do |dir|
         
     | 
| 
       341 
321 
     | 
    
         
             
                      create_dir_unless_exists(release_path + "/#{dir}")
         
     | 
| 
       342 
322 
     | 
    
         
             
                    end
         
     | 
| 
       343 
     | 
    
         
            -
                    Chef::Log.info("#{new_resource} created directories before symlinking: #{dirs_info}")
         
     | 
| 
      
 323 
     | 
    
         
            +
                    Chef::Log.info("#{@new_resource} created directories before symlinking: #{dirs_info}")
         
     | 
| 
       344 
324 
     | 
    
         | 
| 
       345 
     | 
    
         
            -
                    links_info = symlinks.map { |src, dst| "#{src} => #{dst}" }.join(", ")
         
     | 
| 
      
 325 
     | 
    
         
            +
                    links_info = @new_resource.symlinks.map { |src, dst| "#{src} => #{dst}" }.join(", ")
         
     | 
| 
       346 
326 
     | 
    
         
             
                    converge_by("link shared paths into current release:  #{links_info}") do
         
     | 
| 
       347 
     | 
    
         
            -
                      symlinks.each do |src, dest|
         
     | 
| 
      
 327 
     | 
    
         
            +
                      @new_resource.symlinks.each do |src, dest|
         
     | 
| 
       348 
328 
     | 
    
         
             
                        begin
         
     | 
| 
       349 
     | 
    
         
            -
                          FileUtils.ln_sf(::File.join(new_resource.shared_path, src), ::File.join(release_path, dest))
         
     | 
| 
      
 329 
     | 
    
         
            +
                          FileUtils.ln_sf(::File.join(@new_resource.shared_path, src), ::File.join(release_path, dest))
         
     | 
| 
       350 
330 
     | 
    
         
             
                        rescue => e
         
     | 
| 
       351 
     | 
    
         
            -
                          raise Chef::Exceptions::FileNotFound.new("Cannot symlink shared data #{::File.join(new_resource.shared_path, src)} to #{::File.join(release_path, dest)}: #{e.message}")
         
     | 
| 
      
 331 
     | 
    
         
            +
                          raise Chef::Exceptions::FileNotFound.new("Cannot symlink shared data #{::File.join(@new_resource.shared_path, src)} to #{::File.join(release_path, dest)}: #{e.message}")
         
     | 
| 
       352 
332 
     | 
    
         
             
                        end
         
     | 
| 
       353 
333 
     | 
    
         
             
                      end
         
     | 
| 
       354 
     | 
    
         
            -
                      Chef::Log.info("#{new_resource} linked shared paths into current release: #{links_info}")
         
     | 
| 
      
 334 
     | 
    
         
            +
                      Chef::Log.info("#{@new_resource} linked shared paths into current release: #{links_info}")
         
     | 
| 
       355 
335 
     | 
    
         
             
                    end
         
     | 
| 
       356 
336 
     | 
    
         
             
                    run_symlinks_before_migrate
         
     | 
| 
       357 
337 
     | 
    
         
             
                    enforce_ownership
         
     | 
| 
       358 
338 
     | 
    
         
             
                  end
         
     | 
| 
       359 
339 
     | 
    
         | 
| 
      
 340 
     | 
    
         
            +
                  def create_dirs_before_symlink
         
     | 
| 
      
 341 
     | 
    
         
            +
                  end
         
     | 
| 
      
 342 
     | 
    
         
            +
             
     | 
| 
       360 
343 
     | 
    
         
             
                  def purge_tempfiles_from_current_release
         
     | 
| 
       361 
     | 
    
         
            -
                    log_info = purge_before_symlink.join(", ")
         
     | 
| 
      
 344 
     | 
    
         
            +
                    log_info = @new_resource.purge_before_symlink.join(", ")
         
     | 
| 
       362 
345 
     | 
    
         
             
                    converge_by("purge directories in checkout #{log_info}") do
         
     | 
| 
       363 
     | 
    
         
            -
                      purge_before_symlink.each { |dir| FileUtils.rm_rf(release_path + "/#{dir}") }
         
     | 
| 
       364 
     | 
    
         
            -
                      Chef::Log.info("#{new_resource} purged directories in checkout #{log_info}")
         
     | 
| 
      
 346 
     | 
    
         
            +
                      @new_resource.purge_before_symlink.each { |dir| FileUtils.rm_rf(release_path + "/#{dir}") }
         
     | 
| 
      
 347 
     | 
    
         
            +
                      Chef::Log.info("#{@new_resource} purged directories in checkout #{log_info}")
         
     | 
| 
       365 
348 
     | 
    
         
             
                    end
         
     | 
| 
       366 
349 
     | 
    
         
             
                  end
         
     | 
| 
       367 
350 
     | 
    
         | 
| 
         @@ -411,10 +394,10 @@ class Chef 
     | 
|
| 
       411 
394 
     | 
    
         
             
                  end
         
     | 
| 
       412 
395 
     | 
    
         | 
| 
       413 
396 
     | 
    
         
             
                  def run_options(run_opts={})
         
     | 
| 
       414 
     | 
    
         
            -
                    run_opts[:user] = new_resource.user if new_resource.user
         
     | 
| 
       415 
     | 
    
         
            -
                    run_opts[:group] = new_resource.group if new_resource.group
         
     | 
| 
       416 
     | 
    
         
            -
                    run_opts[:environment] = new_resource.environment if new_resource.environment
         
     | 
| 
       417 
     | 
    
         
            -
                    run_opts[:log_tag] = new_resource.to_s
         
     | 
| 
      
 397 
     | 
    
         
            +
                    run_opts[:user] = @new_resource.user if @new_resource.user
         
     | 
| 
      
 398 
     | 
    
         
            +
                    run_opts[:group] = @new_resource.group if @new_resource.group
         
     | 
| 
      
 399 
     | 
    
         
            +
                    run_opts[:environment] = @new_resource.environment if @new_resource.environment
         
     | 
| 
      
 400 
     | 
    
         
            +
                    run_opts[:log_tag] = @new_resource.to_s
         
     | 
| 
       418 
401 
     | 
    
         
             
                    run_opts[:log_level] ||= :debug
         
     | 
| 
       419 
402 
     | 
    
         
             
                    if run_opts[:log_level] == :info
         
     | 
| 
       420 
403 
     | 
    
         
             
                      if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info?
         
     | 
| 
         @@ -425,7 +408,7 @@ class Chef 
     | 
|
| 
       425 
408 
     | 
    
         
             
                  end
         
     | 
| 
       426 
409 
     | 
    
         | 
| 
       427 
410 
     | 
    
         
             
                  def run_callback_from_file(callback_file)
         
     | 
| 
       428 
     | 
    
         
            -
                    Chef::Log.info "#{new_resource} queueing checkdeploy hook #{callback_file}"
         
     | 
| 
      
 411 
     | 
    
         
            +
                    Chef::Log.info "#{@new_resource} queueing checkdeploy hook #{callback_file}"
         
     | 
| 
       429 
412 
     | 
    
         
             
                    recipe_eval do
         
     | 
| 
       430 
413 
     | 
    
         
             
                      Dir.chdir(release_path) do
         
     | 
| 
       431 
414 
     | 
    
         
             
                        from_file(callback_file) if ::File.exist?(callback_file)
         
     | 
| 
         @@ -435,20 +418,20 @@ class Chef 
     | 
|
| 
       435 
418 
     | 
    
         | 
| 
       436 
419 
     | 
    
         
             
                  def create_dir_unless_exists(dir)
         
     | 
| 
       437 
420 
     | 
    
         
             
                    if ::File.directory?(dir)
         
     | 
| 
       438 
     | 
    
         
            -
                      Chef::Log.debug "#{new_resource} not creating #{dir} because it already exists"
         
     | 
| 
      
 421 
     | 
    
         
            +
                      Chef::Log.debug "#{@new_resource} not creating #{dir} because it already exists"
         
     | 
| 
       439 
422 
     | 
    
         
             
                      return false
         
     | 
| 
       440 
423 
     | 
    
         
             
                    end
         
     | 
| 
       441 
424 
     | 
    
         
             
                    converge_by("create new directory #{dir}") do
         
     | 
| 
       442 
425 
     | 
    
         
             
                      begin
         
     | 
| 
       443 
426 
     | 
    
         
             
                        FileUtils.mkdir_p(dir)
         
     | 
| 
       444 
     | 
    
         
            -
                        Chef::Log.debug "#{new_resource} created directory #{dir}"
         
     | 
| 
       445 
     | 
    
         
            -
                        if new_resource.user
         
     | 
| 
       446 
     | 
    
         
            -
                          FileUtils.chown(new_resource.user, nil, dir)
         
     | 
| 
       447 
     | 
    
         
            -
                          Chef::Log.debug("#{new_resource} set user to #{new_resource.user} for #{dir}")
         
     | 
| 
      
 427 
     | 
    
         
            +
                        Chef::Log.debug "#{@new_resource} created directory #{dir}"
         
     | 
| 
      
 428 
     | 
    
         
            +
                        if @new_resource.user
         
     | 
| 
      
 429 
     | 
    
         
            +
                          FileUtils.chown(@new_resource.user, nil, dir)
         
     | 
| 
      
 430 
     | 
    
         
            +
                          Chef::Log.debug("#{@new_resource} set user to #{@new_resource.user} for #{dir}")
         
     | 
| 
       448 
431 
     | 
    
         
             
                        end
         
     | 
| 
       449 
     | 
    
         
            -
                        if new_resource.group
         
     | 
| 
       450 
     | 
    
         
            -
                          FileUtils.chown(nil, new_resource.group, dir)
         
     | 
| 
       451 
     | 
    
         
            -
                          Chef::Log.debug("#{new_resource} set group to #{new_resource.group} for #{dir}")
         
     | 
| 
      
 432 
     | 
    
         
            +
                        if @new_resource.group
         
     | 
| 
      
 433 
     | 
    
         
            +
                          FileUtils.chown(nil, @new_resource.group, dir)
         
     | 
| 
      
 434 
     | 
    
         
            +
                          Chef::Log.debug("#{@new_resource} set group to #{@new_resource.group} for #{dir}")
         
     | 
| 
       452 
435 
     | 
    
         
             
                        end
         
     | 
| 
       453 
436 
     | 
    
         
             
                      rescue => e
         
     | 
| 
       454 
437 
     | 
    
         
             
                        raise Chef::Exceptions::FileNotFound.new("Cannot create directory #{dir}: #{e.message}")
         
     | 
| 
         @@ -459,7 +442,7 @@ class Chef 
     | 
|
| 
       459 
442 
     | 
    
         
             
                  def with_rollback_on_error
         
     | 
| 
       460 
443 
     | 
    
         
             
                    yield
         
     | 
| 
       461 
444 
     | 
    
         
             
                  rescue ::Exception => e
         
     | 
| 
       462 
     | 
    
         
            -
                    if new_resource.rollback_on_error
         
     | 
| 
      
 445 
     | 
    
         
            +
                    if @new_resource.rollback_on_error
         
     | 
| 
       463 
446 
     | 
    
         
             
                      Chef::Log.warn "Error on deploying #{release_path}: #{e.message}"
         
     | 
| 
       464 
447 
     | 
    
         
             
                      failed_release = release_path
         
     | 
| 
       465 
448 
     | 
    
         | 
| 
         @@ -478,8 +461,8 @@ class Chef 
     | 
|
| 
       478 
461 
     | 
    
         
             
                  end
         
     | 
| 
       479 
462 
     | 
    
         | 
| 
       480 
463 
     | 
    
         
             
                  def save_release_state
         
     | 
| 
       481 
     | 
    
         
            -
                    if ::File.exists?(new_resource.current_path)
         
     | 
| 
       482 
     | 
    
         
            -
                      release = ::File.readlink(new_resource.current_path)
         
     | 
| 
      
 464 
     | 
    
         
            +
                    if ::File.exists?(@new_resource.current_path)
         
     | 
| 
      
 465 
     | 
    
         
            +
                      release = ::File.readlink(@new_resource.current_path)
         
     | 
| 
       483 
466 
     | 
    
         
             
                      @previous_release_path = release if ::File.exists?(release)
         
     | 
| 
       484 
467 
     | 
    
         
             
                    end
         
     | 
| 
       485 
468 
     | 
    
         
             
                  end
         
     |