傀儡复制目录但不是它的内容
puppet copy directory but not its content
我想在我的节点上管理文件 /home/user_name/scripts/file0
、/home/user_name/scripts/file1
...,作为主节点上具有相同路径的文件副本。
依靠/home/user_name
出现在每个节点上,我把它放在清单中:
file { '/home/user_name/scripts':
ensure => 'directory',
path => '/home/user_name/scripts',
recurse => true
}
这确实得到了在每个节点上创建的目录,但是内容file0
、file1
、...没有被复制。
我尝试添加 source
参数,还添加了 recurse=>remote
,但没有成功。
更新:尝试添加source
参数,我添加了:
file { '/home/user_name/scripts':
ensure => 'directory',
path => '/home/user_name/scripts',
recurse => true,
source => '/home/user_name/scripts'
}
但没有成功。顺便说一句,这是 运行 puppet apply
时的输出
Notice: Compiled catalog for puppet, master_dns in environment production in 0.64 seconds
Notice: /Stage[main]/Exec_script/Exec[add_archi]/returns: executed successfully
Notice: Applied catalog in 2.60 seconds
如果你想让 Puppet 复制文件,你需要告诉它文件应该复制到哪里从,即提供来源属性:
file {'/my/path':
ensure => 'directory',
path => '/my/path',
recurse => true,
source => '/home/user_name/scripts',
}
这将创建一个目录/my/path并从节点的本地目录递归复制所有文件和目录/home/user_name/scripts 到 /my/path.
@MattSchuchard 已经将您指向 the relevant documentation。他们解释说,Puppet 支持 source
参数形式的四种替代方案,并且您尝试使用的形式依赖于 local 文件作为文件的来源管理。也就是说,在正在配置的节点本地。
如果你想使用驻留在 master 上的文件作为源,并且客户端不能直接访问它们(例如通过网络文件系统),那么你只有两个选择:使用 puppet:
或 http:
方案。除非你想 运行 在你的主机上建立一个 HTTP 服务器,否则只有 puppet:
URI 才是真正可行的选择。
然而,默认情况下,Puppet 的文件服务器仅提供来自模块的文件,而不是来自任意路径的文件。为什么您 想要 提供主文件系统中的任意文件?多么灾难的秘诀。为什么一般用户无论如何都需要 master 上的主目录?
最好的解决方案是将目录树放在您的 file
资源出现的任何模块中——比如 mymodule/files/user_name/scripts。然后你可以这样写你的资源:
file { '/home/user_name/scripts':
ensure => 'directory',
recurse => true,
source => 'puppet://modules/mymodule/user_name/scripts'
}
但如果您坚持,您应该可以将源文件保留在它们现在所在的位置,并使用符号链接将其修补在一起:
mymodule/files/user_name-scripts -> /home/user_name/scripts
...和...
file { '/home/user_name/scripts':
ensure => 'directory',
recurse => true,
source => 'puppet://modules/mymodule/user_name-scripts',
links => 'follow'
}
我想在我的节点上管理文件 /home/user_name/scripts/file0
、/home/user_name/scripts/file1
...,作为主节点上具有相同路径的文件副本。
依靠/home/user_name
出现在每个节点上,我把它放在清单中:
file { '/home/user_name/scripts':
ensure => 'directory',
path => '/home/user_name/scripts',
recurse => true
}
这确实得到了在每个节点上创建的目录,但是内容file0
、file1
、...没有被复制。
我尝试添加 source
参数,还添加了 recurse=>remote
,但没有成功。
更新:尝试添加source
参数,我添加了:
file { '/home/user_name/scripts':
ensure => 'directory',
path => '/home/user_name/scripts',
recurse => true,
source => '/home/user_name/scripts'
}
但没有成功。顺便说一句,这是 运行 puppet apply
Notice: Compiled catalog for puppet, master_dns in environment production in 0.64 seconds Notice: /Stage[main]/Exec_script/Exec[add_archi]/returns: executed successfully Notice: Applied catalog in 2.60 seconds
如果你想让 Puppet 复制文件,你需要告诉它文件应该复制到哪里从,即提供来源属性:
file {'/my/path':
ensure => 'directory',
path => '/my/path',
recurse => true,
source => '/home/user_name/scripts',
}
这将创建一个目录/my/path并从节点的本地目录递归复制所有文件和目录/home/user_name/scripts 到 /my/path.
@MattSchuchard 已经将您指向 the relevant documentation。他们解释说,Puppet 支持 source
参数形式的四种替代方案,并且您尝试使用的形式依赖于 local 文件作为文件的来源管理。也就是说,在正在配置的节点本地。
如果你想使用驻留在 master 上的文件作为源,并且客户端不能直接访问它们(例如通过网络文件系统),那么你只有两个选择:使用 puppet:
或 http:
方案。除非你想 运行 在你的主机上建立一个 HTTP 服务器,否则只有 puppet:
URI 才是真正可行的选择。
然而,默认情况下,Puppet 的文件服务器仅提供来自模块的文件,而不是来自任意路径的文件。为什么您 想要 提供主文件系统中的任意文件?多么灾难的秘诀。为什么一般用户无论如何都需要 master 上的主目录?
最好的解决方案是将目录树放在您的 file
资源出现的任何模块中——比如 mymodule/files/user_name/scripts。然后你可以这样写你的资源:
file { '/home/user_name/scripts':
ensure => 'directory',
recurse => true,
source => 'puppet://modules/mymodule/user_name/scripts'
}
但如果您坚持,您应该可以将源文件保留在它们现在所在的位置,并使用符号链接将其修补在一起:
mymodule/files/user_name-scripts -> /home/user_name/scripts
...和...
file { '/home/user_name/scripts':
ensure => 'directory',
recurse => true,
source => 'puppet://modules/mymodule/user_name-scripts',
links => 'follow'
}