用于Puppet的CPAN安装程序无法find关系目标

基于这个博客和评论中的一些代码,我试图为Puppet定义一些简单的CPAN安装function,我试着这样做:

class perl { define install-cpan () { exec { "cpan_load_${name}": command => "perl -I.cpan -MCPAN -e '\$ENV{PERL_MM_USE_DEFAULT}=1; install $name'", cwd => "/root", path => "/usr/bin:/usr/sbin:/bin:/sbin", unless => "perl -M$name -e 1", } } package { 'perl': ensure => installed } } perl::install-cpan { "Bundle::CPAN": } 

但是我得到这个错误:

 err: Could not retrieve catalog from remote server: Could not intern from pson: Could not convert from pson: Could not find relationship target "Perl::Install-cpan[Bundle::CPAN]" 

这是什么意思,我该如何解决?

我其实已经决定在cpan上使用cpanminus,并且正在使用:

 # perl/manifests/init.pp class perl { define installCPAN () { exec { "cpanLoad${title}": command => "cpanm $name", path => "/usr/bin:/usr/sbin:/bin:/sbin", unless => "perl -I.cpan -M$title -e 1", timeout => 600, require => Exec["initCPAN"], } } package { "perl": ensure => installed, require => Class["common"] } exec { "initCPAN": command => "wget -O - http://cpanmin.us | perl - --self-upgrade", path => "/usr/bin:/usr/sbin:/bin:/sbin", creates => "/bin/cpanm", require => [ Class["common"], Package["perl"] ], } # Eg installCPAN { "JSON": } installCPAN { "JSON::XS": } } 

主要的错误似乎是“install-cpan”中的“ – ”。 下面的工作虽然,并可以在我如何自动化CPANconfigurationfindINIT_CPAN命令? 。

 # perl/manifests/init.pp class perl { define installCPAN () { exec { "cpanLoad${title}": command => "perl -MCPAN -e 'install(q[$name])'", cwd => "/root", path => "/usr/bin:/usr/sbin:/bin:/sbin", unless => "perl -I.cpan -M$name -e 1", timeout => 600, environment => [ "PERL_MM_USE_DEFAULT=1", "PERL_MM_NONINTERACTIVE=1", "AUTOMATED_TESTING=1", ], } } package { "perl": ensure => installed, require => Class["common"] } file { "initCPANcmd": source => "puppet://puppet/perl/INIT_CPAN", path => "/root/INIT_CPAN", owner => "root", mode => 700, } exec { "initCPAN": command => "/root/INIT_CPAN", cwd => "/root", path => "/usr/bin:/usr/sbin:/bin:/sbin", creates => "/root/.cpan/CPAN/MyConfig.pm", require => [ File["initCPANcmd"], Package["perl"] ], } perl::installCPAN { "Bundle::CPAN": require => Exec["initCPAN"] } }