2015-12-08 43 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

相关问题