Puppet 确保文件是目录或链接。或者仅在不存在时确保目录?

Puppet 确保文件是目录或链接。或者仅在不存在时确保目录?

2 个 CentOS 服务器,我想将相同的清单应用到这些服务器上。清单会创建一个用户,其主目录位置位于/var/username

问题出在其中一台服务器上/var/username 是指向 的符号链接/data/username。因此,只需运行ensure => 'directory',即可尝试覆盖该符号链接。

我无法使用,ensure => 'present'因为如果文件不存在,它会默认创建一个文件。因此,对于此清单适用的新服务器,当我实际需要将其作为目录时,将创建一个空白文件。

  1. 有没有办法做ensure目录或者链接?这样,如果不存在,就会创建一个目录。如果是链接,就让它不管吧?默认情况下,Puppetfile类型在执行 时会创建一个文件ensure => 'present'

  2. 或者一种做法if absent ensure directory else leave it alone

exec那做一个简单的 bashif /var/username not exist then mkdir之类的事情怎么样?虽然
很麻烦,但可以工作。

理想的解决方案可能是从一开始就避免特殊情况。在单个清单中拥有多个配置变体似乎有点不对。所以最终我会选择:

  • 规范化虚拟机(例如,可能从符号链接切换到绑定挂载)
  • 给他们单独的清单,因为他们之间的配置是不同的

但就这个问题而言,我想知道 Puppet 中是否存在我目前不知道的选项/语法。

答案1

您始终可以使用$hostname$certname来处理异常:

file { "/var/username":
mode    => 440,
ensure  => $hostname ? {
  'oddballserver' => link,
  default  => directory,
  }, 
target => $hostname ? {
  'oddballserver' => '/data/username',
}

这尚未经过测试,但基于我在我们的清单中用于各种事物的逻辑。YMMV。

答案2

下午好,您需要从 root 用户在 /usr/share/applications/desktop Astra Linux 目录中创建一个链接。带有链接的名称、它指向的路径和快捷方式。如何通过 puppet manifest 实现这一点?我阅读了文档并尝试过,但什么也没得到(

相关内容