2 个 CentOS 服务器,我想将相同的清单应用到这些服务器上。清单会创建一个用户,其主目录位置位于/var/username
问题出在其中一台服务器上/var/username
有是指向 的符号链接/data/username
。因此,只需运行ensure => 'directory',
即可尝试覆盖该符号链接。
我无法使用,ensure => 'present'
因为如果文件不存在,它会默认创建一个文件。因此,对于此清单适用的新服务器,当我实际需要将其作为目录时,将创建一个空白文件。
有没有办法做
ensure
目录或者链接?这样,如果不存在,就会创建一个目录。如果是链接,就让它不管吧?默认情况下,Puppetfile
类型在执行 时会创建一个文件ensure => 'present'
。或者一种做法
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 实现这一点?我阅读了文档并尝试过,但什么也没得到(