El instalador de CPAN para Puppet no puede encontrar el objetivo de relación

El instalador de CPAN para Puppet no puede encontrar el objetivo de relación

Basado en algún código deeste blogy en los comentarios estoy intentando definir algunas funciones simples de instalación de CPAN para Puppet, y estoy intentando esto:

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": }

Pero me sale este error:

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]"

¿Qué significa esto y cómo lo soluciono?

Respuesta1

De hecho, decidí usar cpanminus en lugar de cpan y estoy usando:

# 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"] ],
  }
  # E.g.
  installCPAN { "JSON": }
  installCPAN { "JSON::XS": }
}

Respuesta2

El error principal parece ser el "-" en el nombre "install-cpan". Sin embargo, lo siguiente funciona y el comando INIT_CPAN se puede encontrar en¿Cómo automatizo la configuración de 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"] }

}

información relacionada