puppet:如果“另一个”包不是';t安装

puppet:如果“另一个”包不是';t安装,puppet,Puppet,oracle许可证变更后,我们将在树莓上使用OpenJDK。也就是说,只有我们现在正在装备的。根据已经使用的oracle许可证,许可证保持有效,因此我们不必从现有设备中删除oracle jdk。而且,坚持“绝不碰正在运行的系统”(更不用说一百个),我们宁愿不碰 但是,如果oracle软件包尚未安装,我似乎无法让puppet只安装openjdk软件包。由于包资源中没有相应的属性,因此我尝试使用mock exec实现一些功能,如下所示: exec { 'checking java install

oracle许可证变更后,我们将在树莓上使用OpenJDK。也就是说,只有我们现在正在装备的。根据已经使用的oracle许可证,许可证保持有效,因此我们不必从现有设备中删除oracle jdk。而且,坚持“绝不碰正在运行的系统”(更不用说一百个),我们宁愿不碰

但是,如果oracle软件包尚未安装,我似乎无法让puppet只安装openjdk软件包。由于包资源中没有相应的属性,因此我尝试使用mock exec实现一些功能,如下所示:

  exec { 'checking java installation':
    command => '/bin/echo no existing java installation found',
    creates => '/usr/bin/java'
  }
  ~> package { 'java':
    name => 'openjdk-8-jdk',
  }
其思想是exec不会执行,因为指向java可执行文件的链接已经存在,因此链接的包资源不会刷新

但是,虽然exec不执行,但包资源仍然执行。我也尝试过订阅(如果我理解正确的话,基本上应该是一样的),同样的结果


那么如何防止包资源运行?

包资源不可刷新。您可以通过自定义事实来检查系统上是否存在java,从而实现您的目标。方便的是,关于如何使用自定义事实检查系统上是否存在某些内容,然后应用给定的资源,有很多答案,所以快速搜索一下,您应该会找到很多帮助。马特说。另外,请注意,
~>
通知
在任何情况下都不表示仅当目标资源接收到事件时才应用该资源。它们表示只有在接收到事件时才会刷新它(无论这对资源类型是否有任何影响)。声明资源表示应该应用它。
资源不可刷新。您可以通过自定义事实来检查系统上是否存在java,从而实现您的目标。方便的是,关于如何使用自定义事实检查系统上是否存在某些内容,然后应用给定的资源,有很多答案,所以快速搜索一下,您应该会找到很多帮助。马特说。另外,请注意,
~>
通知
在任何情况下都不表示仅当目标资源接收到事件时才应用该资源。它们表示只有在接收到事件时才会刷新它(无论这对资源类型是否有任何影响)。声明资源表示应该应用它。