如何避免在Puppet清单中免费复制/粘贴?

时间:2015-03-11 10:25:18

标签: puppet

`package {
"apache2_2.4.7-1ubuntu4_amd64(1)":
ensure => present,
provider => 'dpkg',
source => "/home/apache/apache2_2.4.7-1ubuntu4_amd64(1).deb",
require => File["/home/apache/apache2_2.4.7-1ubuntu4_amd64(1).deb"],
subscribe => Exec["dpkg --install"],
install_options => ["INSTLLDIR=/usr/bin:/usr/sbin:/sbin"],   
}
package {
"apache2-bin_2.4.7-1ubuntu4_amd64":
ensure => present,
provider => 'dpkg',
source => "/home/apache/apache2-bin_2.4.7-1ubuntu4_amd64.deb",
require => File["/home/apache/apache2-bin_2.4.7-1ubuntu4_amd64.deb"],
subscribe => Exec["dpkg --install"],
install_options => ["INSTLLDIR=/usr/bin:/usr/sbin:/sbin"],
}
package {
"libapr1_1.5.0-1_amd64":
ensure => present,
provider => 'dpkg',
source => "/home/apache/libapr1_1.5.0-1_amd64.deb",
require => File["/home/apache/libapr1_1.5.0-1_amd64.deb"],
subscribe => Exec["dpkg --install"],
install_options => ["INSTLLDIR=/usr/bin:/usr/sbin:/sbin"],
}`

当我安装具有大量依赖性的包时,我必须在包部分中编写此代码而不是在包的多个部分中编写。 因为代码非常冗长。 那么当包具有更多依赖性并在一个包部分时如何编写代码? 例如 我必须在一个包部分编写整个包依赖代码,如

package {

}

如何在小号行中减少此代码? 请帮帮我。

1 个答案:

答案 0 :(得分:0)

在您的具体情况下 - 只是不要。设置本地apt存储库并停止复制.deb个文件。

一般来说,为了避免复制/粘贴:

创建一个已定义的类型来包装资源。

define common_package($ensure=present, $source, $provider='dpkg') {
    package {
       $title:
           ensure => $ensure,
           provider => $provider,
           source => $source,
           require => File[$source],
           subscribe => Exec["dpkg --install"],
           install_options => ["INSTLLDIR=/usr/bin:/usr/sbin:/sbin"],
    }
}

然后像这样使用它:

common_package { 
    'apache2_2.4.7-1ubuntu4_amd64(1)':
        source => '/home/apache/apache2_2.4.7-1ubuntu4_amd64(1).deb';
    'apache2-bin_2.4.7-1ubuntu4_amd64':
        source => '/home/apache/apache2-bin_2.4.7-1ubuntu4_amd64.deb';
    'libapr1_1.5.0-1_amd64':
        source => '/home/apache/libapr1_1.5.0-1_amd64.deb';
}