puppet语法学习

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

先讲讲shell 与puppet的不同。


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

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


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


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

1、软件包管理

安装

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


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

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


卸载

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


2、权限管理

 
 

1
2
3
4
5
file  "/etc/sudoers" :
     owner => root,
     group => root,
     mode => 400,
}


权限递归

1
2
3
4
file  '/some/dir' :
       mode => 644,
       recurse =>  true ,
     }

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


3、服务

 
 
1
2
3
4
5
6
service { "sshd" :
     hastatus =>  true ,
     harestart =>  true ,
     ensure => running,
     enable  =>  true ,
}


4、文件管理

文件托管

 
 
1
2
3
4
5
6
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


链接

1
2
3
4
file  "/etc/inetd.conf" :
       ensure => link,
       target =>  "/etc/inet/inetd.conf" ,
     }


5、监视和审计

 
 
1
2
3
file  "/etc/passwd" :
     audit => [ owner, mode ],
}


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


6、执行命令

1
2
3
4
5
6
7
8
9
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

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


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

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

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


8、删除

1
2
3
4
5
6
7
8
tidy {  clean_temp:
     path =>  "/tmp/temp" ,
     type  =>  "ctime" ,
     recurse =>  true ,
     rmdirs =>  true ,
     age =>  "1d" ,
     backup =>  false ,
}

(recurse表示递归)


高级用法之class


单独的class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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的子集,用逗号分隔,结尾没有逗号)

1
2
3
class basic {
       include  ssh , httpd
}


节点的语法和引用class一样

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


用户管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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、安装软件包

1
puppet resource package httpd ensure=present

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


2、管理服务

1
puppet resource service httpd ensure=running  enable = true

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


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

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









本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/946362,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
消息中间件 持续交付