设为首页 收藏本站
查看: 1577|回复: 1

[经验分享] puppet完整模块实例分步解读

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-27 10:42:46 | 显示全部楼层 |阅读模式
    本文示例针对puppet自身模块,详细解读模块的结构及语法应用,通过本例的学习,可以掌握puppet模块应用的技能,为自动化应用打下坚实基础。


下面就以agent为例分步测试



1  创建puppet模块目录结构


[iyunv@master ~]# cd /etc/puppet/modules/                        #进入模块主目录
[iyunv@master modules]#  mkdir puppet                               #创建puppet模块主目录
[iyunv@master modules]#  cd puppet
[iyunv@master puppet]#  mkdir files manifests templates     #创建模块目录结构
[iyunv@master puppet]#  tree ../puppet
../puppet
├── files  #存放下载的文件
├── manifests  #存放puppet配置
└── templates  #存放配置模板,方便pp文件引用


2  创建模块puppet配置文件



[iyunv@master puppet]# cd manifests
[iyunv@master manifests]# touch init.pp config.pp install.pp params.pp service.pp
[iyunv@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
[iyunv@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
[iyunv@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,

    }

}
也可以写成下面格式
[iyunv@master manifests]# vim install.pp
class puppet::install{  #一个类包含两个资源
  package { 'puppet':
    ensure => installed,
  }
  package { 'facter':
    ensure => installed,
  }
}

具有判断版本的写法
[iyunv@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上
[iyunv@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
}

所有节点都使用相同的模块,也可以是以下写法
[iyunv@master ~]# vim /etc/puppet/manifests/site.pp
$master = 'master.puppet.com'
class environments{
  include motd,puppet
}
node default{
   include environments
}

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



3.4 编写config配置


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

[iyunv@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变量,变量的内容会根据节点系统的不同而变化。
[iyunv@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

[iyunv@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文件
[iyunv@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文件,增加通知服务重启功能
[iyunv@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中
[iyunv@master manifests]# vim init.pp
class puppet{
  include puppet::install,puppet::config,puppet::service
}



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









运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347848-1-1.html 上篇帖子: centos 7下安装配置puppet 下篇帖子: puppet一键部署lnmt
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表