设为首页 收藏本站
查看: 1545|回复: 0

[经验分享] Puppet基础篇8-编写第二个完整测试模块yum

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-21 15:54:14 | 显示全部楼层 |阅读模式
上一节讲解了puppet基础环境模块puppet,除此之外影响puppet基础环境的还有一个模块叫yum源,当然这个是相对于RedHat系统而言的,如果是SLES系统,就要配置zypper源了,其它Linux系统也是如此。那么配置yum源需要用到哪些资源呢?
之前写puppet模块的时候用到了file资源、service资源、package资源,那么这三个资源是否能满足yum模块的配置呢,答案是肯定的。然而官方给出了专用的yumrepo资源,管理可以精确到repo里面的每一行,使用还是非常方便的,接下来,我们使用官方给出的yumrepo资源来配置yum模块。
注:上一节教会大家如何一步步创建一个完整模块,为了避免重复,这一节就直接贴配置了。
一、配置之前需要考虑的问题:
1、yum包需要被安装;
2、yum主配置文件yum.conf需要配置正确;
3、每台主机至少有两个repo源,一个指向本地的ISO源,一个指向自定义的puppet源;
4、不同系统版本的repo源中的部分参数略有不同,比如baseurl。
二、创建yum模块
1、创建yum模块目录结构
[iyunv@puppetmaster modules]# tree yum
yum
├── files
├── manifests
└── templates
3 directories, 0 files
2、创建package资源
[iyunv@puppetmaster manifests]# vim install.pp
class yum::install{
  package { 'yum':
    ensure => installed, #要求yum这个包处于安装状态
  }
}
3、创建params.pp
根据操作系统版本定义repo文件中的各项条目
eg.
[iyunv@agent1 ~]# facter | grep operatingsystemrelease   系统版本fact
operatingsystemrelease => 5.7
由于RedHat存在多个版本,不同版本yum源的指向不同,对应的pki认证文件也不同,因此应当设置一些变量,然后进行引用。以下只定义了系统版本为5.7、5.8、和6.4的变量,如果有其它版本效仿即可。
[iyunv@puppetmaster manifests]# vim params.pp
class yum::params {
  case $operatingsystemrelease{
    5.7: {
      $yum_redhat_descr = 'rhel base rpm packages'  #定义redhat光盘源的描述信息
      $yum_puppet_descr = 'puppet rpm packages for rhel' #定义puppet源的描述信息
      $yum_redhat_pki = 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5' #定义redhat光盘源的pki认证文件位置
      $yum_redhat_baseurl = 'file:///media/cdrom/Server'  #定义redhat光盘源baseurl的下载位置
      $yum_puppet_baseurl = 'ftp://puppetmaster.yunvn.com/RHEL5U7' #定义puppet源baseurl的下载位置
      $yum_redhat_pki_name = '/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5' #定义puppet源pki认证文件位置
      $yum_redhat_pki_download = 'puppet:///modules/yum/PM-GPG-KEY/RPM-GPG-KEY-redhat-release-rhel5' #定义pki文件的服务器下载地址
    }
    5.8: {
      $yum_redhat_descr = 'rhel base rpm packages'
      $yum_puppet_descr = 'puppet rpm packages for rhel'
      $yum_redhat_pki = 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5'
      $yum_redhat_baseurl = 'file:///media/cdrom/Server'
      $yum_puppet_baseurl = 'ftp://puppetmaster.yunvn.com/RHEL5U8'
      $yum_redhat_pki_name = '/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5'
      $yum_redhat_pki_download = 'puppet:///modules/yum/PM-GPG-KEY/RPM-GPG-KEY-redhat-release-rhel5'
    }
    6.4: {
      $yum_redhat_descr = 'rhel base rpm packages'
      $yum_puppet_descr = 'puppet rpm packages for rhel'
      $yum_redhat_pki = 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel6'
      $yum_redhat_baseurl = 'file:///media/cdrom'
      $yum_puppet_baseurl = 'ftp://puppetmaster.yunvn.com/RHEL6U4'
      $yum_redhat_pki_name = '/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel6'
      $yum_redhat_pki_download = 'puppet:///modules/yum/PM-GPG-KEY/RPM-GPG-KEY-redhat-release-rhel6'
    }
   default: {  #定义如果没有以上版本的系统,直接报以下错误,同时也是为了方便调试
      fail("Module yum is not supported on ${::operatingsystem}")
    }
  }
}
4、创建config.pp文件
config.pp文件用于管理yum主配置文件yum.conf,repo文件的属性,pki文件的属性及下载地址和yumrepo源
[iyunv@puppetmaster manifests]# vim config.pp
class yum::config{
  include yum::params  #引用class yum::params
  include yum::config_file,yum::config_key,yum::config_repo
}
class yum::config_file{
  file { '/etc/yum.conf':  #创建file资源管理yum主配置文件yum.conf
    ensure  => present, #要求文件处于存在状态
    owner   => 'root',  #属主为root
    group   => 'root',  #属组为root
    mode    => '0644',  #文件权限为644
    source  => 'puppet:///modules/yum/etc/yum.conf', #要求从puppetmaster服务器指定目录去下载
    require => Class['yum::install'], #要求在配置之前先安装yum软件包
  }
  file { '/etc/yum.repos.d/rhel-base.repo':  #设置光盘repo的一些属性
    ensure  => present,
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    require => Class['yum::config_repo'], #要求设置之前yumrepo资源rhel-base必须存在
  }
  file { '/etc/yum.repos.d/rhel-puppet.repo':  #设置puppet repo的一些属性
    ensure  => present,
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    require => Class['yum::config_repo'],  #要求设置之前yumrepo资源puppet必须存在
  }
}
class yum::config_key{  #设置pki证书的一些属性及下载位置
  file { $yum::params::yum_redhat_pki_name:
    ensure => present,
    owner  => 'root',
    group  => 'root',
    mode   => '0644',
    source => $yum::params::yum_redhat_pki_download,
  }
}
class yum::config_repo{  
  yumrepo { rhel-base: #创建yumrepo资源rhel-base
    descr    => $yum::params::yum_redhat_descr, #设置描述信息
    baseurl  => $yum::params::yum_redhat_baseurl, #设置yum源下载地址
    enabled  => 1, #激活yum源
    gpgcheck => 1, #设置要求通过pki校验
    gpgkey   => $yum::params::yum_redhat_pki, #设置pki文件的下载位置
    require  => Class['yum::config_key'], #要求这个文件必须存在
    priority => 1, #设置repo的优先级为1(数字越小优先级越高)
  }
  yumrepo { rhel-puppet:
    descr    => $yum::params::yum_puppet_descr,
    baseurl  => $yum::params::yum_puppet_baseurl,
    enabled  => 1,
    gpgcheck => 0,
    priority => 2,
  }
}
5、创建init.pp文件
由于params.pp文件中设置的变量名称引用太长,这里可以在init.pp中将变量名简化,方便引用。
class yum(
  $yum_redhat_descr        = $yum::params::yum_redhat_descr, #
  $yum_puppet_descr        = $yum::params::yum_puppet_descr,
  $yum_redhat_pki          = $yum::params::yum_redhat_pki,
  $yum_redhat_baseurl      = $yum::params::yum_redhat_baseurl,
  $yum_puppet_baseurl      = $yum::params::yum_puppet_baseurl,
  $yum_redhat_pki_name     = $yum::params::yum_redhat_pki_name,
  $yum_redhat_pki_download = $yum::params::yum_redhat_pki_download
  ) inherits yum::params {   #设置这些变量依赖于yum::params类
  include yum::config,yum::install  #包含所有子class
}
因此、上面定义的class yum::config_key和yum::config_repo可以写成以下格式
class yum::config_key{  #设置pki证书的一些属性及下载位置
  file { $yum_redhat_pki_name:
    ensure => present,
    owner  => 'root',
    group  => 'root',
    mode   => '0644',
    source => $yum_redhat_pki_download,
  }
}

