我有一个在节点上启用防火墙的类(在Ubuntu中使用ufw):
class ufw { package { ["ufw"]: ensure => latest } exec { "enable-firewall": command => "/usr/bin/yes | /usr/sbin/ufw enable",unless => "/usr/sbin/ufw status | grep \"Status: active\"",require => [Package["ufw"]] } }
这很好.在我包含该类的节点上,启用了防火墙.
然后我有另一个类,用于启用OpenSSH:
class openssh { package { "openssh-server": ensure => latest } service { ssh: enable => true,ensure => running,require => [Package["openssh-server"]] } exec { "allow-openssh": command => "/usr/sbin/ufw allow OpenSSH",unless => "/usr/sbin/ufw status | grep \"OpenSSH.*ALLOW.*Anywhere\\|Status: inactive\"",require => [Package["ufw"],Exec["enable-firewall"]] } }
正如您所看到的,它不仅可以启用OpenSSH,还可以为其打开防火墙.问题是当OpenSSH用于没有防火墙的服务器时.在那里我得到:
warning: Configuration could not be
instantiated: Could not find
dependency Package[ufw] for
Exec[allow-openssh] at
/etc/puppet/manifests/classes/openssh.pp:19;
using cached catalog
有没有办法要求资源,以便它首先执行,但如果它不存在,只需将当前资源放在一起?
我会在同一个清单中单独执行一个类:
原文链接:https://www.f2er.com/ubuntu/348027.htmlclass openssh::ufw { exec { "allow-openssh": command => "/usr/sbin/ufw allow OpenSSH",Exec["enable-firewall"],Package["openssh-server"],Service["ssh"]] } }
当ssh和ufw都在那里时你要包括哪个,或者总是当ufw不在那里但是让openssh上课时它应该是bork.