Puppet模块(二):YUM模块及Yumrepo资源和Mount资源

作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。

1、服务端配置yum模块

(1)模块清单

[[email protected] ~]# tree /etc/puppet/modules/yum/
/etc/puppet/modules/yum/
├── files
│   ├── yum.conf
│   └── RPM-GPG-KEY-CentOS-6
├── manifests
│   ├── config.pp
│   ├── init.pp
│   ├── install.pp
│   └── params.pp
└── templates

说明:这里只针对centos 6.5版本测试,其他的可以此类推,需要注意的就是本地源的光盘加载问题(见测试环节)

(2)定义参数类

[[email protected] ~]# vi /etc/puppet/modules/yum/manifests/params.pp
class yum::params {
  case $operatingsystemrelease{
    6.5: {
      $yum_centos_descr = ‘centos base rpm packages‘   #本地仓库描述信息
      $yum_centos_baseurl = ‘file:///media/cdrom/‘     #IOS文件或光盘mount到本地的路径
      $yum_centos_pki = ‘file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6‘ #YUMREPO文件中指定PKI文件路径
      $yum_centos_pki_name = ‘/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6‘   #PKI文件路径,复制一份到puppet的modules中
      $yum_centos_pki_download = ‘puppet:///modules/yum/RPM-GPG-KEY-CentOS-6‘
      $yum_puppet_descr = ‘puppet rpm packages for centos‘    #puppet仓库描述信息
      $yum_puppet_baseurl = ‘http://yum.puppetlabs.com/el/6/products/$basearch‘   #puppet仓库路径
      $yum_163_descr = ‘163 rpm packages for centos‘          #163仓库描述信息
      $yum_163_baseurl = ‘http://mirrors.163.com/centos/$releasever/contrib/$basearch/‘  #163仓库路径
    }
    default: { 
      fail("Module yum is not supported on ${::operatingsystem}") #6.5版本以外的会提示不支持,如有5.5、5.4这样的版本可按参考6.5进行参数定义
    }
  }
}

    注意:PKI文件RPM-GPG-KEY-CentOS-6是光盘中的存在的,系统不一样,名称也不一样,需要确认。

    说明:变量$operatingsystemrelease是通过facter获取计算机的信息的,运行下面的命令可查看计算机相关信息:

[[email protected] ~]# facter | grep operatingsystemrelease
operatingsystemrelease => 6.5

(3)定义安装类

[[email protected] ~]# vi /etc/puppet/modules/yum/manifests/install.pp
class yum::install{
  #1、确保yum被安装
  package { ‘yum‘:
    ensure => installed,
  }
  #2、创建光盘挂载目录
  file { ‘/media/cdrom‘:
    ensure => directory,
    owner  => root,
    group  => root,
  }
  #3、确保光盘被挂载
#方法一:EXEC
#  exec { "mount_cdrom":
#    path    => "/usr/bin:/usr/sbin:/bin",
#    command => ‘/bin/mount /dev/cdrom /media/cdrom/‘,
#    creates => ‘/media/cdrom/RPM-GPG-KEY-CentOS-6‘,
#    require => File[‘/media/cdrom‘],
#  }
#方法二:MOUNT
  mount { ‘mount_cdrom‘:
    name     => "/media/cdrom",       #挂载到的目标目录
    ensure   => mounted,              #要求被挂载状态
    fstype   => "iso9660",            #光盘的文件类型,使用mount命令或cat /etc/fstab查看
    device   => "/dev/cdrom",         #光盘的设备,是个链接,实际指向/dev/sr0
    options  => "ro",                 #以只读方式挂载光盘
    atboot   => true,                 #允许开机启动时挂载上
    remounts => true,                 #允许重新挂载
    require  => File[‘/media/cdrom‘], #要求挂载目标目录存在
  }
  #4、安装源前先备份
  file { ‘/etc/yum.repos.d/bak‘:
    ensure  => directory,
    owner   => root,
    group   => root,
  }
  exec { "repos_bak":
    path    => "/usr/bin:/usr/sbin:/bin",
    command => ‘mv -f /etc/yum.repos.d/[^c]*.repo /etc/yum.repos.d/bak/‘,  #将不是小写c开头的repo文件强制移动到备份目录
    creates => ‘/etc/yum.repos.d/bak/CentOS-Base.repo‘,   #当备份目录存在这个文件时不再执行此资源
    require => File[‘/etc/yum.repos.d/bak‘],              #要求备份目录存在
  }
}

说明:新生成的repo文件都是小写c开头的,因此将不是c开头([^c]*)的repo文件移至bak,

原文件都是CentOS开头的,外加一个puppetlabs.repo,可以将[^c]*.repo改成CentOS*.repo,只将原文件备份。

(4)定义配置类

