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

[经验分享] Puppet扩展篇2-如何使用虚拟资源解决puppet冲突问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-10-20 09:17:03 | 显示全部楼层 |阅读模式
零基础学习Puppet自动化配置管理系列文档

虚拟资源是一种用来管理多种配置共同依赖同一资源的方法。如果多个类依赖同一个资源时则可避免写多个资源,也可以解决资源重定义的错误。 虚拟资源经常用于用户管理中,虚拟资源只会被声明一次,但可以运用一次或多次。

要使用虚拟资源是需要在资源声明开头加上字符“@”来使资源虚拟化。然后再使用下面两种方法之一来实例化虚拟资源:

    "飞船"语法<||>
    realize函数

1. 定义两个用户,puppet和root,并将其虚拟化

注意定义虚拟资源必须在全局作用域或者节点作用域中定义,简单的理解,以下目录中site.pp就是全局作用域,包含nodes目录(site.pp中import了nodes目录),在节点node下定义的虚拟资源属于节点作用域,其他模块中的都属于局部作用域。
1.1 在全局作用域中创建对应的pp文件

[iyunv@linuxmaster1poc testing]# tree manifests/
manifests/
├── nodes
│   ├── puppetclient.pp
│   ├── virtual_group.pp
│   └── virtual_user.pp
└── site.pp
1 directory, 4 files

1.2 创建虚拟用户puppet、root、xiaonuo

[iyunv@linuxmaster1poc testing]# vim manifests/nodes/virtual_user.pp
class alluser{
  include alluser::puppet,alluser::root
}
class alluser::puppet{
  @user { 'puppet':
    ensure => present,
    uid    => '52',
    gid    => '52',
    home   => '/var/lib/puppet',
    shell  => '/sbin/nologin',
  }
}
class alluser::root{
  @user { 'root':
    ensure => present,
    uid    => '0',
    gid    => '0',
    home   => '/root',
    shell  => '/bin/bash',
  }
}

class alluser::xiaonuo{
  @user { 'xiaonuo':
    ensure => present,
    uid    => '600',
    gid    => '600',
    home   => '/home/xiaonuo',
    shell  => '/sbin/nologin',
  }
}

1.3 创建虚拟组puppet、root和xiaonuo

[iyunv@linuxmaster1poc testing]# vim manifests/nodes/virtual_group.pp
class allgroup{
  include allgroup::puppet,allgroup::root
}
class allgroup::puppet{
  @group { 'puppet':
    ensure    => present,
    name      => 'puppet',
    gid       => '52',
    allowdupe => false,
    members   => 'puppet',
  }
}
class allgroup::root{
  @group { 'root':
    ensure    => present,
    name      => 'root',
    gid       => '0',
    allowdupe => false,
    members   => 'root',
  }
}
class allgroup::xiaonuo{
  @group { 'xiaonuo':
    ensure    => present,
    name      => 'xiaonuo',
    gid       => '600',
    allowdupe => false,
    members   => 'xiaonuo',
  }
}

2. 编写puppet模块,将虚拟资源用户puppet和组puppet实化
2.1 编写pupppet模块

[iyunv@linuxmaster1poc testing]# tree environment/modules/puppet
environment/modules/puppet
├── files
├── manifests
│   ├── config.pp
│   ├── init.pp
│   ├── install.pp
│   ├── params.pp
│   └── service.pp
├── README
└── templates
    ├── auth.conf.erb
    ├── namespaceauth.conf.erb
    └── puppet.conf.erb
3 directories, 9 files

2.2 编写puppet_linux57poc模块

[iyunv@linuxmaster1poc testing]# tree agents/modules/puppet_linux57poc/
agents/modules/puppet_linux57poc/
├── files
├── manifests
│   └── init.pp
└── templates
    ├── facts.txt.erb
    └── motd.erb
3 directories, 3 files

2.3 实例化虚拟资源

2.3.1 在puppet模块中实例化

[iyunv@linuxmaster1poc testing]# vim environment/modules/puppet/manifests/config.pp
class puppet::config{
  include puppet::params
  include puppet::puppet_config,puppet::namespaceauth_config,puppet::auth_config,puppet::user,puppet::group
  include alluser,allgroup #必须将节点作用域中的类包含进来
}
class puppet::puppet_config{
  file { '/etc/puppet/puppet.conf':
    ensure  => present,
    content => template('puppet/puppet.conf.erb'),
    owner   => 'puppet',
    group   => 'puppet',
    mode    => '0644',
    backup  => main,
    require => Class['puppet::install','puppet::user','puppet::group'],
    notify  => Class['puppet::service'],
  }
}
class puppet::auth_config{
  file { '/etc/puppet/auth.conf':
    ensure  => present,
    content => template('puppet/auth.conf.erb'),
    owner   => 'puppet',
    group   => 'puppet',
    mode    => '0644',
    backup  => main,
    require => Class['puppet::install','puppet::user','puppet::group'],
    notify  => Class['puppet::service'],
  }
}
class puppet::namespaceauth_config{
  file { '/etc/puppet/namespaceauth.conf':
    ensure  => present,
    content => template('puppet/namespaceauth.conf.erb'),
    owner   => 'puppet',
    group   => 'puppet',
    mode    => '0644',
    backup  => main,
    require => Class['puppet::install','puppet::user','puppet::group'],
    notify  => Class['puppet::service'],
  }
}
class puppet::user{ #使用飞船语法实化用户puppet资源
#  realize User['puppet']
  User <| title == 'puppet' |>
}
class puppet::group{ #使用realize函数实化组puppet资源
  realize Group['puppet']
#  Group <| title == 'puppet' |>
}

