Я изучаю шеф-повара, и сейчас я собираюсь сделать это для 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: something/user
Если вы используете chef v12.9 и выше, используйте ресурс apt_repository для управления репозиториями apt. Если вы используете шеф-повара ниже, чем v12.8, вы можете использовать APT Cookbook от Chef Software, Inc. Эта кулинарная книга обеспечивает тот же 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 "user/repo"
https://github.com/sometimesfood/chef-apt-repo
В идеале эта функциональность должна быть добавлена к куковой книге opscode apt.
user/repo
и он будет работать с apt_repository
.
Добавление другого ответа, так как я только что оказался здесь. Если у вас есть только 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
Из документация
Еще одно замечание: если вы добавили кучную книгу apt, вы должны добавить выражение о зависимости в свою кулинарную книгу. Обновление metadata.rb(должно быть в базе вашего каталога cookbook)
depends 'apt', '>= 2.7.0'
Это предотвратит отказ в случае, когда node не может обновиться, поскольку в нем нет куковой книги apt.