主程序:
facter-2.4.6-1.el7.x86_64.rpm
puppet-3.8.7-1.el7.noarch.rpm #agent主机上用的包
puppet-server-3.8.7-1.el7.noarch.rpm
注:yum仓库中不是最新版的,可能会有些差别,最好到ftp上下载最新版的
配置文件:
/etc/puppet/
├── auth.conf
├── environments
│ └── example_env
│ ├── manifests
│ ├── modules
│ └── README.environment
├── fileserver.conf
├── manifests
├── modules
└── puppet.conf
目录:
1.puppet命令
2.资源类型
3.流控制语句
4.类class_类继承
5.puppet模块
6.多环境配置
1.puppet命令:
puppet apply -verbose XXXX.pp-noop #测试执行-debug #检查显示过程puppet describe #查看资源-l:列出所有资源类型;-s:显示指定类型的简要帮助信息;-m:显示指定类型的元参数,一般与-s一同使用;facter -p #查看主机信息,可以算是看内建变量puppet module install 模块名 #安装模块puppet module search 模块名 #互联网查找模块puppet module list #查看模块列表
2.资源类型:
_group_创建和管理组_ :示例:group{‘nginx’:name => nginx,ensure => present,system => true,}name : 组名gid : 组IDensure : 状态[present | absent]system : 是否为用户组 [true | false]members : 成员用户_user_管理用户:示例:user{‘nginx’:uid => 3000,name => nginx,ensure => present,password => mageedu,}name : 用户名uid : UIDgid : 基于组IDgroups : 附加组comment : 注释expiry : 过期时间home : 家目录shell : 默认shell 类型system : 是否为系统用户ensure : present | absentpassword : 加密后的密码串_package_管理软件包 :示例:package{‘httpd’:ensure => installed,}name : 软件包名ensure : [ installed | present | absent]source : 程序包来源 [rpm | yum]require: Package[“$webpkg”],_service_服务管理:示例:service{‘httpd’:ensure => running,enable => true,restart => ‘systemctl restart httpd.service’,# subscribe => File[‘httpd.conf’],}ensure : [ installed | present | latest | ]path : 启动服务的脚本name : 服务名称enable : 是否开机启动restart : 通常用于重定义为 reloadhasrestart : 有重启命令 [true | false]hasstatus : 有状态查询命令require: Package[“$webpkg”],_file_管理文件 :示例:file{‘httpd.conf’:path => ‘/etc/httpd/conf/httpd.conf’,source => ‘/root/manifests/httpd.conf’,ensure => file,notify => Service[‘httpd’],}Package[‘httpd’] -> File[‘httpd.conf’] -> Service[‘httpd’]ensure : 文件类型的确认 [file | directory | link | present | absent ]path : 文件路径source : 源文件content : 文件内容target : 符号连接的目标文件owner : 属主group : 属组mode : 权限atime/ctime/mtime : 时间戳_exec_执行命令 :示例:exec { “unzip tgz packget”:command => “tar -xvf /tmp/mysql_test/mysql_test.tgz”, ###所有命令必须为全路径或者path参数指定命令搜索路径path => “/usr/bin:/usr/sbin:/bin:/sbin”,cwd => “/tmp/mysql_test”, ##命令执行的路径为: /tmp/mysql_test/creates => “/etc/my.cnf”, #当/etc/my.cnf不存在的时候,才会执行该命令tries => 2, #重试次数try_sleep => 3, #重试间隔 s为单位}cwd : 命令执行的目录command : 要运行的程序creates : 文件路径不存在即创建user/group : 运行命令的用户身份onlyif : 此属性指定一个命令, 此命令正常(退出码为0)运行时, 当前command 才会运行unless : 此属性指定一个命令, 此命令非正常(退出码为0)运行时, 当前command 才会运行refresh : 重新执行当前command 的替代命令refreshonly : 仅接收到订阅资源的通知时方才运行_cron_设置定时任务 :示例:cron{‘timesync’:command => ‘/usr/sbin/ntpdate 10.1.0.1 &> /dev/null’,ensure => present,minute => ‘*/3’,user => ‘root’,}command:要执行的任务;ensure:present/absent;hour:minute:monthday:month:weekday:user:添加在哪个用户之上;name:cron job的名称;_notify_在日志中追加记录信息 :示例:notify {“hello”message => ‘hello guys’name => ‘hello message’}message : 信息内容name : 信息名称
3.流控制语句:
if语句:if CONDITION {…} else {…}示例:if $osfamily =~ /(?i-mx:debian)/ {$webserver = ‘apache2’} else {$webserver = ‘httpd’}package{“$webserver”:ensure => installed,}case语句:case CONTROL_EXPRESSION {case1: { … }case2: { … }case3: { … }…default: { … }}示例:case $osfamily {“RedHat”: { $webserver=’httpd’ }/(?i-mx:debian)/: { $webserver=’apache2′ }default: { $webserver=’httpd’ }}package{“$webserver”:ensure => installed,}selector语句:#当变量符合case中的其中一个时,直接返回指定值CONTROL_VARIABLE ? {case1 => value1,case2 => value2,…default => valueN,}示例:$pkgname = $operatingsystem ? {/(?i-mx:(ubuntu|debian))/ => ‘apache2’,/(?i-mx:(redhat|fedora|centos))/ => ‘httpd’,default => ‘httpd’,}package{“$pkgname”:ensure => installed,}
4.类class:
示例:class nginx {package{‘nginx’:ensure => installed,}#调用才可执行类代码include nginx示例:#给class参数,给定个默认参数class dbserver($pkgname=‘mariadb-server’) {package{“$pkgname”:ensure => latest,}service{“$pkgname”:ensure => running,enable => true,}}#条件判断参数,给特定值if $operatingsystem == “CentOS” {$dbpkg = $operatingsystemmajrelease ? {7 => ‘mariadb-server’,default => ‘mysqld-server’,}}#赋予参数值class{‘dbserver’:pkgname => $dbpkg,}类继承:class XXXX:XXXX inherits XXXX {…puppet code…}示例:class nginx::webproxy inherits nginx {file{‘nginx.conf’:path => ‘/etc/nginx/conf.d/ngx-proxy.conf’,source => ‘/root/manifests/ngx-proxy.conf’,}#添加或修改属性Service[‘nginx’] {enable => false,require +> Flie[‘nginx.conf’],}}
puppet模块:
需先创建好目录,对应资源要放在对应目录下mkdir puppet/module/模块名/—manifests/:init.pp:必须一个类定义,类名称必须与模块名称相同;files/:静态文件;puppet:///modules/MODULE_NAME/FILE_NAMEtemplates/:tempate(‘MOD_NAME/TEMPLATE_FILE_NAME’)lib/:插件目录,常用于存储自定义的facts以及自定义类型;spec/:类似于tests目录,存储lib/目录下插件的使用帮助和范例;tests/:当前模块的使用帮助或使用范例文件;在master主机上:1.创建好模块mkdir /etc/puppet/module/nginx/{manitests,files,templates,lib,spec,tests}vim /etc/puppet/module/nginx/manitests/init.pp2.写好站点清单vim /etc/puppet/manitests/site.ppnode 节点名字 {include 模块名}3.启动systemctl start puppet-master.server4.签证puppet cert sign –all在agent节点机上5.签证puppet agent –server node1 –no-daemonize -v –nooppuppet cert list –all
原创文章,作者:z long,如若转载,请注明出处:http://www.178linux.com/84259