[[email protected] ~]# vi /etc/puppet/modules/yum/manifests/config.pp
class yum::config{
  include yum::params
  include yum::config_file,yum::config_key,yum::config_repo
}
#1、定义配置文件
class yum::config_file{
  file { ‘/etc/yum.conf‘:               #yum主配置文件yum.conf路径
    ensure  => present,                 #要求文件处于存在状态
    owner   => ‘root‘,                  #属主为root
    group   => ‘root‘,                  #属组为root
    mode    => ‘0644‘,                  #文件权限为644
    source  => ‘puppet:///modules/yum/yum.conf‘, #自动搜索yum模块下的files目录,因此省略/files
    require => Class[‘yum::install‘],   #要求在配置之前先安装yum软件包
  }
  file { ‘/etc/yum.repos.d/centos-base.repo‘:  #设置光盘repo的一些属性,文件名是yumrepo中的标题名定义的,必须一致
    ensure  => present,
    owner   => ‘root‘,
    group   => ‘root‘,
    mode    => ‘0644‘,
    require => Class[‘yum::config_repo‘],      #要求设置之前yumrepo资源centos-base必须存在
  }
  file { ‘/etc/yum.repos.d/centos-puppet.repo‘:
    ensure  => present,
    owner   => ‘root‘,
    group   => ‘root‘,
    mode    => ‘0644‘,
    require => Class[‘yum::config_repo‘], 
  }
  file { ‘/etc/yum.repos.d/centos-163.repo‘: 
    ensure  => present,
    owner   => ‘root‘,
    group   => ‘root‘,
    mode    => ‘0644‘,
    require => Class[‘yum::config_repo‘], 
  }
}
#2、定义pki证书文件
class yum::config_key{  #设置pki证书的一些属性及下载位置
  file { $yum::params::yum_centos_pki_name: #证书名称在参数类中定义
    ensure => present,
    owner  => ‘root‘,
    group  => ‘root‘,
    mode   => ‘0644‘,
    source => $yum::params::yum_centos_pki_download, #证书下载地址在参数类中定义
  }
}
#3、定义基本yum仓库、puppet仓库和163仓库
class yum::config_repo{  
  yumrepo { centos-base:                          #创建yumrepo资源cenos-base
    descr    => $yum::params::yum_centos_descr,   #设置描述信息
    baseurl  => $yum::params::yum_centos_baseurl, #设置yum源下载地址
    enabled  => 1,                                #激活yum源
    gpgcheck => 1,                                #设置要求通过pki校验
    gpgkey   => $yum::params::yum_centos_pki,     #设置pki文件的位置
    require  => Class[‘yum::config_key‘],         #要求pki文件必须存在
    priority => 1,                                #设置repo的优先级为1(越小越高)
  }
  yumrepo { centos-puppet:
    descr    => $yum::params::yum_puppet_descr,
    baseurl  => $yum::params::yum_puppet_baseurl,
    enabled  => 1,
    gpgcheck => 0,                                #不要求通过pki校验
    priority => 2,
  }
  yumrepo { centos-163:
    descr    => $yum::params::yum_163_descr,
    baseurl  => $yum::params::yum_163_baseurl,
    enabled  => 1,
    gpgcheck => 0,
    priority => 3,
  }
}

说明:创建了三个YUM源,都以centos(小写)开头的,客户端安装puppet时生成了puppetlabs.repo源,因此这里的centos-puppet源也可以省略。

(7)定义yum主类

[[email protected] ~]# vi /etc/puppet/modules/yum/manifests/init.pp
class yum {
  include yum::params,yum::install,yum::config
}

(8)定义节点文件,调用模块

[[email protected] ~]# vi /etc/puppet/manifests/centostest.pp
node "centostest.ewin.com" {
  include ntp, yum
}

(9)应用节点文件

[[email protected] ~]# vi /etc/puppet/manifests/site.pp
import "centostest.pp"

(10)复制文件

将以下两个文件从客户端复制一份到服务端/etc/puppet/modules/yum/files下

/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

/etc/yum.conf

注意在文件头部加上以***释,测试的时候方便分辨

### config  by  puppet ###

2、测试

(1)客户端执行测试

[[email protected] ~]# puppet agent --server puppet.ewin.com -test --noop
Info: Caching catalog for centostest.ewin.com
Info: Applying configuration version ‘1415332221‘
Notice: Finished catalog run in 1.09 seconds

(2)查看客户端日志

