puppet完整模块实例分步解读

简介:

   本文示例针对puppet自身模块,详细解读模块的结构及语法应用,通过本例的学习,可以掌握puppet模块应用的技能,为自动化应用打下坚实基础。


下面就以agent为例分步测试


1  创建puppet模块目录结构


[root@master ~]# cd /etc/puppet/modules/                        #进入模块主目录

[root@master modules]#  mkdir puppet                               #创建puppet模块主目录

[root@master modules]#  cd puppet

[root@master puppet]#  mkdir files manifests templates     #创建模块目录结构

[root@master puppet]#  tree ../puppet
../puppet
├── files  #存放下载的文件
├── manifests  #存放puppet配置
└── templates  #存放配置模板,方便pp文件引用


2  创建模块puppet配置文件


[root@master puppet]# cd manifests

[root@master manifests]# touch init.pp config.pp install.pp params.pp service.pp

[root@master manifests]# tree ../

../
├── files
├── manifests
│   ├── config.pp              #管理模块puppet配置
│   ├── init.pp                   #管理模块所有pp文件配置
│   ├── install.pp               #管理puppet应用安装
│   ├── params.pp            #管理模块中变量以及一些判断
│   └── service.pp             #管理puppet服务
└── templates


3  编写模块配置文件


        整个过程是这样的,首先应该安装puppet(install.pp),然后配置puppet(config.pp),最后启动puppet服务(service.pp)


3.1 编辑init.pp

[root@master manifests]# vim init.pp

class    puppet{        #创建模块puppet类

        include puppet::install        #包含子类install,可以是install.pp文件,也可以直接写入本文件

}


3.2 编辑install.pp

注意:class名称要和创建的模块名保持一致,名称为puppet,由于在整个配置文件中init.pp为起始配置文件,包含的都应该是子配置文件,所有应该写成“class主类名称::class子类名称”,而class子类名称需要和创建的pp文件名保持一致,比如puppet::install,那么创建的子类名称就应该是install.pp

[root@master 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@master manifests]# vim install.pp 
class puppet::install{  #一个类包含两个资源
 package { 'puppet':
   ensure => installed,
 }
 package { 'facter':
   ensure => installed,
 }
}

具有判断版本的写法

[root@master manifests]# vim install.pp 
class puppet::install{
 include puppet::puppet_install,puppet::facter_install
}
class puppet::puppet_install{
 package { 'puppet':
   ensure => $operatingsystemmajrelease ?{ #判断系统版本
     5 => '2.7.25-1.el5',
     6 => '2.7.25-1.el6',
   }
 }
}
class puppet::facter_install{
 package { 'facter':
   ensure => $operatingsystemmajrelease ?{
     5 => '1.7.5-1.el5',
     6 => '1.7.5-1.el6',
   }
 }
}

3.3 编辑site.pp 

将模块应用到agent上

[root@master ~]# vim /etc/puppet/manifests/site.pp 

$master = 'master.puppet.com'
node 'master_cert.puppet.com'{
 include  test,puppet
}
node 'agent1_cert.puppet.com'{
 include  test,puppet
}
node 'agent2_cert.puppet.com'{
 include  test,puppet
}
node 'agent3_cert.puppet.com'{
 include  test,puppet
}

所有节点都使用相同的模块,也可以是以下写法 

[root@master ~]# vim /etc/puppet/manifests/site.pp 
$master = 'master.puppet.com'
class environments{
 include motd,puppet
}
node default{
  include environments
}

简单测试

[root@agent1 ~]# puppet agent -t --noop    #通过--noop进行尝试性测试,可以看到节点变化情况


3.4 编写config配置


编写params.pp文件,增加certname变量

[root@master manifests]# vim params.pp 
class puppet::params {
 $puppetserver = 'master.puppet.com'  #增加puppetserver变量指向master名称
 case $hostname{   #增加certname变量
   agent1: {
     $certname = 'agent1_cert.puppet.com'  
   }
   agent3: {
     $certname = 'agent3_cert.puppet.com'
   }
   default: {  #设置默认不存在的情况下报错
     fail("certname is not supported on ${::operatingsystem}")
   }
 }
}



编写puppet.conf.erb模板

puppet的erb模板的存在是为了解决每个节点单独配置一个文件的问题,因为erb模板可以引用fact变量,变量的内容会根据节点系统的不同而变化。

[root@master manifests]# vim ../templates/puppet.conf.erb
### config by  puppet ###
[main]
   logdir = /var/log/puppet
   rundir = /var/run/puppet
   ssldir = $vardir/ssl
[agent]
   classfile = $vardir/classes.txt
   localconfig = $vardir/localconfig
   server = <%= scope.lookupvar('puppet::params::puppetserver') %>  #引用变量puppetserver
   certname = <%= scope.lookupvar('puppet::params::certname') %>  #引用变量certname
   runinterval = 10


编写config.pp

