Puppet基础篇7-编写第一个完整测试模块puppet
零基础学习Puppet自动化配置管理系列文档
将Puppet部署到生产中第一个要编写的模块就是puppet本身,虽然puppet可以运行其它所有模块完成各自的部署,但是puppet一旦出问题,那么一切都会停止工作。当然除了puppet自身模块外,还需要保证网络的通畅以及其它你附加的环境等等。
之前编写过简单的motd模块,大致了解了一些模块的结构以及简单的pp语法,接下来我们进行详细的讲解。 那么编写一个完整的puppet模块应该考虑哪些因素呢?
-
puppet及附属依赖包是否已经安装OK?
-
puppet配置文件是否正确?
-
puppet服务是否正常运行?
-
在更新puppet配置文件的情况下,是否能够主动让puppet服务重启或者reload?
-
puppet安装包是否能够自动升级到指定版本?
接下来以agent1和agent3为例进行讲解
1、创建puppet模块目录结构
[root@puppetmaster ~]# cd /etc/puppet/modules/ [root@puppetmaster modules]# mkdir puppet [root@puppetmaster modules]# cd puppet/ [root@puppetmaster puppet]# mkdir files manifests templates #创建模块目录结构 [root@puppetmaster puppet]# tree ../puppet ../puppet ├── files #存放下载的文件 ├── manifests #存放puppet配置 └── templates #存放配置模板,方便pp文件引用 3 directories, 0 files [root@puppetmaster puppet]#
2、创建puppet配置文件
[root@puppetmaster puppet]# cd manifests/ [root@puppetmaster manifests]# touch init.pp config.pp install.pp service.pp params.pp [root@puppetmaster manifests]# tree ../ ../ ├── files ├── manifests │ ├── config.pp #管理puppet配置 │ ├── init.pp #管理模块所有pp文件配置 │ ├── install.pp #管理puppet安装 │ ├── params.pp #管理模块中变量以及一些判断 │ └── service.pp #管理puppet服务 └── templates 3 directories, 5 files
3、编写puppet模块配置文件
整个过程应该是这样,首先应该安装puppet(install.pp),然后配置puppet(config.pp),最后启动puppet服务(service.pp)
注意: 接下来的过程不是一步到位的,是一个循序渐进的过程,一步步指导直到完成一个比较完整的模块。
3.1、编写安装配置文件install.pp
通过package资源实现 更多有关package的语法及案例请访问http://kisspuppet.com/2013/11/11/package/
需要注意的是:class名称要和创建的模块名保持一致,名称为puppet,由于在整个配置文件中init.pp为起始配置文件,包含的都应该是子配置文件,所有应该写成"class主类名称::class子类名称",而class子类名称需要和创建的pp文件名保持一致,比如puppet::install,那么创建的子类名称就应该是install.pp
3.1.1、编写不具备判断条件的配置文件
节点安装puppet主要还依赖于facter
[root@puppetmaster manifests]# vim install.pp class puppet::install{ #一个类包含两个子类 include puppet::puppet_install,puppet::facter_install } class puppet::puppet_install{ package { 'puppet': ensure => installed, #要求处于被安装状态 } } class puppet::facter_install{ package { 'facter': ensure => installed, } }
也可以用以下两种写法
[root@puppetmaster manifests]# vim install.pp class puppet::install{ #一个类包含两个资源 package { 'puppet': ensure => installed, } package { 'facter': ensure => installed, } } [root@puppetmaster manifests]# vim install.pp class puppet::install{ package { ['puppet','facter']: #采用数组的形式 ensure => installed, } }
3.1.2、编写具备判断系统版本条件的模块
存在这样一种情况,在我的yum源中有很多puppet版本,而我只希望所有节点只安装我指定的版本,比如2.7.25,那么如何设置呢?其次,还应该考虑一种情况,节点的系统版本可能会不一样,比如有RHEL5、RHEL6等,那么如何让puppet模块自己去判断呢?
通过以下facter进行判断
[root@agent1 ~]# facter | grep operatingsystemmajrelease operatingsystemmajrelease => 5 [root@agent3 ~]# facter | grep operatingsystemmajrelease operatingsystemmajrelease => 6
应该是以下写法比较合理
没有评论:
发表评论