先讲讲shell 与puppet的不同。

shell 脚本是过程式的,里面描述的是命令执行的过程,shell 通常很短,可以很快写出来,但是很快又会被抛弃,它常常依赖于特定操作系统环境。

puppet 语言是结果式的,使用者将自己想要达到的目的通过puppet语法描述给puppet,puppet去完成它,使用者不需要关心过程,整个过程完全被抽象化了。譬如安装一个软件包,只需要ensure => present ,不需要关心操作系统是debian还是redhat 。

个人总结看来,puppet语言形式上的特点就是“花括号分类,冒号声明,逗号结束”。

接下来讲puppet的语法,主要是举例(持续完善中,,,)

1、软件包管理

安装

package {"vim": ensure => present, }

多个软件包也可以一起写,用中括号和逗号

package {["httpd","mysql-server","php","php-mysql"]:
ensure => present,
}

卸载

package {"vim": ensure => absent, }

2、权限管理

file { "/etc/sudoers":owner => root,group => root,mode => 400,
}

权限递归

file { '/some/dir':mode => 644,recurse => true,}

目录里的所有文件会变成644,目录就会755

3、服务

service {"sshd":hastatus => true,harestart => true,ensure => running,enable => true,
}

4、文件管理

文件托管

file {"/etc/my.cnf":ensure => present,source => "puppet:///modules/mysql/my.cnf"owner => mysql,group => mysql,
}

这里有个地方比较蛋疼,文件路径是/etc/puppet/modules/mysql/files/my.conf,写成puppet规则时files会被省略,写成puppet:///modules/mysql/my.cnf

链接

file { "/etc/inetd.conf":ensure => link,target => "/etc/inet/inetd.conf",}

5、监视和审计

file { "/etc/passwd":audit => [ owner, mode ],
}

(当文件的权限属性发生变化时发出消息,而不修正权限)

6、执行命令

exec { "reload nginx":command => "/usr/sbin/nginx reload",require => Package["nginx"],refreshonly => true,
}
file { "/etc/nginx/nginx.conf":source => "puppet:///modules/nginx/nginx.conf",notify => Exec["reload nginx"],
}

(notify表示配置文件发生更改,就触发nginx平滑重启)

7、定时任务crontab

cron { ntpdate:command => "/usr/sbin/ntpdate 192.168.1.3",user => root,hour => '*/4',minute => '1',ensure => present,
}

(这样会导致流量瞬间拥挤,puppet很周到,提供一个伪随机的办法)

cron { ntpdate:command => "/usr/sbin/ntpdate 192.168.1.3",user => root,hour => '*/4',minute => fqdn_rand( 60 ),ensure => present,
}

(尽管是每四个小时运行一次,但是不同的机器还是会在不同的时刻去执行命令【分钟数为0-60随机】,将流量分散开来。)

8、删除

tidy {  clean_temp:path => "/tmp/temp",type => "ctime",recurse => true,rmdirs => true,age => "1d",backup => false,
}

(recurse表示递归)

高级用法之class

单独的class

class ssh {
package {"openssh-server":ensure => present,
}
file {"/etc/ssh/sshd_config":ensure => present,owner => root,group => root,source => "puppet:///files/sshd_config",notify => Service ["sshd"],
}
service {"sshd":ensure => running,hasstatus => true,hasrestart => true,enable => true,
}
}

合并的class(class可以被引用,成为另一个class的子集,用逗号分隔,结尾没有逗号)

class basic {include ssh, httpd
}

节点的语法和引用class一样

node "apache01.test.org"  {include httpd,mysql,php
}

用户管理

user { "root":ensure   => present,name     => "root",password => "SomeAlreadyEncryptedPassword";
}
user {"admin":name =>"admin",ensure => present,shell => "/bin/bash",home => "/home/admin",groups => "admin,wheel",uid => 500,gid => 500,password => '$1$Nnh0M0$t9s7Bbwx2fFer6IP/QGdA0',require => Group["admin"],
}
group {"admin":ensure =>present,
}

(password也就是/etc/shadow中的已经加密的密码,把它复制出来就好了,密码中包含 $ 的话,一定要记得加单引号。)

puppet还可以独立于master单独运行,功能也足够强大,几乎所有能写成puppet规则的语句,都可以直接在puppet命令行执行,例如:

1、安装软件包

puppet resource package httpd ensure=present

puppet 可以识别常见的linux发行版,自动调用yum或者apt去安装软件。

2、管理服务

puppet resource service httpd ensure=running enable=true

puppet会调用/etc/init.d/下的启动脚本,这个比常见的监控脚本强太多了。(puppet 2.7以上)

