我正在使用 Puppet 来管理一些服务器的配置。其中一项任务是创建一个特定的文件夹结构/www
来托管我们的应用程序。
但最近,我们有这个服务器,它/www
只是一个指向另一个目录的符号链接(由于存储短缺而不得不这样做)
$ ls -l /www
lrwxrwxrwx 1 root root 13 Oct 25 15:33 /www -> /storage/www/
到目前为止我们一直在使用它来管理目录:
file { $path:
ensure => directory,
owner => user,
group => group,
mode => 'a=rx,u+w'
}
此特定服务器的问题是,运行 Puppet 时,/www
符号链接会被删除,而 Puppet 会在其下创建一个新的常规目录/www
。除非我们手动干预以再次创建符号链接,否则这会破坏我们的应用程序。
我的问题:
是否有人知道一种方法可以让 Puppet 不删除符号链接而只是将其视为目录:如果不存在/www
目录或/www
符号链接,则创建该/www
目录,否则不执行任何操作?
答案1
简短的回答是改变
file { $path:
ensure => directory,
owner => user,
group => group,
mode => 'a=rx,u+w'
}
进入
file { $path:
ensure => link,
target => /path/to/original/directory
owner => user,
group => group,
mode => 'a=rx,u+w'
}
通过使用ensure => directory
,您就是在告诉 puppet 您想要一个目录,并且它找到的任何其他内容(如文件或符号链接)都应该被覆盖并用目录替换。通过使用ensure => link
,您就是在告诉 puppet 您想要一个指向 值的符号链接target
,而 的值又可能是目录、文件或设备。根据您正在执行的操作,如果您需要 puppet 来管理它,则可能需要ensure => directory
在目标上创建文件类型(使用 )。
我强烈建议你阅读文件类型以便更好地了解如何使用它。
编辑:
为了区分不同的服务器,您需要使用单独的node
定义不同的服务器。您可以执行以下操作来获得所需的内容:
node 'server1.mydomain.com' {
file { $path:
ensure => directory,
owner => user,
group => group,
mode => 'a=rx,u+w'
}
}
node 'server2.mydomain.com' {
file { $path:
ensure => link,
target => /path/to/original/directory
owner => user,
group => group,
mode => 'a=rx,u+w'
}
}