Bug #1572

File resource with recurse => true, purge => true removes content of directory when source is unavailable

Added by Stig Sandbeck Mathisen over 3 years ago. Updated over 3 years ago.

Status:Closed Start date:09/12/2008
Priority:Urgent Due date:
Assignee:James Turnbull % Done:

0%

Category:file
Target version:0.24.6
Affected Puppet version:0.24.5 Branch:
Keywords:file
directory
recurse
purge
Votes: 0

Description

h1. Description

When a file resource is listed with recurse => true, and purge => true, and the source is unavailable, puppet will remove all content from the destination directory.

(In our case, a fact was missing, and a variable from the fact was used in the source path name)

I would expect puppet to remove content from the destination directory only if puppet can verify that the source directory exists, and is empty.

h1. To reproduce:

h2. Run puppet with the following recipe to create a source:

    file {["/tmp/ssm","/tmp/ssm/source"]:
        ensure => directory,
    }
    file {["/tmp/ssm/source/one","/tmp/ssm/source/two"]:
        ensure  => present,
        content => "diddly-squat"
    }

h2. Copy source to destination

    file {"/tmp/ssm/destination":
        ensure  => directory,
        recurse => true,
        purge   => true,
        source  => "/tmp/ssm/source",
        require => Class["create_source"]
    }

h2. Copy source to destination, with a simulatet missing or unavailable source (like a $variable in the source name being empty)

    file {"/tmp/ssm/destination":
        ensure  => directory,
        recurse => true,
        purge   => true,
        source  => "/tmp/ssm/missing_source",
        require => Class["create_source"]
    }

h1. Sample output

Output from run from the attached manifest (like the quoted ones above, just wrapped in classes):

notice: //create_source/File[/tmp/ssm]/ensure: created
notice: //create_source/File[/tmp/ssm/source]/ensure: created
notice: //create_source/File[/tmp/ssm/source/one]/ensure: changed file contents from {md5}d4d36ee0f4852fc068b79561a4e5e65e to {md5}d4d36ee0f4852fc068b79561a4e5e65e
notice: //create_source/File[/tmp/ssm/source/two]/ensure: changed file contents from {md5}d4d36ee0f4852fc068b79561a4e5e65e to {md5}d4d36ee0f4852fc068b79561a4e5e65e
notice: //copy_from_source/File[/tmp/ssm/destination]/ensure: created
notice: //copy_from_source/File[/tmp/ssm/destination/one]/ensure: created
notice: //copy_from_source/File[/tmp/ssm/destination/two]/ensure: created

Output from run after substituting “copy_from_source” with “copy_from_missing_source”

err: //copy_from_missing_source/File[/tmp/ssm/destination]: Failed to retrieve current state of resource: No specified source was found from /tmp/ssm/missing_source
notice: //copy_from_missing_source/File[/tmp/ssm/destination/one]/ensure: removed
notice: //copy_from_missing_source/File[/tmp/ssm/destination/two]/ensure: removed

file-recursive-purge.pp - Manifest to reproduce issue. Run once, then substitute "include copy_from_source" with "include copy_from_missing_source". (828 Bytes) Stig Sandbeck Mathisen, 09/12/2008 01:19 pm

History

Updated by James Turnbull over 3 years ago

  • Category set to file
  • Status changed from Unreviewed to Accepted
  • Assignee set to Andrew Shafer
  • Priority changed from Normal to Urgent
  • Target version set to 0.24.6

Updated by Luke Kanies over 3 years ago

  • Status changed from Accepted to Ready For Checkin
  • Assignee changed from Andrew Shafer to James Turnbull

Fixed in the tickets/0.24.x/1572 branch in my repo.

Updated by James Turnbull over 3 years ago

  • Status changed from Ready For Checkin to Closed

Pushed in commit:a1a670b305252b2f4b4b2b0020303143addc3eb8 in branch 0.24.x

Also available in: Atom PDF