2014-12-16 1 views
0

퍼핏과 함께 zypper 명령을 사용하여 여러 패키지를 설치하고 싶습니다. 나 자신의 저장소를 만들고 거기에 bacula 패키지를 버렸다. 내 매니페스트는 다음과 같습니다 :퍼펫 zypper 명령을 사용하여 여러 패키지를 설치합니다. 패키지 이름을 연결했습니다.

#cat manifests/init.pp 
class bacula() 
{ 
$baculas = [ "bacula-dir", "bacula-fd", "bacula-bat", "bacula-bconsole", "bacula- catalog-postgresql", "bacula-libs", "bacula-postgresql", "bacula-sd", "bacula-sql", "bacula-tools", "bacula-updatedb" ] 

package { $baculas: ensure => "installed" } 

exec { 'install_bacula': 
provider => shell, 
path => [ "/bin/", "/usr/bin", "/sbin" ], 
command => "/usr/bin/zypper -n in $baculas;", 
logoutput => on_failure, 
} 
} 

패키지가 잘 설치된 동안 출력에 오류가 있습니다. 패키지의 이름이 연결되어 있고 꼭두각시가 긴 패키지 이름을 찾을 수 없다는 오류를 리턴 한 것 같습니다. 아래 출력 :

# puppet agent --test 
info: Caching catalog for otoyas 
info: Applying configuration version '1418720157' 
notice: /Stage[main]/Bacula/Package[bacula-dir]/ensure: created 
notice: /Stage[main]/Bacula/Package[bacula-sd]/ensure: created 
notice: /Stage[main]/Bacula/Package[bacula-fd]/ensure: created 
notice: /Stage[main]/Bacula/Exec[install_bacula]/returns: Loading repository data... 
notice: /Stage[main]/Bacula/Exec[install_bacula]/returns: Reading installed packages... 
notice: /Stage[main]/Bacula/Exec[install_bacula]/returns: 'bacula-dirbacula-fdbacula-batbacula-bconsolebacula-catalog-postgresqlbacula-libsbacula-postgresqlbacula-sdbacula-sqlbacula-toolsbacula-updatedb' not found in package names. Trying capabilities. 
notice: /Stage[main]/Bacula/Exec[install_bacula]/returns: No provider of 'bacula-dirbacula-fdbacula-batbacula-bconsolebacula-catalog-postgresqlbacula-libsbacula-postgresqlbacula-sdbacula-sqlbacula-toolsbacula-updatedb' found. 
err: /Stage[main]/Bacula/Exec[install_bacula]/returns: change from notrun to 0 failed: /usr/bin/zypper -n in bacula-dirbacula-fdbacula-batbacula-bconsolebacula-catalog-postgresqlbacula-libsbacula-postgresqlbacula-sdbacula-sqlbacula-toolsbacula-updatedb; returned 104 instead of one of [0] at /etc/puppet/modules/bacula/manifests/init.pp:12 
notice: /Stage[main]/Bacula/Package[bacula-bat]/ensure: created 
notice: /Stage[main]/Bacula/Package[bacula-updatedb]/ensure: created 
notice: /Stage[main]/Vsftpd/Exec[install_vsftpd]/returns: executed successfully 
notice: /Stage[main]/Bacula/Package[bacula-tools]/ensure: created 
notice: /Stage[main]/Bacula/Package[bacula-postgresql]/ensure: created 
notice: Finished catalog run in 6.28 seconds 

어떻게 수정합니까? 이 작업을 수행 할 수있는 더 좋은 방법이 있다면, 나는 꼭두각시를 처음 사용하기 때문에 제안을 기다리고 있습니다.

감사합니다.

답변

1

예, 접근 방법에 결함이 있습니다.

[퍼핏]에 zypper을 호출하는 방법에 대한 세부적인 내용을 남겨 두어야합니다. 절대적으로 필요한 경우가 아니면 exec 유형을 사용하지 마십시오. 패키지의 경우 package을 대신 사용하십시오. 당신이 SUSE 시스템에 있다면

package { 
    $baculas: 
     ensure => 'installed', 
     provider => 'zypper', 
} 

사실, 꼭두각시, 자신의 zypper 제공자를 선택해야합니다. exec을 삭제하면 이미 트릭을 수행 할 수 있습니다.

+0

작동합니다! 감사. Btw, 매니페스트에 나열된 모든 bacula 패키지를 지정하기 위해 꼭두각시의 출력이 필요합니까? 11 개의 bacula 패키지가 $ baculas에 할당되어있는 것처럼 보이지만 출력에는 7 개의 패키지 만 생성됩니다. – gidot

+0

'zypper'는 평가의 초기 단계에 있었던 하나 이상의 패키지의 종속성으로 이들 중 일부를 가져 왔습니다. 중요한 패키지를 명시 적으로 선언하는 것이 좋습니다. 인형은 불필요한 무상 작업을 수행하지 않습니다. –

0

시스템의 기본 제공 업체를 확인해보십시오. https://github.com/puppetlabs/puppet/blob/master/lib/puppet/provider/package/zypper.rb

commands :zypper => "/usr/bin/zypper" 

    defaultfor :operatingsystem => [:suse, :sles, :sled, :opensuse] 
    confine :operatingsystem => [:suse, :sles, :sled, :opensuse] 

올바르게 설정 한 후

https://docs.puppetlabs.com/guides/provider_development.html

, 당신은 exec 일부가 아닌 필요는 package 부분은 충분하다.