教自己傀儡.
运用
Ubuntu 11.10
Puppet 2.7.1(直接来自apt)
在单个节点上运行一些测试脚本(在http://docs.puppetlabs.com/learning/manifests.html之后).
我制作了一个安装和启动apache2包的清单……一切都很好.
现在我要反过来,我制作一个清除apache2包的清单.这样就完成了,问题是puppet只删除了apache2包,而不是apache2带来的所有包(我认为apache2.2-bin是主要的)…所以apache2服务仍然安装并运行在系统上.
如果我用apt-get做这个,那么我会做一个“apt-get autoremove”但是我怎么能让puppet为我做这个呢?
不幸的是,使用内置资源类型没有好办法,只有两个不太好的选择.
package { 'apache2.2-common': ensure => purged,} package { 'apache2-utils': ensure => purged,} # etc ...
而’不正确’但更易于管理的方法是设置一个exec资源,以便在删除apache2包时为依赖包运行autoremove:
package { 'apache2': ensure => purged,} exec { 'autoremove': command => '/usr/bin/apt-get autoremove --purge -y',# We don't want this running every time the puppet agent runs,# so we'll set it to only run when the apache2 purge actually happens. # Note that this would not run on your node that already has the # apache2 package removed,since it won't trigger any more changes # to the package. refreshonly => true,subscribe => Package['apache2'],}
鉴于这两个选项,第二个选项肯定更具吸引力 – 能够尽可能坚持内置类型是很好的,但是当你删除具有大量依赖关系的包时,这是不切实际的.