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
属性的原因。