Bug #1572
File resource with recurse => true, purge => true removes content of directory when source is unavailable
| Status: | Closed | Start date: | 09/12/2008 | |
|---|---|---|---|---|
| Priority: | Urgent | Due date: | ||
| Assignee: | % 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
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