Puppet 的类参数传递
浏览:1098次 出处信息
之前使用 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 形式的写法,只能用资源调用形式的写法。
建议继续学习:
- 使用Apache 和Passenger来运行puppetmaster (阅读:7848)
- perl模块Getopt::Std用法及实例-从命令行读取参数模块 (阅读:6562)
- 千万不要把 bool 当成函数参数 (阅读:4759)
- 自动化运维之企业实际案例分析 (阅读:4325)
- puppet使用rsync来同步文件教程 (阅读:3827)
- DevOps之Puppet (阅读:3540)
- 如何有效运行puppet cron任务以及如何触发运行puppet (阅读:3482)
- 关于在函数调用时传递string引用的必要性 (阅读:3492)
- 使用参数化查询防止SQL注入漏洞 (阅读:3351)
- MySQL 5.1 的参数简表 (阅读:3136)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:Web编码总结 >>
文章信息
- 作者:三斗室 来源: 三斗室
- 标签: Puppet 参数
- 发布时间:2014-12-02 23:53:27
建议继续学习
近3天十大热文
-
[930] WordPress插件开发 -- 在插件使用 -
[130] 解决 nginx 反向代理网页首尾出现神秘字 -
[51] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 海量小文件存储 -
[50] 整理了一份招PHP高级工程师的面试题 -
[49] CloudSMS:免费匿名的云短信 -
[48] 全站换域名时利用nginx和javascri -
[48] 用 Jquery 模拟 select -
[47] Innodb分表太多或者表分区太多,会导致内 -
[46] ps 命令常见用法
