[英]Puppet install multiple packages using zypper command - packages names got concatenated
我想通過將命令zypper與puppet一起使用來安裝多個軟件包。 我創建了自己的存儲庫,並將一些bacula軟件包轉儲到了那里。 我的清單如下:
#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返回了一個錯誤。 輸出如下:
# 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
我該如何解決? 如果有更好的方法來執行此任務,因為我是木偶新手,所以我願意提出建議。
謝謝。
是的,您的方法有缺陷。
您應該將如何調用zypper
細節保留給Puppet。 除非絕對必要,否則不要使用exec
類型。 對於軟件包,請改用package
。
package {
$baculas:
ensure => 'installed',
provider => 'zypper',
}
實際上,如果您使用的是SUSE系統,Puppet應該自己選擇zypper
提供程序。 只是放棄exec
可能已經成功了。
考慮檢查系統中的默認提供程序。
https://docs.puppetlabs.com/guides/provider_development.html 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]
正確設置后,不需要exec
部分,而package
部分就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.