在 Puppet 中包含定义的资源类型

Containing a defined resource type in Puppet

我正在尝试创建先于其他资源的已定义资源类型 (::apt::ppa) 的实例。我正在使用 PuppetLabs Apt Module

通过模块添加新存储库时,定义的类型包含一个 exec statement 通知 apt::update 以便可以正确安装任何可能需要的包。但是,当我 运行 下面的代码时,通知会在我尝试安装 Java 后安排,从而导致 Java 安装失败。我试过在 apt::ppa 声明周围放置锚点,但这无济于事。我还能做什么?

class rap::java(
  $version = '7',
) {
  $package = "oracle-java${version}-installer"

  apt::ppa { 'ppa:webupd8team/java': } ->
  exec { 'accept-java-license':
    command => "/bin/echo ${package} shared/accepted-oracle-license-v1-1 select true | /usr/bin/sudo /usr/bin/debconf-set-selections",
    unless  => "/usr/bin/debconf-show ${package} | grep 'shared/accepted-oracle-license-v1-1: true'",
  } ->
  class { '::java':
    package      => $package,
    distribution => 'oracle-jre',
  }

  file_line { 'java_environment':
    path => '/etc/environment',
    line => "JAVA_HOME=\"/usr/lib/jvm/java-${version}-oracle\"",
  }
}

我认为问题是您需要在 class 中包含 apt class 才能正确排序。

这对我来说适用于新的 Precise 盒子:

class rap::java(
  $version = '7',
) {
  $package = "oracle-java${version}-installer"

  include apt

  apt::ppa { 'ppa:webupd8team/java':
     package_manage => true,
  }

  exec { 'accept-java-license':
    command => "/bin/echo ${package} shared/accepted-oracle-license-v1-1 select true | /usr/bin/sudo /usr/bin/debconf-set-selections",
    unless  => "/usr/bin/debconf-show ${package} | grep 'shared/accepted-oracle-license-v1-1: true'",
  }

  class { '::java':
    package      => $package,
    distribution => 'oracle-jre',
    require => [
      Apt::Ppa['ppa:webupd8team/java'],
      Exec["accept-java-license"],
    ]
  }

  file_line { 'java_environment':
    path => '/etc/environment',
    line => "JAVA_HOME=\"/usr/lib/jvm/java-${version}-oracle\"",
  }
}

运行 的日志:

Notice: Compiled catalog for precise64 in environment production in 0.78 seconds
Notice: /Stage[main]/Apt/File[preferences]/ensure: created
Notice: /Stage[main]/Rap::Java/Exec[accept-java-license]/returns: executed successfully
Notice: /Stage[main]/Rap::Java/File_line[java_environment]/ensure: created
Notice: /Stage[main]/Apt/Apt::Setting[conf-update-stamp]/File[/etc/apt/apt.conf.d/15update-stamp]/ensure: defined content as '{md5}0962d70c4ec78bbfa6f3544ae0c41974'
Notice: /Stage[main]/Rap::Java/Apt::Ppa[ppa:webupd8team/java]/Package[python-software-properties]/ensure: created
Notice: /Stage[main]/Rap::Java/Apt::Ppa[ppa:webupd8team/java]/Exec[add-apt-repository-ppa:webupd8team/java]/returns: executed successfully
Notice: /Stage[main]/Apt::Update/Exec[apt_update]: Triggered 'refresh' from 1 events
Notice: /Stage[main]/Java/Package[java-common]/ensure: created
Notice: /Stage[main]/Java/Package[java]/ensure: created
Notice: Applied catalog in 39.58 seconds

为了进一步扩展问题,通常阻碍 运行 标准设置的事物通常会移至 运行 阶段 (documented here)。

所以我可能会将所有各种 repo setup puppet 代码移动到具有其他先决条件的 运行 前阶段(通常你放入 repo setup),运行 阶段将始终是 运行 首先在主阶段之前,所以你不必担心在每个包上设置 repos 的明确设置要求。这使得对存储库和先决条件的更改变得容易得多