微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ubuntu – 仅当资源存在于Puppet中时才依赖于资源

我有一个在节点上启用防火墙的类(在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

有没有办法要求资源,以便它首先执行,但如果它不存在,只需将当前资源放在一起?

我会在同一个清单中单独执行一个类:
class openssh::ufw {
  exec { "allow-openssh":
    command => "/usr/sbin/ufw allow OpenSSH",Exec["enable-firewall"],Package["openssh-server"],Service["ssh"]]
  }
}

当ssh和ufw都在那里时你要包括哪个,或者总是当ufw不在那里但是让openssh上课时它应该是bork.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