Puppet“文件”资源清空了一个目录

Puppet“文件”资源清空了一个目录

我的处境有点尴尬,我无意中通过 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'],
    }
}

相关内容