[[email protected] ~]# tailf /var/log/messages 
Nov  7 11:50:20 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/File[/media/cdrom]/ensure) created
Nov  7 11:50:20 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/Exec[mount_cdrom]/returns) executed successfully
Nov  7 11:50:22 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/File[/etc/yum.repos.d/bak]/ensure) created
Nov  7 11:50:22 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/Exec[repos_bak]/returns) executed successfully
Nov  7 11:50:23 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_key/File[/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6]/content) content changed ‘{md5}e8e57fd1a55dc5c6d82e60a444781b96‘ to ‘{md5}a27c559bf7660f101317ac3b41a7600b‘
Nov  7 11:50:23 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-base]/ensure) created
Nov  7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-puppet]/ensure) created
Nov  7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-163]/ensure) created
Nov  7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_file/File[/etc/yum.conf]/content) content changed ‘{md5}5d8b0bf30a8ee9d66a9cb2642186ac37‘ to ‘{md5}8c1fab4142147877a3f77f89eb8ccb7c‘
Nov  7 11:50:24 centostest puppet-agent[8809]: Finished catalog run in 4.27 seconds

结论:可看到cdrom目录创建、挂载命令执行成功、备份命令成功、同步了PKI文件和CON文件、创建了三个YUMREPO

(3)查看客户端挂载的光盘目录

[[email protected] ~]# ls /media/cdrom/
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6

结论:挂载成功,如果用的EXEC方法将会判断RPM-GPG-KEY-CentOS-6存在时不会再执行Exec,而且此文件是原文件,不是新建的空文件。

经测试umount /media/cdrom卸载光盘后会自动重启挂载上,甚至卸载再删除/media/cdrom目录,也会恢复,有兴趣的可以试试。

(4)查看YUM源备份

[[email protected] ~]# ls /etc/yum.repos.d/bak/
CentOS-Base.repo       CentOS-Media.repo   CentOS-Vault.repo
CentOS-Debuginfo.repo  puppetlabs.repo

(5)查看客户端同步的文件

[[email protected] ~]# cat /etc/yum.conf 
### config  by  puppet ###
[main]
...
[[email protected] ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
### config  by  puppet ###
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
...

结论:从文件头部注释信息可以确认文件同步成功

(6)查看YUM list

[[email protected] ~]# yum clean all
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: base puppetlabs-deps puppetlabs-products
Cleaning up Everything
Cleaning up list of fastest mirrors
[[email protected] ~]# yum list
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
centos-163                                               | 2.9 kB     00:00     
centos-163/primary_db                                    | 1.2 kB     00:00     
centos-base                                              | 4.0 kB     00:00 ... 
centos-base/primary_db                                   | 4.4 MB     00:00 ...
centos-puppet                                            | 2.5 kB     00:00     
centos-puppet/primary_db  13%  [=-            ]  5.9 B/s |  17 kB     --:-- ETA

结论:YUM三个仓库都能成功加载,通过yum clean all再yum list可观察。

[[email protected] ~]# yum list puppet
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
http://mirrors.163.com/centos/6/contrib/x86_64/repodata/repomd.xml: 
[Errno 12] Timeout on http://mirrors.163.com/centos/6/contrib/x86_64/repodata/repomd.xml: 
(28, ‘Operation too slow. Less than 1 bytes/sec transfered the last 30 seconds‘)
Trying other mirror.
Installed Packages
puppet.noarch                  3.7.1-1.el6                  @puppetlabs-products
Available Packages
puppet.noarch                  3.7.3-1.el6                  centos-puppet

结论:可以看到从163的源查找puppet超时,已安装的包是从@puppetlabs安装的,有效的包是在centos-puppet源中。

3、yum仓库资源

yumrepo { "repo163":      #YUM源文件.repo的文件名
  descr    => "163 repo", #仓库的描述
  baseurl  => "http://mirrors.163.com/centos/$releasever/contrib/$basearch/", #仓库的url
  gpgcheck => "0",        #是否检查仓库中的软件包GPG签名,可设置的值为0或者1.
  enabled  => "1",        #是否开启或者禁用仓库,可设置的值为1或者0.1为开启,0为禁用
}
{
  enablegroups    => ,  #是否可以使用yumgroup参数,如yumgroup list,yumgroup install等
exclude         => ,  #排除那些软件的安装与更新,支持shell通配符。
failovermethod  => ,  #可设置的值为priority,roundrobin.
gpgkey          => ,  #仓库的软件包签名,GPG密钥的URL。
include         => ,  #包含配置url.
includepkgs     => ,  #只有匹配的软件包才能安装或者更新。
keepalive       => ,  #设置http/1.1选项,可设置的为0或者1.
metadata_expire => ,  #元组数据的过期时间,单位时间为秒。
miirorlist      => ,  #仓库的镜像列表。
name            => ,  #仓库名字。
priority        => ,  #优先级,可设置的是从1-99.
protect         => ,  #启用或者禁用对这个仓库的保护。可设置的值为0或者1.
proxy           => ,  #设置代理
}

4、mount挂载资源

挂载共享文件夹

mount { "/mount":             #挂载的目标目录,等同于name参数
  device  => "192.168.0.1:/share/nfs",  #挂载的来源设备
  fstype  => "nfs",           #文件系统类型
  options => "_netdev,vers=3,tcp,rsize=8192,wsize=8192,noauto",  #其他选项
}

挂载samba

mount {"/media":
  ensure => mounted,
  device => "//172.22.2.89/public",
  fstype => cifs,
  options => "username=perofu,password=123456";
}

参数说明

mount { ‘mount_cdrom‘:
  name     => "/media/cdrom", #挂载到的目标目录
  ensure   => mounted, #要求被挂载状态
  fstype   => "iso9660", #光盘的文件类型
  device   => "/dev/cdrom", #光盘的设备,是个链接,指向/dev/sr0
  options  => "ro", #以只读方式挂载光盘
  atboot   => true, #允许开机启动时挂载上
  remounts => true, #允许重新挂载
  require  => File[‘/media/cdrom‘], #要求挂载目标目录存在
}

查看文件系统类型:

[[email protected] ~]# mount
/dev/mapper/vg_centostest-lv_root on / type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_centostest-lv_home on /home type ext4 (rw)
/dev/sr0 on /media/cdrom type iso9660 (ro)

发现以下报错,是因为没有加上options => "ro",因为光盘是只读的。

[mount_cdrom]) Could not evaluate: Execution of ‘/bin/mount /media/cdrom‘ returned 32: 
mount: block device /dev/sr0 is write-protected, mounting read-only
时间: 2024-11-10 16:02:51

