我想复制一些文件木偶://代理上的目录的 URL。我不确定我在这里是否做错了什么,但似乎 Puppet 不喜欢这样
file { '/etc/nginx/conf.d':
path => '/etc/nginx/conf.d',
ensure => directory,
require => File['/etc/nginx/nginx.conf'],
source => ['puppet:///modules/nginx/app1.conf',
'puppet:///modules/nginx/app2.conf'],
sourceselect => all,
}
这是我尝试运行代理时得到的结果
错误:无法将临时文件 /etc/nginx/conf.d.puppettmp_9046 重命名为 /etc/nginx/conf.d:是一个目录
如果我通过在模块中创建目录并将资源指向它们来稍微改变一下,它就可以工作
mkdir module/files/app1 module/files/app2
mv module/files/app1.conf module/files/app1
mv module/files/app2.conf module/files/app2
新资源
file { '/etc/nginx/conf.d':
path => '/etc/nginx/conf.d',
ensure => directory,
require => File['/etc/nginx/nginx.conf'],
source => ['puppet:///modules/nginx/app1',
'puppet:///modules/nginx/app2'],
sourceselect => all,
recurse => true,
}
创建目录来复制单个文件列表似乎有点愚蠢。
编辑
我尝试在小路但我却急于求成,以为这就是解决方案。原因是我有自己的nginx节点定义中的类声明被注释掉了。尝试后,我得到了与上述相同的错误。
file { '/etc/nginx/conf.d/':
path => '/etc/nginx/conf.d/',
ensure => directory,
require => File['/etc/nginx/nginx.conf'],
source => ['puppet:///modules/nginx/app1.conf',
'puppet:///modules/nginx/app2.conf'],
sourceselect => all,
}
答案1
目的地后面缺少一个“/”。
首先要说几件事:
为什么要确保目录并具有内容(源参数)?为目录创建两个资源,为目录中的两个文件创建两个资源。
它会报错,因为你正在将文件导入目录,而不是将文件导入目录。目录只能将目录作为源。
因此,您可以创建单独的定义,因为您只定义了两个要放入目录中的文件。另一种方法是在 module/files 下创建一个目录并将文件放入其中。然后,当您进行源定义时,您指定的是目录而不是文件。
希望这能有所帮助。您已经自己执行了。
答案2
出什么问题了
file { '/etc/nginx/conf.d':
path => '/etc/nginx/conf.d',
ensure => directory,
require => File['/etc/nginx/nginx.conf'],
source => 'puppet:///modules/nginx',
recurse => true,
}
?此解决方案可保持整个目录同步