最新消息:

Puppet 的类参数传递

pupper admin 3712浏览 0评论

   之前使用 ENC 管理 puppet,尽量保持了输出 yaml 内容的简单,只提供了一个统一的全局参数定义 node 的 role。(题外话,puppetlabs 推荐了另一个通过继承关系实现 role 的示例,见:Designing Puppet – Roles and Profiles。)
   但是 puppet 中有些配置确实修改比较频繁,文件操作不得不说是一件不甚方便的事情,于是重新考虑通过类参数的方式来灵活化某些配置的操作。
修改前
nginx/manifests/init.pp
class nginx {

    include “nginx::${::role}”

}

nginx/manifests/loadbalancer.pp
class nginx::loadbalancer {

    $iplist = [‘192.168.0.2:80’]

    file { ‘nginx.conf’:

        content => template(‘nginx/nginx.conf.erb’),

    }

}

enc nginxhostname

classes:

  – nginx

  – base

environment: production

parameters:

  role: loadbalancer

修改后
nginx/manifests/init.pp
class nginx ($iplist = []) {

    class { “nginx::${::role}”:

        iplist => $iplist

    }

}

nginx/manifests/loadbalancer.pp
class nginx::loadbalancer ($iplist = []) {

    file { ‘nginx.conf’:

        content => template(‘nginx/nginx.conf.erb’),

    }

}

enc nginxhostname

classes:

  nginx:

    iplist:

      – 192.168.0.2:80

  base: ~

environment: production

parameters:

  role: loadbalancer

要点
虽然真正需要 $iplist 的是下面的一个子类,但是 ENC 传值是给的父类,所以需要一层层传递下去;
ENC 中给类传参,类就要写成哈希形式,否则是数组形式;
有参数的类,在调用的时候无法使用 include 形式的写法,只能用资源调用形式的写法。

转载请注明:爱开源 » Puppet 的类参数传递

您必须 登录 才能发表评论!