一.本地pp 文件测试
package {"nginx":
#作用:安装nginx
ensure=> latest,
}
service {"nginx":
#作用:启动nginx,并让设置开机启动
ensure=> running,
enable=> true,
restart => "systemctl restart nginx.service",
#只有被通知或者订阅才会被触发重启
subscribe => file["/etc/nginx/nginx.conf"],
#监听下面那个服务,若触发了,重启nginx
#测试得出结论,如果新文件事先已经存在没有发生修改,重启nginx不会被触发。
}
file{"/etc/nginx/nginx.conf":
#作用:复制nginx配置文件
ensure=>file,
content=>template("/root/nginx.conf"),
}
puppet apply -v --noop cs.pp #测试运行,并不真正安装,用于看报错的 puppet apply -v cs.pp #真正运行安装
二.资源的依赖关系
before:表示需要依赖于某个资源 require:表示应该先执行本资源,在执行别的资源 notify:A notify B:B依赖于A,且A发生改变后会通知B subscribe:B subscribe A:B依赖于A,且B监控A资源的变化产生的事件 subscribe例:
package {"httpd":
ensure=> present,
subscribe =>package["nginx"],
#表示订阅下面那个资源,如果下面那个资源执行不成功这个资源不会执行,下面资源执行成功了或者已经在执行完毕的状态了,本资源就会执行
}
package {"nginx":
ensure=> present,
}
notify例:
package {"httpd":
ensure=> present,
}
package {"nginx":
ensure=> present,
notify=>package["httpd"],
#表示该资源执行完毕通知上面那个资源,这个资源不执行成功,上面那个资源不会执行
}
依赖关系还可以使用->和~>来排序 例:
exec {"echo '1'>>/root/2333.txt":
path => ["/usr/bin", "/usr/sbin"],
}
exec {"echo '2'>>/root/2333.txt":
path => ["/usr/bin", "/usr/sbin"],
}
exec {"echo '3'>>/root/2333.txt":
path => ["/usr/bin", "/usr/sbin"],
}
exec["echo '3'>>/root/2333.txt"] -> exec["echo '2'>>/root/2333.txt"] -> exec["echo '1'>>/root/2333.txt"]
如果是正常输出结果应该为123,但是我用 -> 符号定义运行顺序最后输出结果为
三.几个常用的资源介绍
1.exec资源
exec { "mkdir 666":
#执行的命令
cwd => "/root/",
#在那个路径执行命令,给了如果路径不存在,执行失败
creates => "/root/678",
#判断,如果有这个文件夹了就不执行了
path => ["/usr/bin", "/usr/sbin"]
#命令程序,到那个路径去找执行文件
}
2.package (安装软件)
package{["httpd.x86_64","nginx.x86_64"]:
#以[,]隔开可安装多个软件
ensure => purged,
#latest安装最新的,installed 安装,purged 删除软件包
provider => "yum",
#以yum方式安装在yum源里安装
}
package{"nginx":
ensure => installed,
provider => "rpm",
#以rpm本地文件安装,下面必须指定安装文件的路径,否则报错
source => "/root/nginx-1.8.1-1.el7.ngx.x86_64.rpm"
}
3.service 和 flie
class xingjian{
service{"nginx":
ensure => running,
#设置成什么状态 running正在运行, stopped停止状态
enable => true,
#是否开启自启 true是,false否
hasrestart => true,
hasstatus => true,
require => file['/etc/nginx/nginx.conf'],
#在执行资源时,先检查下面那个资源是否执行
}
file {"/etc/nginx/nginx.conf":
#复制的路径
ensure =>file,
#文件类型,file直接复制原有类型,如果要填link的是创建链接文件,但是要创建链接文件的话,下面的source要换成target,如果填directory就是复制文件夹,需要在添加recurse='true'实现递归复制
source =>"/root/nginx.conf",
#源文件路径
}
}
4.cron(计划任务)
cron {"jihua":
command => "/root/1.sh",
##执行脚本的路径名或者命令路径名
ensure => "present",
#present 如果该cron不存在则添加,absent 如果该cron存在则删除
minute => "*/5",
#5分钟运行一次,和crontab用法一样
target => "root",
#以什么用户执行脚本
}
5 user 和 group
group{"yangzai":
#组名
ensure => present,
gid => "2333",
system => false,
#是否为系统组
# members:成员用户,
}
user{"yangzai":
#用户名
ensure =>present,
system =>false,
comment =>"233",
#注释,一般描述运行啥软件
shell =>"/bin/bash",
#默认shell
home =>"/home/yangzai",
#家目录路径
managehome => true,
#是否创建家目录
groups => "yangzai",
uid => "2333"
}
7. notify {"hello world":} #显示信息