3、将规则写入本地文件来执行

puppet apply /opt/puppet/rules/init.pp

转载于:https://blog.51cto.com/purplegrape/946362

puppet语法学习相关推荐

  1. puppet基础学习(一)

    puppet基础学习(一) 一. Installation(模块安装) 模块安装地址: 开源版 puppet agent --configprint modulepath /etc/puppet/en ...

  2. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  3. [转]verilog语法学习心得

    verilog语法学习心得 1.数字电路基础知识: 布尔代数.门级电路的内部晶体管结构.组合逻辑电路分析与设计.触发器.时序逻辑电路分析与设计 2.数字系统的构成: 传感器  AD  数字处理器  D ...

  4. ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)

    ElasticSearch聚合语法学习 目录 bucket与metric两个核心概念 插入数据 统计哪种颜色电视销量最高 统计每种颜色电视平均价格 bucket嵌套实现颜色+品牌的多层下钻 统计每种颜 ...

  5. ElasticSearch搜索语法学习(term,filter,bool,terms,range)

    ES搜索语法学习 目录 原始数据 term,filter使用 bool组合多个filter条件来搜索数据 terms搜索多个值以及多值搜索结果优化 基于range filter来进行范围过滤 手动控制 ...

  6. android语法帮助手册_新 App 「捧读:日语语法学习与分析」的开发幕后思考

    新产品发布后,写一篇幕后思考已经是固定环节了. 为什么开发这款软件? 在开发完日语假名学习的 App 「50 音起源」 之后,便在考虑如何做一款语法相关的产品,市面上虽然有少许产品可供参考,但我觉得这 ...

  7. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统

    2 C++基础语法学习(1)之黑客攻击系统 遵循原则:从实战中学习知识 法律声明:本系统仅能攻击自己搭建的网站,作为学习使用,不会触犯法律 time:2020.01.20 author:姜海天 IDE ...

  8. 正则不能输入特殊字符_正则表达式语法学习和在线练习

    标题: 正则表达式语法学习和在线练习作者: 梦幻之心星 sky-seeker@qq.com标签: [#正则表达式,#语法,#学习,#练习]目录: [语法]日期: 2021-01-26 背景说明 正则表 ...

  9. python语法学习—实现猜拳游戏

    python基础语法学习,通过实现猜拳游戏,来对python语法的学习. # python语法实现 猜拳游戏 电脑随机出拳进行比较,用户自己输入要出的拳,用户赢了就退出游戏 # 主要用到 python ...

最新文章

  1. 2012 RDS Remote App 对于win7的支持问题
  2. @RequestMapping中method的默认值是什么?
  3. Git 技术篇-GitHub免费私有库设置方法实例演示,GitHub私有库时代来临
  4. Java黑皮书课后题第8章:*8.8(所有最近的点对)修改程序清单8-3,找出所有所有具有最小距离的点对。下面是一个运行示例
  5. 使用Azure DevOps Pipeline实现.Net Core程序的CD
  6. 信息学奥赛C++语言:质因数分解
  7. 基于amoeba实现mysql数据库的读写分离/负载均衡
  8. 吴恩达机器学习学习笔记第二章:单变量线性回归
  9. Linux系统上利用nmcli命令创建网络组
  10. Kafka+Log4j实现日志集中管理
  11. Intel CMT CAT CDP 技术应用
  12. MSDTC不可用解决办法
  13. 使用IK中文分词器做敏感词过滤
  14. 搭建一款属于自己的,微信/抖音小程序,通过广告赚钱
  15. pytho运算符练习
  16. 关于SpringOpenSessionInViewFilter的配置及处理方案
  17. 电容笔和Apple pencil区别有什么?双十一值得入手的电容笔推荐
  18. JAVA编写PTA(10分)
  19. 苹果呼叫转移设置不了_避免被骚扰将手机设置空号教程
  20. node 根据xlsx表格数据,批量生成表格文件,并且设置样式和行高

热门文章

  1. php laravel 优点,Laravel 特点有哪些?
  2. java基本要点_java代码的基本要点
  3. linux java 获取路径怎么写_linux中java获取路径怎么写?
  4. 微型计算机中 辅助存储器通常包括,第7章 微型计算机存储器习题参考答案
  5. 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...
  6. Maven中安装本地Jar包到仓库中或将本地jar包上传
  7. codeforces B. Pasha and String(贪心)
  8. [2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析
  9. java api 第一个类是_JAVA常用API:String 类的常用方法
  10. java 3_Java 3 (Java的数据类型)