我正在使用Puppet来pipe理一些服务器的configuration。 其中一个任务是在/www下创build一个特定的文件夹结构来托pipe我们的应用程序。
但最近,我们已经有了这个服务器,其中/www只是到另一个目录的符号链接(必须这样做是因为存储空间不足)
$ ls -l /www lrwxrwxrwx 1 root root 13 Oct 25 15:33 /www -> /storage/www/
我们一直在使用这个来pipe理目录:
file { $path: ensure => directory, owner => user, group => group, mode => 'a=rx,u+w' }
这个特定服务器的问题是,当运行Puppet时, /www符号链接被删除,Puppet会在/www下创build一个新的常规目录。 除非我们再次手动介入来创build符号链接,否则这会打乱我们的应用程序。
我的问题:有人知道一种方式,使木偶不删除符号链接,只是把它作为一个目录:如果没有/www目录或没有/www符号链接存在,创build/www目录,否则什么都不做?
简短的答案是改变
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 ,你告诉傀儡你想要一个目录,而它发现的任何东西(比如文件或者符号链接)都应该被打开并且replace成目录。 通过使用ensure => link ,你会告诉puppet你想要一个指向target的值的符号链接,这个链接又可以是一个目录,一个文件或者一个设备。 根据你在做什么,你可能需要在你的目标上创build一个文件types(使用ensure => directory ),如果你需要puppet来pipe理的话。
我强烈build议您阅读文件types的文档,以更好地了解如何使用它。
编辑:
要区分不同的服务器,您需要为不同的服务器使用单独的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' } }