关于puppet

推荐书
Pro puppet

无法忍受
Puppet Cookbook的排版
这里有个更好的 Puppet Cookbook


1. 基本概念

puppet是一个CS结构的配置管理工具,用ruby开发的。

作为服务器端的S,puppet的术语叫master
作为客户端的C,puppet的术语叫agent
在每台机器上所做的配置,puppet术语叫configuration

1.1 ubuntu下的启动
启动puppet master:
master# service puppetmaster start
为了调试方便,也可以让master在控制台上直接输出日志方便察看:
puppet master --verbose --no-daemonize

puppet agent的启动:
修改/etc/default/puppet配置文件,自动随机启动
agent# service puppet start

为了测试方便也可以手工启动,指定master,例如
agent# puppet agent --server=puppet.mysite.com --no-daemonize --onetime


在agent连接master后,还需要在master机器上给agent授权才能访问:
察看需要授权的agent:
master# puppet cert --list
  agent2.mysite.com (F6:68:CB:27:E7:17:5E:60:DA:39:66:A3:A5:56:E4:DD)

给指定的agent授权
master# puppet cert --sign agent2.mysite.com

之后,agent就可以从master读取configuration进行配置了。


1.2 Hello, puppet
在master端,需要配置site.pp文件(Pro Puppet说没有这个文件master不能启动?)
可以在site.pp文件中为指定配置文件所在位置,一般在site.pp中导入nodes.pp文件,后者为每个节点指定哪些配置适用。这两个pp文件一般都在/etc/puppet/manifests目录下
master# vim manifests/site.pp
import 'nodes.pp'


master# vim manifests/nodes.pp
node default {
  include mytest
}

default表示所有节点的缺省配置,当然也可以为指定节点指定配置,例如
node 'agent02.mysite.com' {
  include mytest
}

通过正则表达式指定节点:
node /^agent\d+\.mysite\.com/ {
  include mytest
}



然后在/etc/modules/下创建目录mytest/manifests和文件init.pp
master# mkdir -p mytest/manifests
master# vim modules/mytest/manifests/init.pp
class mytest {
  notify {hi: 
    message => "Hello, Puppet",
  }
}


在agent上测试一下:
agent# puppet agent --server=puppet.mysite.com --no-daemonize --onetime --verbose

info: Caching catalog for a2.mysite.com
info: Applying configuration version '1343644644'
notice: Hello, Puppet
notice: /Stage[main]/Mytest/Notify[hi]/message: defined 'message' as 'Hello, Puppet'    
notice: Finished catalog run in 0.20 seconds  


用agent安装一个软件试试,比如tree。修改init.pp文件
class mytest {
  notify {hi: 
    message => "Hello, Puppet",
  }
  package { tree:
    ensure => present,
  }
}


然后在agent机器上运行一下,就发现tree已经被puppet装上了。


其它

关于变量:
http://docs.puppetlabs.com/guides/language_guide.html#variables

templates目录下的erb模版的问题

如果用facter中的变量,直接使用:
<%= ipaddress %>

如果用自己pp文件中定义的变量,需要加@符号在变量名前:
<%= @myvar %>




常用资源类型:
http://docs.puppetlabs.com/references/stable/type.html


pull和push

puppet是个 pull模型,也就是说agent从master拉取配置到本地执行。
如果有个命令想让所有agent执行,也就是说想从master将指令push到agents,可以在master的机器上运行:
puppet kick


这样所有连接的agents就会执行pull操作,从master拉取配置到本地

参考 这里



一个常用的vim支持:
首先要有pathogen
https://github.com/tpope/vim-pathogen/
然后安装
https://github.com/rodjek/vim-puppet/

riak的puppet模块:
http://forge.puppetlabs.com/bruce/riak
不过好像无法访问

Install Riak using Basho packages on Ubuntu/Debian
https://github.com/brhelwig/puppet-riak

另外一个,不过有一年没更新了
https://github.com/monokrome/puppet-riak

https://gist.github.com/1038441

猜你喜欢

转载自cryolite.iteye.com/blog/1602189