puppet的配置清单书写
puppet的配置清单书写
1使用数组,合并同类的
例如你想安装很多软件,如果分开来写的话,很麻烦,不简洁,这时我们可以使用数组来完成
以前我们这样来写
class packages{
package { "sudo" :
ensure =>installed
}
package { "unzip" :
ensure => installed
}
package { "locate" : ensure => installed }
package { "lsof" : ensure => installed }
package { "cron" : ensure => installed }
package { "rubygems" : ensure => installed }
}
使用数组后就简单了
class packages{
package { [ "cron",
"locate",
"lsof",
"rubygems"
"screen",
"sudo"
"unzip" ]:
ensure => installed,
}
}
或者这样来写数组
$packages = [ "ruby1.8-dev",
"ruby1.8",
"ri1.8",
"rdoc1.8",
"irb1.8",
"libreadline-ruby1.8",
"libruby1.8",
"libopenssl-ruby" ] package { $packages: ensure => installed }
2,当你有一组资源拥有一些公用的参数而其中一些资源确有不同的参数时, 就需要使用 define 资源将它们组合在一起。
使用define来定义资源
会在tep目录下生成三个文件
define tmpfile() {
file { "/tmp/$name":
content => "Hello, world",
}
} tmpfile { ["a", "b", "c"]: }
结果如下:
[root@agent1 etc]# puppet agent --test --noop
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.pup.yxnu
Info: Applying configuration version ''
Notice: /Stage[main]/Motd/Motd::Tmpfile[b]/File[/tmp/b]/ensure: current_value absent, should be file (noop)
Notice: Motd::Tmpfile[b]: Would have triggered 'refresh' from events
Notice: /Stage[main]/Motd/Motd::Tmpfile[a]/File[/tmp/a]/ensure: current_value absent, should be file (noop)
Notice: Motd::Tmpfile[a]: Would have triggered 'refresh' from events
Notice: /Stage[main]/Motd/Motd::Tmpfile[c]/File[/tmp/c]/ensure: current_value absent, should be file (noop)
Notice: Motd::Tmpfile[c]: Would have triggered 'refresh' from events
Notice: Class[Motd]: Would have triggered 'refresh' from events
Notice: Stage[main]: Would have triggered 'refresh' from events
Notice: Finished catalog run in 0.83 seconds
多个参数
define webapp( $domain, $path, $platform ) {
...
}
webapp { "mywizzoapp":
domain => "mywizzoapp.com",
path => "/var/www/apps/mywizzoapp",
platform => "Rails",
}
#你可以使用逗号间隔的列表同时声明多个参数:
3资源的依赖关系
使用两个元参数来解决,require,notify
元参数require告诉puppet这个被指定的类中的所有资源必须在当前资源之前被处理。
notify 创建了一个通知关系,如果当前资源(服务器的配置发生改变)puppet就会通知服务重启,我们可以定义service类,让服务资源重启
实例如下:ntp服务的安装重启,会按照如下方式来执行,这个例子可以使用到其他服务,例如apache,nginx等
Package["ntp"] -> File["/etc/ntp.conf"] ~> Service["ntp"]
cat ntp.pp
class admin::ntp {
package { "ntp":
ensure => installed,
}
service { "ntpd":
ensure => running,
require => Package["ntp"],
}
file { "/etc/ntp.conf":
source => "puppet:///modules/admin/ntp.conf",
notify => Service["ntpd"],
require => Package["ntp"],
}
}
你也可以指定一个资源依赖于某个类:
require => Class["my-apt-repo"]
你不仅可以指定资源和类之间的依赖关系,甚至可以指定 collections 之间的依赖关系:
Yumrepo <| |> -> Package <| provider == yum |>
这是一种功能强大的表达方式,所有 provider 是 yum 的 package 资源被应用之前, 所有的 yumrepo 资源首先都应该被应用。
4继承inherits
当一个节点继承自另一个节点,它会应用父节点的所有配置。 然后你可以添加任何代码,从而使得这个节点成为有别于其他节点的特殊节点。
你可以配置一个节点继承自另外一个节点,而另外一个节点也可以继承自其它节点等。 但是你不能继承自多个节点(即不能多重继承),因此不能使用如下方式定义节点:
简单实例
1创建一个基类(一个节点),让其包含其他节点都包含的类
node server {
include admin::basics
include admin::ssh
include admin::ntp
include puppet::client
include backup::client
}
2然后,继承这个server节点
node wreckspace_server inherits server {
$provider = "WreckSpace"
}
node gododgy_server inherits server {
$provider = "GoDodgy"
}
node veryslow_server inherits server {
$provider = "VerySlow"
}
类的继承和重载
5给类传递参数
有时对一个类的某些方面进行 参数化(parameterize)是很有用的。例如, 你可能需要管理不同版本的 gem 软件包,既可以为每一种版本创建分离的单独的类, 也可以使用继承和覆盖,为一个类传递一个版本号作为参数。
实力如下,只是在传递参数的时候不同
声明一个类
class eventmachine( $version ) {
package { "eventmachine":
provider =>t gem,
ensure => $version,
}
}
然后在site.pp文件里面某个接地单下面包含这个类,这种写法只是同时为参数 $version 指定了一个值
class { "eventmachine": version => "0.12.8" }
上面这句就相当于以前我们写的include
include eventmachine
说明下;
与 define 不同,一个节点上只能存在一个参数化的类实例。 所以当你需要针对一个资源创建多个不同的实例时,应该使用 define 取代类的参数化。
在3.x版本中,在定义变量的时候,一定要加上$,像这种都是不生效的port=3306,要写成$port=3306
6可重用的跨平台配置必含配置
根据操作系统来安装服务
[root@pup manifests]# cat ssh.pp
class admin::ssh{
$ssh_service = $operatingsystem? {
/Ubuntu|Debian/ => "ssh",
default => "sshd",
}
service { $ssh_service:
ensure => running,
}
}
7获得系统环境信息
facter命令可以获取全部系统的信息
要查看关于你的系统中可用的完整的 facts 列表,请运行如下命令:
facter
上面那些变量,你可以在你的 Puppet 配置清单中访问这些 facts
一个简单实例:
在你的.pp文件中加入它,它只是作为一个通知,没有实际意义
class admin::ntp {
package { "ntp":
ensure => installed,
}
service { "ntpd":
ensure => running,
require => Package["ntp"],
}
file { "/etc/ntp.conf":
source => "puppet:///modules/admin/ntp.conf",
notify => Service["ntpd"],
require => Package["ntp"],
}
notify { "This is $operatingsystem version $operatingsystemrelease, on $architecture architecture, kernel version $kernelversion": }
}
一般放在最后的最外边一层,没有实际意义
客户端运行,看到,截取部分
Info: Retrieving plugin
Info: Caching catalog for agent1.pup.yxnu
Info: Applying configuration version ''
Notice: /Stage[main]/Admin::Ntp/Notify[This is CentOS version 6.5, on x86_64 architecture, kernel version 2.6.]/message: current_value absent, should be This is CentOS version 6.5, on x86_64 architecture, kernel version 2.6. (noop)
另外说一点:
你也可以在 ERB 模板中使用 facts。例如,你可能会在一个文件中插入一个节点的主机名, 或者基于一个节点的内存大小改变一个应用的配置设置。 当你在模板中使用 fact 的名字时,它们不需要前导的美元符号
puppet的配置清单书写的更多相关文章
- 手动编写的几个简单的puppet管理配置
puppet在自动化配置管理方面有很强大的优势,这里就不做过多介绍了,下面记录下几个简单的puppet管理配置: 一.首先在服务端和客户端安装puppet和facter 1)服务端 安装Puppet ...
- 从一份配置清单详解 Nginx 服务器配置
概述 在前面< Nginx 服务器开箱体验> 一文中我们从开箱到体验,感受了一下 Nginx 服务器的魅力.Nginx 是轻量级的高性能 Web 服务器,提供了诸如 HTTP 代理和反 ...
- puppet的配置
1时间问题 agent与master端务必要保持时间的一致性,最好使用ntp服务 检查ntp服务是否安装 [root@master-elk ~]# rpm -qa|grep ntp ntpdate-. ...
- puppet安装配置及使用
puppet安装前准备 一.服务器信息 master端:10.10.10.201 master.fansik.com slave端:10.10.10.156 slave.fansik.com 三台机 ...
- Spring Boot Dubbo applications.properties 配置清单
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习.Innovate ,And out execute ! 』 本文 ...
- MyEclipse与Eclipse配置清单
MyEclipse与Eclipse配置清单 1.编码设置 workspace -> 设置全局编码utf-8 修改JSP编码(Encoding)为UTF-82.Java配置 格式 ...
- FI配置清单-概要
1.编辑公司代码 T-Code:OX02 路径:IMG >企业结构Enterprise >定义Definition >财务会计 Financial Accounting>编辑, ...
- Ansible笔记(2)--配置清单
一.Ansible Inventory配置及详解 Inventory是ansible管理主机信息的配置文件,默认存放在/etc/ansible/hosts.在使用时通过 -i 或 --inventor ...
- Puppet 安装配置
环境说明: OS:CentOS 5.4 i386 puppetmaster 192.168.0.12 hostname: puppetmaster.info.com client ...
随机推荐
- particles.js 一个非常酷炫的粒子动画库
GIT 地址:https://github.com/VincentGarreau/particles.js/ 效果:
- redis对比memcached
摘要 : 简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储. 2 Re ...
- iOS JsonModel
iOS JsonModel 的使用 本文转自:http://blog.csdn.net/smking/article/details/40432287 下面讲一下JSONModel的使用方法. @in ...
- 在win10环境下安装eclipse mars版本
1下载eclipse软件.下载地址:http://www.eclipse.org/downloads/ 不要下载.exe文件.直接下载安装包,下载对应的安装包,我下载的是这个Eclipse IDE f ...
- Arduino线程库ProtoThreads
参考: Arduino线程库ProtoThreads 一个“蝇量级” C 语言协程库
- 【POJ2104】【HDU2665】K-th Number 主席树
[POJ2104][HDU2665]K-th Number Description You are working for Macrohard company in data structures d ...
- 3、手把手教你Extjs5(三)MVVM特性的简单说明
下面我们来看一下自动生成的代码中的MVVM架构的关系.Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类. 在上面的图片中,左边是Main. ...
- NavigationControllerr滑动返回
iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势.支持此手势的是UINavigationController中新增的属性 interactivePopGestureRecogniz ...
- 【转】PHP生成随机密码的几种方法
使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...
- 关于《master opencv with practical computer vision projects》的源代码
很多读者都在向我要<master opencv with practical computer vision projects>的源代码,现向读者公布,具体源代码地址如下: https:/ ...