Назад | Перейти на главную страницу

Установщик CPAN для Puppet не может найти цель отношения

На основе некоторого кода из этот блог и в комментариях я пытаюсь определить некоторые простые функции установки CPAN для Puppet, и я пробую это:

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

Что это значит и как это исправить?

Я действительно решил использовать cpanminus вместо cpan и использую:

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

Похоже, что основной ошибкой является "-" в имени "install-cpan". Следующее работает, а команду INIT_CPAN можно найти по адресу Как автоматизировать настройку 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"] }

}