Puppet模块(二):YUM模块及Yumrepo资源和Mount资源的相关文章

常用模块二---time--random--collections--json--pickle--shelve

常用模块二 ================= collections 模块 ================== ========= namedtuple 可以命名的元组 ============from collections import namedtuple Point=namedtuple('Point',['x','y']) p=Point(1,2)circle=namedtuple('Circle',['x','y','r'])c=circle(1,2,1)print(p.x)pr

常用模块二(configparser

阅读目录 常用模块二 hashlib模块 configparse模块 logging模块 常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过. 摘要算法之所以能指出数

python中几大模块二

python中几大模块二 sys模块 sys模块也是python种一个非常强大的模块,功能非常的多,这里我其实也没接触到几个,暂时记录一下目前常用的几个功能函数. sys.argv 这个函数的功能是在程序外部向程序内部传递参数 .例如: import sys print(sys.argv[:]) print(sys.argv[0]) print(sys.argv[1]) print(sys.argv[2]) print(sys.argv[3]) #外部调用解释器执行该文件 python test

Python 常用模块(1) -- collections模块,time模块,random模块,os模块,sys模块

主要内容: 一. 模块的简单认识 二. collections模块 三. time时间模块 四. random模块 五. os模块 六. sys模块 一. 模块的简单认识 模块: 模块就是把装有特定功能的代码进行归类的结果引入模块的方式: (1) import 模块 (2) from 位置 import 模块 二. collections模块 collections模块主要封装了一些关于集合类的相关操作. 如我们学过的iterable,iterator等等.除此以外, collections还提

puppet学习之四 编写模块

puppet学习之四 编写模块 这里不赘述编写的语法,只是简单记录下一个模块编写的简单流程 [[email protected] ~]# cd /etc/puppet/modules/ [[email protected] modules]# mkdir puppet [[email protected] modules]# cd puppet/ [[email protected] puppet]# mkdir files manifests templates #创建模块目录结构 [[ema

ansible批量部署模块(二)

回顾:Ansible: 无需客户端程序 只要有SSH 模块化 ansible帮助工具ansible-doc 模块名ansible-doc 模块名 -s 列出该模块的所有选项ansible-doc -l 列出所有模块 6.group组模块 - gid 设置组id = name 需要管理的组名 - state 执行状态,absent 删除 present 创建(默认) 例1:创建组名www,并设置gid为666 [[email protected] ~]# ansible oldboy -m gro

Day12:常用模块二(sys,logging,json)

一.sys模块 1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称 二.logging模块 2.1 函数式的简单配置 import logging logging.debug

06_模块(二)_正则

1 sys 进度条实例 import sys import time def view_bar(num, total): rate = float(num) / float(total) rate_num = int(rate * 100) r = '\r%d%%' % (rate_num, ) # \r从起始位置重新开始 sys.stdout.write(r) # 不换行输出 sys.stdout.flush() # 清空输出内容 if __name__ == '__main__': for

模块管理常规功能自定义系统的设计与实现(22--第二个模块的加入)

模块"市"的设计与加入 现在重复加入"省"模块的过程,来加入市的模块. 1.建立数据表City CREATE TABLE [dbo].[City]( [tf_cityId] [nvarchar](4) COLLATE Chinese_PRC_CI_AS NOT NULL, [tf_provinceId] [nvarchar](2) COLLATE Chinese_PRC_CI_AS NOT NULL, [tf_name] [nvarchar](50) COLLATE