具有嵌套函数的 Puppet 关系

具有嵌套函数的 Puppet 关系

我使用官方的 Puppet apt 模块来添加这个 Java 启动板并安装 Oracle Java 8。

  apt::ppa{ 'ppa:webupd8team/java': }

  package {
      "oracle-java8-installer":
        ensure => 'installed',
  }

当 apt 模块添加启动板时,它会通知另一个清单运行“apt-get update”。

apt/manifests/ppa.pp

exec { "add-apt-repository-${name}":
  environment => $_proxy_env,
  command     => "/usr/bin/add-apt-repository ${options} ${name}",
  unless      => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
  user        => 'root',
  logoutput   => 'on_failure',
  notify      => Exec['apt::update::apt_update'],
  require     => $_require,
}

问题是我无法确保在安装开始之前运行源更新。

使用“require”或“before”运行更新安装(添加源->安装 Java->apt-get 更新),订阅返回一个依赖循环,并且在更新我的源之前不使用任何关系进行安装。

解决方案是什么?

使用 Frank 的代码:

apt::ppa{ 'ppa:webupd8team/java': }

package {
          "oracle-java8-installer":
                ensure => 'installed',
                require => Apt::Ppa['ppa:webupd8team/java'],
}   

我收到此错误信息:

==> xxx:通知:/Stage[main]/Main/Node[xxx]/Apt::Ppa[ppa:webupd8team/java]/Exec[add-apt-repository-ppa:webupd8team/java]/returns:执行成功

==> xxx:错误:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java8-installer”返回 100:正在读取软件包列表...

==> xxx:正在构建依赖关系树...

==> xxx:正在读取状态信息...

==> xxx:E:无法找到软件包 oracle-java8-installer

==> xxx:错误:/Stage[main]/Main/Node[xxx]/Package[oracle-java8-installer]/ensure:从清除更改为当前失败:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java8-installer”返回 100:正在读取软件包列表...

==> xxx:正在构建依赖关系树...

==> xxx:正在读取状态信息...

==> xxx:E:无法找到软件包 oracle-java8-installer

==> xxx:通知:/Stage[main]/Apt::Update/Exec[apt_update]:依赖包[oracle-java8-installer] 出现故障:true

==> xxx:警告:/Stage[main]/Apt::Update/Exec[apt_update]:由于依赖项失败而跳过

==> xxx:通知:/Stage[main]/Apt::Update/Exec[apt_update]:从 1 个事件触发“刷新”

使用这个:

package {
          "oracle-java8-installer":
                ensure => 'installed',
                require => Exec['apt::update::apt_update'],
}

我收到此错误:

Error: Failed to apply catalog: Could not find dependency Exec[apt::update::apt_update] for Package[oracle-java8-installer]

答案1

你的发现令人困惑。require真的应该让你到达那里。

package {
  "oracle-java8-installer":
    ensure  => 'installed',
    require => Apt::Ppa['ppa:webupd8team/java'],
}

相关内容