开发者社区> 余二五> 正文

puppet语法学习

简介:
+关注继续查看

先讲讲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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14328 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
21003 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
30391 0
Puppet学习之文件管理
Puppet学习之文件管理 使用puppet可以方便的进行文件管理,可以对文件的内容、属组、属主、权限等进行管理。可管理的文件类型包括普通文件、目录、链接文件。类型需要在ensure类型中明确指定。
806 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
23137 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17480 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载