2015-12-08 46 views
0

我試圖創建一個在其他資源之前定義的資源類型(:: apt :: ppa)的實例。我正在使用PuppetLabs Apt Module在Puppet中包含一個已定義的資源類型

通過模塊添加新的存儲庫時,定義的類型包含通知apt :: update的exec statement,以便可以正確安裝所需的任何軟件包。但是,當我運行我的下面的代碼時,在我嘗試安裝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\"", 
    } 
} 

回答

1

我相信問題是您需要在您創建的類中包含apt類以獲得訂購權。

這對我的作品上了一個新精密盒:

運行
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)。

因此,我可能會將所有各種回購設置的木偶代碼移動到其他先決條件的預運行階段(通常是放入回購設置),運行階段將始終在主階段之前運行,不必擔心顯式設置每個軟件包上的回收設置要求。這使得對回購和先決條件的更改變得更容易

+2

模塊文檔確實建議您需要聲明類「Apt」以使用模塊的其他功能,並且對代碼的檢查表明您確實需要該類來在任何「Apt :: Ppa」之前進行評估。然而,我斷言,它在模塊中構成了一個缺陷,即定義的類型本身並不處理它,通過執行它自己的'include'apt''。我建議提交一張票。 –

+0

謝謝!那工作。我可能應該更仔細地閱讀文檔 – majikman

相關問題