什么是通过厨师做add-apt-repository的正确方法?

我正在学习厨师,现在我要为Ubuntu做的事情:

execute "add-apt-repository ppa:#{node[:some_repo]}" do user "root" end execute "apt-get update" do user "root" end 

但可能有更好的(“厨师式”)方式来做到这一点。 另外,我担心有时add-apt-repository会在执行时等待“Enter”键,所以这种方法可能不起作用。 什么是正确的做法呢?

编辑:我只有格式的PPA链接:PPA:东西/用户

如果您使用v12.9及以上版本的主厨 ,请使用apt_repository资源来pipe理apt存储库。 如果您使用的是低于v12.8的厨师,则可以使用Chef Software,Inc . 提供的APT Cookbook 。 这本食谱提供相同的LWRP以下是资源的示例用法:

 apt_repository "nginx-php" do uri "http://ppa.launchpad.net/nginx/php5/ubuntu" distribution node['lsb']['codename'] components ["main"] keyserver "keyserver.ubuntu.com" key "C300EE8C" end 

还有一个第三方的ppa提供了一个ppa方法:

 ppa "user/repo" 

https://github.com/sometimesfood/chef-apt-repo

理想情况下,这个function应该被添加到opscode apt cookbook中。

自从我刚刚回到这里以后,再添加一个答案。 如果您只有一个密钥的URL而不是密钥签名,则只需在密钥属性中指定URL即可:

 apt_repository 'some_repo' do uri 'http://some_url/ubuntu/precise/amd64/' arch 'amd64' distribution 'precise' components ['contrib'] key 'https://some_key_url.com/debian/release.key' end 

从文档

还有一点需要注意的是,一旦你添加了aptbook,你应该在你的食谱中添加一个依赖语句。 更新metadata.rb(应该在你的食谱目录的基础上)

 depends 'apt', '>= 2.7.0' 

这将防止节点无法更新的失败模式,因为它没有在运行列表中的aptbook。