Puppet 覆盖符号链接目录

Puppet 覆盖符号链接目录

我正在使用 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'
    }
}

相关内容