Puppet 木偶:重复申报问题
我正在尝试在代理实例上创建一个基本目录结构。此外,我还有一个Puppet 木偶:重复申报问题,puppet,Puppet,我正在尝试在代理实例上创建一个基本目录结构。此外,我还有一个define函数,用于将文件复制到代理节点 [tom@pe-server] cat site.pp node 'my_node' { include base::create_dir util::copy_files { 'Copying jar files': source => 'puppet:///modules/java', destination => '
define
函数,用于将文件复制到代理节点
[tom@pe-server] cat site.pp
node 'my_node' {
include base::create_dir
util::copy_files { 'Copying jar files':
source => 'puppet:///modules/java',
destination => 'c:/java_dump/test',
copy_all => 'yes',
}
}
[tom@pe-server] cat copy_files.pp
define util::copy_files ($src, $dest, $copy_all = '') {
if ($copy_all == 'yes') {
file { $dest:
ensure => directory,
source => $src,
sourceselect => all,
recurse => true,
}
} elsif {...}
}
[tom@pe-server] cat create_dir.pp
class base::create_dir (
$dir_list = $base::params::dir_list,
) inherits base::params {
$dir_list.each |$dir| {
file { $dir:
ensure => directory,
}
}
}
[tom@pe-server] cat params.pp
$dir_list = [
'c:/java_dump',
'c:/java_dump/test',
],
在代理上应用更改时,出现以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error:
Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating
a Resource Statement, Duplicate declaration: File[c:/java_dump/test] is already declared in file /etc/puppetlabs/code/environments/automation/modules/base/manifests/create_dir.pp:5; cannot redeclare at /etc/puppetlabs/code/environments/automation/modules/util/manifests/copy_files.pp:17 at
/etc/puppetlabs/code/environments/automation/modules/util/manifests/copy_files.pp:17:9 at /etc/puppetlabs/code/environments/automation/manifests/site.pp:79 on node my_node"
在网上搜索时,我发现了这个。该链接说明将公共资源移动到类
,并将该类包含在定义中。我不确定为什么需要这样做,以及如何实施。我做了以下更改:
define util::copy ($source, $destination, $copy_all = '') {
include util::copy_files
}
还将site.pp中的util::copy_文件替换为util::copy
我现在得到的错误是:
Evaluation Error: Error while evaluating a Function Call, Class[Util::Copy_files]:\n expects a value for
parameter 'src'\n expects a value for parameter 'dest' at /etc/puppetlabs/code/environments/automation/modules/util/manifest
s/copy.pp:2:5 at /etc/puppetlabs/code/environments/automation/manifests/site.pp:79 on node my_node
你链接到的答案是针对另一类问题的。无论如何,从数组创建目录并不需要它自己定义的类型,因为这是一种内在的类型。删除该定义将有助于您通过重构改进此设计并删除该错误。哦,我认为这与该问题有关。顺便说一句,我没有使用定义的类型来创建目录。如上所示,我刚刚为dir创建了一个清单,以便在需要时包含它。此清单创建每个主机上所需的一组目录,因此创建了清单。另外,如上所示,我创建了一个定义的
类型,用于复制文件和目录。有了这些细节,我怎样才能克服重复声明的问题呢?是的,出于某种原因,我在头脑中结合了这些。解决方案仍然是重构。但让我困惑的是,两人都在做不同的任务。一个只是创建一个固定的目录结构,另一个(copy_文件)将用于将内容复制到上面创建的任何目录中。在将任何内容复制到任何目录中时,必须确保该目录应该存在。我相信我不是唯一一个陷入这种情况的人。问题是,你的copy\u files
也在创建目录,并定义其嵌套结构,同时复制文件,因此两者都在创建目录结构。这就是为什么递归目录创建中也存在purge
和force
属性的原因。您链接到的答案是针对不同类型的问题。无论如何,从数组创建目录并不需要它自己定义的类型,因为这是一种内在的类型。删除该定义将有助于您通过重构改进此设计并删除该错误。哦,我认为这与该问题有关。顺便说一句,我没有使用定义的类型来创建目录。如上所示,我刚刚为dir创建了一个清单,以便在需要时包含它。此清单创建每个主机上所需的一组目录,因此创建了清单。另外,如上所示,我创建了一个定义的
类型,用于复制文件和目录。有了这些细节,我怎样才能克服重复声明的问题呢?是的,出于某种原因,我在头脑中结合了这些。解决方案仍然是重构。但让我困惑的是,两人都在做不同的任务。一个只是创建一个固定的目录结构,另一个(copy_文件)将用于将内容复制到上面创建的任何目录中。在将任何内容复制到任何目录中时,必须确保该目录应该存在。我相信我不是唯一一个陷入这种情况的人。问题是,你的copy\u files
也在创建目录,并定义其嵌套结构,同时复制文件,因此两者都在创建目录结构。这就是为什么递归目录创建也存在purge
和force
属性的原因。