一.本地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,但是我用 -> 符号定义运行顺序最后输出结果为

puppet 资源及依赖关系及本地测试

三.几个常用的资源介绍

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":} #显示信息