class yum::config_repo{  
  yumrepo { rhel-base: #创建yumrepo资源rhel-base
    descr    => $yum_redhat_descr, #设置描述信息
    baseurl  => $yum_redhat_baseurl, #设置yum源下载地址
    enabled  => 1, #激活yum源
    gpgcheck => 1, #设置要求通过pki校验
    gpgkey   => $yum_redhat_pki, #设置pki文件的下载位置
    require  => Class['yum::config_key'], #要求这个文件必须存在
    priority => 1, #设置repo的优先级为1(数字越小优先级越高)
  }
  yumrepo { rhel-puppet:
    descr    => $yum_puppet_descr,
    baseurl  => $yum_puppet_baseurl,
    enabled  => 1,
    gpgcheck => 0,
    priority => 2,
  }
}
6、创建puppet.conf和pki文件
[iyunv@puppetmaster yum]# tree files
files
├── etc
│   └── yum.conf  #可以从节点/etc/目录下copy一个yum.conf文件进行配置管理
└── PM-GPG-KEY
    ├── RPM-GPG-KEY-puppet-release  #自己做一个pki文件,如何做,请google
    ├── RPM-GPG-KEY-redhat-release-rhel5  #在RHEL5系统/etc/pki/rpm-gpg/目录下面有对应的pki文件,将其命个别名即可
    └── RPM-GPG-KEY-redhat-release-rhel6  #在RHEL6系统/etc/pki/rpm-gpg/目录下面有对应的pki文件,将其命个别名即可
