Puppet

具有嵌套函式的 Puppet 關係

  • January 19, 2016

我使用官方 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 更新),訂閱返回一個依賴循環,並且在更新我的源之前不使用它安裝的任何關係。

解決方案是什麼?

使用弗蘭克的程式碼:

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

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

我收到此錯誤消息:

==> xxx:注意:/Stage

$$ main $$/主/節點$$ xxx $$/ 適應 :: Ppa$$ ppa:webupd8team/java $$/執行$$ 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 $$/主/節點$$ xxx $$/包裹$$ 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::更新/執行$$ apt_update $$: 依賴包$$ oracle-java8-installer $$有失敗:真 ==> xxx:警告:/Stage

$$ main $$/Apt::更新/執行$$ apt_update $$: 因為依賴失敗而跳過 ==> xxx:注意:/Stage

$$ main $$/Apt::更新/執行$$ 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]

你的發現令人困惑。require真的應該讓你到達那裡。

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

引用自:https://serverfault.com/questions/747677