Puppet扩展篇2-如何使用虚拟资源解决puppet冲突问题

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

  • “飞船”语法<||>
  • realize函数

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


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

  1. class alluser{
  2. include alluser::puppet,alluser::root
  3. }
  4. class alluser::puppet{
  5. @user { 'puppet':
  6. ensure => present,
  7. uid => '52',
  8. gid => '52',
  9. home => '/var/lib/puppet',
  10. shell => '/sbin/nologin',
  11. }
  12. }
  13. class alluser::root{
  14. @user { 'root':
  15. ensure => present,
  16. uid => '0',
  17. gid => '0',
  18. home => '/root',
  19. shell => '/bin/bash',
  20. }
  21. }
  22. class alluser::xiaonuo{
  23. @user { 'xiaonuo':
  24. ensure => present,
  25. uid => '600',
  26. gid => '600',
  27. home => '/home/xiaonuo',
  28. shell => '/sbin/nologin',
  29. }
  30. }

  1. [root@linuxmaster1poc testing]# vim manifests/nodes/virtual_group.pp
  2. class allgroup{
  3. include allgroup::puppet,allgroup::root
  4. }
  5. class allgroup::puppet{
  6. @group { 'puppet':
  7. ensure => present,
  8. gid => '52',
  9. allowdupe => false,
  10. members => 'puppet',
  11. }
  12. }
  13. class allgroup::root{
  14. @group { 'root':
  15. ensure => present,
  16. gid => '0',
  17. allowdupe => false,
  18. members => 'root',
  19. }
  20. }
  21. class allgroup::xiaonuo{
  22. @group { 'xiaonuo':
  23. ensure => present,
  24. name => 'xiaonuo',
  25. gid => '600',
  26. allowdupe => false,
  27. members => 'xiaonuo',
  28. }
  29. }

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

2.1 编写pupppet模块

  1. [root@linuxmaster1poc testing]# tree agents/modules/puppet_linux57poc/
  2. agents/modules/puppet_linux57poc/
  3. ├── files
  4. ├── manifests
  5. └── init.pp
  6. └── templates
  7. ├── facts.txt.erb
  8. └── motd.erb
  9. 3 directories, 3 files

2.3 实例化虚拟资源

2.3.1 在puppet模块中实例化

  1. [root@linuxmaster1poc testing]# vim environment/modules/puppet/manifests/config.pp
  2. class puppet::config{
  3. include puppet::params
  4. include puppet::puppet_config,puppet::namespaceauth_config,puppet::auth_config,puppet::user,puppet::group
  5. include alluser,allgroup #必须将节点作用域中的类包含进来
  6. }
  7. class puppet::puppet_config{
  8. file { '/etc/puppet/puppet.conf':
  9. ensure => present,
  10. content => template('puppet/puppet.conf.erb'),
  11. owner => 'puppet',
  12. group => 'puppet',
  13. mode => '0644',
  14. backup => main,
  15. require => Class['puppet::install','puppet::user','puppet::group'],
  16. notify => Class['puppet::service'],
  17. }
  18. }
  19. file { '/etc/puppet/auth.conf':
  20. ensure => present,
  21. content => template('puppet/auth.conf.erb'),
  22. owner => 'puppet',
  23. group => 'puppet',
  24. backup => main,
  25. require => Class['puppet::install','puppet::user','puppet::group'],
  26. notify => Class['puppet::service'],
  27. }
  28. }
  29. class puppet::namespaceauth_config{
  30. file { '/etc/puppet/namespaceauth.conf':
  31. ensure => present,
  32. content => template('puppet/namespaceauth.conf.erb'),
  33. owner => 'puppet',
  34. group => 'puppet',
  35. mode => '0644',
  36. backup => main,
  37. require => Class['puppet::install','puppet::user','puppet::group'],
  38. notify => Class['puppet::service'],
  39. }
  40. }
  41. class puppet::user{ #使用飞船语法实化用户puppet资源
  42. # realize User['puppet']
  43. User <| title == 'puppet' |>
  44. }
  45. class puppet::group{ #使用realize函数实化组puppet资源
  46. realize Group['puppet']
  47. # Group <| title == 'puppet' |>
  48. }

3. 测试

3.2 测试puppet_linux57poc模块

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

  1. [root@linux57poc puppet]# id xiaonuo
  2. id: xiaonuo: No such user
  3. [root@linux57poc puppet]# cat /etc/group | grep xiaonuo
  4. [root@linux57poc puppet]#
  5. [root@linux57poc puppet]# ll /etc/motd
  6. -rwxrwxrwx 1 puppet puppet 313 Jan 2 06:17 /etc/motd
  1. [root@linux57poc puppet]# puppet agent -t --environment=testing
  2. info: Retrieving plugin
  3. info: Loading facts in /var/lib/puppet/lib/facter/fact_apply.rb
  4. info: Caching catalog for puppet_linux57poc.dev.shanghaigm.com
  5. info: Applying configuration version '1389555288'
  6. notice: /Stage[main]/Allservice::Lm_sensors_service/Service[lm_sensors]/ensure: ensure changed 'running' to 'stopped'
  7. notice: /Group[xiaonuo]/ensure: created
  8. notice: /Stage[main]/Alluser::Xiaonuo/User[xiaonuo]/ensure: created
  9. ...
  10. info: FileBucket adding {md5}b2090646c444c5ddf1533749743ebd71
  11. info: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]: Filebucketed /etc/mcollective/facts.yaml to main with sum b2090646c444c5ddf1533749743ebd71
  12. notice: /Stage[main]/Sysctl::Exec/Exec[sysctl -p >/dev/null &]/returns: executed successfully
  13. notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/owner: owner changed 'puppet' to 'xiaonuo'
  14. notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/group: group changed 'puppet' to 'root'
  15. notice: /Stage[main]/Puppet_linux57poc::Motd_config/File[/etc/motd]/mode: mode changed '0777' to '0440'
  16. notice: Finished catalog run in 4.54 seconds

3.2.3 验证结果是否正确