如果源存在,如何使puppet复制文件?

pdi*_*izz 7 puppet vagrant

我正在尝试配置一个流浪的虚拟机以允许用户提供他们自己的bash_profile.local,但我不希望在vm的vcs repo中跟踪此文件.我有一个跟踪的bash_profile.local.dist文件,可以重命名.如果源文件存在,我怎么能告诉puppet只创建一个文件?它目前正常工作,但在配置期间记录错误,这是我想要避免的.

这是显而易见的:

class local
{
    file { '.bash_profile.local':
        source => 'puppet:///modules/local/bash_profile.local',
        path => '/home/vagrant/.bash_profile.local',
        replace => false,
        mode => 0644,
        owner => 'vagrant',
        group => 'vagrant',
    }
}
Run Code Online (Sandbox Code Playgroud)

bar*_*lle 11

你可以用这种方式滥用文件:

$a = file('/etc/puppet/modules/local/files/bash_profile.local','/dev/null')
if($a != '') {
    file { '.bash_profile.local':
        content => $a,
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @mestachs:`file`适用于puppetmaster,而不是客户端,这就是诀窍. (5认同)
  • 好的伎俩,谢谢.如果有人正在读这个并想知道发生了什么,file()将尝试依次读取每个文件,直到它成功为止,如果第一个文件不存在,它将读取/ dev/null,返回''. (3认同)

Fil*_*sti 6

这并不完全是您所要求的,但您可以在源中提供多个路径,因此如果用户没有提供自己的路径,您可以拥有一个默认的空文件。

class local
{
    file { '.bash_profile.local':
        source => [
            'puppet:///modules/local/bash_profile.local',
            'puppet:///modules/local/bash_profile.local.default'
        ],
        path => '/home/vagrant/.bash_profile.local',
        replace => false,
        mode => 0644,
        owner => 'vagrant',
        group => 'vagrant',
    }
}
Run Code Online (Sandbox Code Playgroud)