2 directories, 4 files
7、应用到节点上
[iyunv@puppetmaster modules]# vim /etc/puppet/manifests/site.pp
$puppetmaster = 'puppetmaster.yunvn.com'
class environments{
  include motd,puppet,yum
}
node default{
   include environments
}
8、在agent1上进行测试
[iyunv@agent1 yum.repos.d]# mv * /tmp/  #将所有的repo文件移动到/tmp目录下
[iyunv@agent1 yum.repos.d]# puppet agent -t #运行一次puppet更新动作,可以通过以下日志看出更新
info: Caching catalog for agent1_cert.yunvn.com
info: Applying configuration version '1395696487'
info: create new repo rhel-puppet in file /etc/yum.repos.d/rhel-puppet.repo
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-puppet]/descr: descr changed '' to 'puppet rpm packages for rhel'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-puppet]/baseurl: baseurl changed '' to 'ftp://puppetmaster.yunvn.com/RHEL5U7'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-puppet]/enabled: enabled changed '' to '1'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-puppet]/gpgcheck: gpgcheck changed '' to '0'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-puppet]/priority: priority changed '' to '2'
info: changing mode of /etc/yum.repos.d/rhel-puppet.repo from 600 to 644
info: create new repo rhel-base in file /etc/yum.repos.d/rhel-base.repo
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/descr: descr changed '' to 'rhel base rpm packages'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/baseurl: baseurl changed '' to 'file:///media/cdrom/Server'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/enabled: enabled changed '' to '1'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/gpgcheck: gpgcheck changed '' to '1'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/gpgkey: gpgkey changed '' to 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5'
notice: /Stage[main]/Yum::Config_repo/Yumrepo[rhel-base]/priority: priority changed '' to '1'
info: changing mode of /etc/yum.repos.d/rhel-base.repo from 600 to 644
notice: Finished catalog run in 0.51 seconds
[iyunv@agent1 yum.repos.d]# ls
rhel-base.repo  rhel-puppet.repo
[iyunv@agent1 yum.repos.d]# cat rhel-base.repo  #查看更新的光盘源文件
[rhel-base]
name=rhel base rpm packages
baseurl=file:///media/cdrom/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release-rhel5
priority=1
[iyunv@agent1 yum.repos.d]# cat rhel-puppet.repo #插件更新的puppet源文件
[rhel-puppet]
name=puppet rpm packages for rhel
baseurl=ftp://puppetmaster.yunvn.com/RHEL5U7
enabled=1
gpgcheck=0
priority=2


运维网声明 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-18043-1-1.html 上篇帖子: Puppet基础篇7-编写第一个完整测试模块puppet 下篇帖子: puppet故障分析Host is missing hostname and/or domain
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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