我的处境有点尴尬,我无意中通过 Puppet 删除了多 TB 的重要数据,我只是想知道为什么会发生这种情况。
首先,我很确定它消失的原因(除了通过备份无法恢复)是:
File { backup => false }
在我的 site.pp 中。节点设置为通过 NFS 硬挂载某些东西,因此挂载点 /mount 和 fstab 中的一行如下:
nfsserver:/mount /mount nfs <options> 0 0
我想摆脱挂载,并用指向相同最终位置(尽管路径不同)的符号链接替换它。
我的傀儡清单如下所示:
class symlinks::linkdirtest ( ) {
file { '/mount':
ensure => "link",
target => "/anotherdir/mount",
}
mount { "/mount":
ensure => "absent",
}
}
在进行木偶运行时,产生了以下结果:
notice: /Stage[main]/Symlinks::Linkdirtest/File[/mount]: Not removing directory; use 'force' to override
因此,我适时(或者愚蠢地)补充道:
class symlinks::linkdirtest ( ) {
file { '/mount':
ensure => "link",
target => "/anotherdir/mount",
force => "true",
}
....
你瞧,傀儡开始将所有重要的坐骑内容遗忘,而坐骑点本身仍然存在。
知道为什么会发生这种情况吗?
谢谢
答案1
它用一个链接替换了该目录:文档
在‘强制’下:
“用文件或链接替换目录”
为了将来参考,您可以尝试在 noop 模式下运行以查看将会发生哪些变化:
puppet agent --test --debug --noop --show-diff
答案2
除了在应用 Puppet 之前测试运行之外,您还应该记住,编写 Puppet 代码的顺序并不总是 Puppet 运行的顺序。在这种情况下,您应该定义顺序。在进行符号链接之前,您必须先卸载。您可以按如下方式执行此操作:
class symlinks::linkdirtest ( ) {
file { '/mount':
ensure => "link",
target => "/anotherdir/mount",
}
mount { "/mount":
ensure => "absent",
before => File['/mount'],
}
}