[root@master manifests]# vim config.pp 
class puppet::config{

    include puppet::params                                           #添加引用关系,
   file { '/etc/puppet/puppet.conf':                              #节点文件存放的路径
   ensure  => present,                                                 #要求存在
   content => template('puppet/puppet.conf.erb'),  #要求根据模板生成,路径写法为相对路径(templates目录隐藏掉)
   owner   => 'root',                                                  #要求文件属主为root
   group   => 'root',                                                  #要求文件属组为root
   mode    => '0644',                                                #要求文件权限为644
   require => Class['puppet::install'],                       #要求这个文件在配置之前先正确运行install.pp文件,也就是说要求puppet的包应当处于安装状态
 }
}


3.5 编写service.pp文件

[root@master manifests]# vim service.pp 
class puppet::service{
 service { 'puppet':
   ensure     => running,  #设置puppet服务一直处于运行状态
   hasstatus  => true,  #通过标准的命令“service server_name status"进行检查状态
   hasrestart => true,  #设置puppet服务具有标准的restart命令
   enable     => true,  #要求开机自动启动,其实通过chkconfig设置puppet状态为on
 }
}


3.6 更新config.pp文件,增加通知服务重启功能

[root@master manifests]# vim config.pp 

class puppet::config{
 include puppet::params
 file { '/etc/puppet/puppet.conf':
   ensure  => present,
   content => template('puppet/puppet.conf.erb'),
   owner   => 'root',
   group   => 'root',
   mode    => '0644',
   require => Class['puppet::install'],
   notify  => Class['puppet::service'],  #配置更新后主动通过puppet服务重启
 }
}


3.7 添加class puppet::service puppet::config到init.pp中

[root@master manifests]# vim init.pp 
class puppet{
 include puppet::install,puppet::config,puppet::service
}


结语:配置文件编辑完成后,可在agent上测试是否正常,到此,模块完整结构已经详细分步展示,每一步后均可以自我调整测试,依照这种模块结构,可以移植到其他模块应用,语法上也可以尝试多变,配置有很强的灵活性。













本文转自super李导51CTO博客,原文链接: http://blog.51cto.com/superleedo/1901041,如需转载请自行联系原作者



相关文章
|
Java 应用服务中间件 Linux
puppet连载九:linux安装jdk、tomcat模块
安装jdk1.8.0_91和tomcat8.0.36 mkdir -p /etc/puppet/modules/linuxjdktomcat/{manifests,templates,files} vi /etc/puppet/modules/linuxjdktomcat/manifests/init.
1176 0
|
MySQL 关系型数据库 Linux
puppet连载10:linux安装percona57/56/55、sysbench、tpcc模块
在服务端/puppet/soft下建my.cnf,内容为https://www.jianshu.com/p/c63fc6c71279 在服务端/puppet/soft下建changemysql57pass.
1188 0
|
Linux 开发工具 git
puppet连载七:linux基础组件安装模块
linux基础组件安装模块linuxbaseinstall 更换源,安装gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf git mkdir -p /etc/puppet...
1169 0
puppet连载六:创建测试模块test
创建测试模块 mkdir -p /etc/puppet/modules/test/{manifests,templates,files} vi /etc/puppet/modules/test/manifests/init.
979 0
|
网络协议 Linux 安全
puppet连载八:linux优化模块
linux优化模块 在服务端先建立文件limits.con vi /puppet/soft/limits.conf soft nofile 102400 hard nofile 102400 soft nproc 102400 hard nproc 102400 保存,退出 在服务端建立文件sysctl.
887 0
|
测试技术
puppet cron 模块
转载:http://blog.51cto.com/ywzhou/1577299 Puppet模块章节环境说明 服务端 | 客户端 操作系统:CentOS 6.
1103 0
|
安全 Linux 网络协议
puppet yum模块、配置仓储、mount模块
转载:http://blog.51cto.com/ywzhou/1577335 作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。 1、服务端配置yum模块 (1)模块清单 [root@puppet ~]# tree /etc/puppe...
1282 0
|
网络安全
puppet puppet模块、file模块
转载:http://blog.51cto.com/ywzhou/1577356 作用:通过puppet模块自动控制客户端的puppet配置,当需要修改客户端的puppet配置时不用在客户端一一设置。
1125 0
|
监控 网络协议 网络架构
puppet host模块
转载:http://blog.51cto.com/ywzhou/1577432作用:自动配置客户端的hosts文件,解决网络内的计算机之间计算机名称解析问题,适用于没有部署DNS服务器的内网环境。
1205 0
|
存储 Linux 网络安全
puppet ssh模块
转载:http://blog.51cto.com/ywzhou/1577502 作用:通过SSH模块管理客户端的ssh远程服务,并用key认证方式替代密码认证方式,提高安全性; 本例分两阶段,首先是ssh的安装、配置及服务管理,然后是使用如何转换成key认证方式。
1593 0