2.3.2 在puppet_linux57poc模块中实例化

[iyunv@linuxmaster1poc testing]# cat agents/modules/puppet_linux57poc/manifests/init.pp
class puppet_linux57poc{
  include puppet_linux57poc::motd_install,puppet_linux57poc::motd_config,puppet_linux57poc::facts,puppet_linux57poc::user,puppet_linux57poc::group
  include alluser,allgroup #必须将节点作用域中的类包含进来
}
class puppet_linux57poc::motd_install{
  package{ setup:
    ensure => present,
  }
}
class puppet_linux57poc::motd_config{
  file{ "/etc/motd":
    owner   => "xiaonuo",
    group   => "root",
    mode    => 0440,
    content => template("puppet_linux57poc/motd.erb"),
    backup  => 'main',
    require => Class['puppet_linux57poc::motd_install','puppet_linux57poc::user','puppet_linux57poc::group']
  }
}
class puppet_linux57poc::facts{
  file{ "/etc/mcollective/facts.txt":
    owner   => "root",
    group   => "root",
    mode    => 0400,
    content => template("puppet_linux57poc/facts.txt.erb"),
    backup  => 'main',
    require => Class['puppet_linux57poc::motd_install','puppet_linux57poc::user','puppet_linux57poc::group']
  }
}
class puppet_linux57poc::user{  #使用realize函数实化用户xiaonuo和root资源
  realize( User['xiaonuo'],
           User['root'] )
}
class puppet_linux57poc::group{ #使用realize函数实化组xiaonuo和root资源
  realize( Group['xiaonuo'],
           Group['root'] )
}

3. 测试
3.1 测试puppet模块(略)
3.2 测试puppet_linux57poc模块

3.2.1 查看当前系统是否有xiaonuo用户和组

[iyunv@linux57poc puppet]# id xiaonuo
id: xiaonuo: No such user
[iyunv@linux57poc puppet]# cat /etc/group | grep xiaonuo
[iyunv@linux57poc puppet]#
[iyunv@linux57poc puppet]# ll /etc/motd
-rwxrwxrwx 1 puppet puppet 313 Jan  2 06:17 /etc/motd

3.2.2 同步puppetmaster

[iyunv@linux57poc puppet]# puppet agent -t --environment=testing
info: Retrieving plugin
info: Loading facts in /var/lib/puppet/lib/facter/fact_apply.rb
info: Caching catalog for puppet_linux57poc.dev.shanghaigm.com
info: Applying configuration version '1389555288'
notice: /Stage[main]/Allservice::Lm_sensors_service/Service[lm_sensors]/ensure: ensure changed 'running' to 'stopped'
notice: /Group[xiaonuo]/ensure: created
notice: /Stage[main]/Alluser::Xiaonuo/User[xiaonuo]/ensure: created
...
info: FileBucket adding {md5}b2090646c444c5ddf1533749743ebd71
info: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]: Filebucketed /etc/mcollective/facts.yaml to main with sum b2090646c444c5ddf1533749743ebd71
notice: /Stage[main]/Sysctl::Exec/Exec[sysctl -p >/dev/null &]/returns: executed successfully
notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/owner: owner changed 'puppet' to 'xiaonuo'
notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/group: group changed 'puppet' to 'root'
notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/mode: mode changed '0777' to '0440'
notice: /Stage[main]/Allservice::Bluetooth_service/Service[bluetooth]/ensure: ensure changed 'running' to 'stopped'
notice: Finished catalog run in 4.54 seconds

3.2.3 验证结果是否正确

[iyunv@linux57poc puppet]# id xiaonuo
uid=600(xiaonuo) gid=600(xiaonuo) groups=600(xiaonuo)
[iyunv@linux57poc puppet]# cat /etc/group | grep xiaonuo
xiaonuo:x:600:
[iyunv@linux57poc puppet]# ll /etc/motd
-r--r----- 1 xiaonuo root 313 Jan  2 06:17 /etc/motd
[iyunv@linux57poc puppet]#



运维网声明 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-26237-1-1.html 上篇帖子: Puppet扩展篇1-自定义fact结合ENC(hirea)的应用实践 下篇帖子: Puppet扩展篇3-如何扩展master的SSL传输性能(apache) 如何 资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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