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.

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...