rpm и Yum не верят, что пакет установлен после установки Chef

Запуск chef-solo (Установка Chef Omnibus (12.3)) на centos6.6

Мой рецепт имеет следующий простой код:

package 'cloud-init' do
    action :install
end 
log 'rpm-qi' do
    message `rpm -qi cloud-init`
    level :warn
end
log 'yum list' do
    message `yum list cloud-init`
    level :warn
end

Но выдает следующее:

       - install version 0.7.5-10.el6.centos.2 of package cloud-init

     * log[rpm-qi] action write[2015-07-16T16:46:35+00:00] WARN: package cloud-init is not installed

[2015-07-16T16:46:35+00:00] WARN: Loaded plugins: fastestmirror, presto
   Available Packages
   cloud-init.x86_64                  0.7.5-10.el6.centos.2                 extras

Я не понимаю, почему rpm/yum и на самом деле rpmquery не видят пакет как установленный.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я специально ищу следующую строку после установки пакета, чтобы затем применить изменение к файлу (я понимаю, что это не очень хороший способ сделать что-то, что я рад принять предложения):

rpmquery -l cloud-init | grep 'distros/__init__.py$'

Я обнаружил это, используя следующее:

install_report =  shell_out('yum install -y cloud-init').stdout 
cloudinit_source = shell_out("rpmquery -l cloud-init | grep 'distros/__init__.py$'").stdout

Затем я могу получить файл, который я ищу, и выполнить

Chef::Util::FileEdit.new(cloudinit_source.chomp(''))

Файл перемещается в зависимости от дистрибутива, но мне нужно отредактировать этот файл специально с изменениями на месте.


person ModulusJoe    schedule 16.07.2015    source источник


Ответы (1)


Непроверенный код, просто чтобы дать представление:

package 'cloud-init' do
    action :install
    notifies :run,"ruby_block[update_cloud_init]"
end 

ruby_block 'update_cloud_init' do
  block do
    cloudinit_source = shell_out("rpmquery -l cloud-init | grep 'distros/__init__.py$'").stdout
    rc = Chef::Util::FileEdit.new(cloudinit_source.chomp(''))
    rc.search_file_replace_line(/^what to find$/,
   "replacement datas for the line")
    rc.write_file
  end
end

ruby_block пример взят и адаптирован из здесь

Я бы лучше использовал шаблон для управления всем файлом, чего я не понимаю, так это того, почему вы сначала не знаете, где он будет...


Предыдущий ответ

Я предполагаю, что это проблема компиляции и сходимости. на момент сохранения сообщения (и выполнения вашей команды) пакет еще не установлен.

Chef запускается в два этапа, компилируется, затем сходятся.

Во время компиляции он создает коллекцию ресурсов, а во время конвергенции выполняет код для ресурса, чтобы привести его в описанное состояние.

Когда ваш ресурс журнала скомпилирован, оцениваются уродливые обратные галочки, в это время в коллекции есть ресурс пакета, но ресурс не был выполнен, поэтому вывод правильный.

Я вообще не понимаю, чего вы хотите добиться с помощью этих ресурсов журнала. Если вы хотите проверить состояние вашего узла после запуска шеф-повара, используйте обработчик, возможно, вызывающий ServerSpec, как в Тестовая кухня.

person Tensibai    schedule 17.07.2015
comment
Извиняюсь за обратные галочки, я новичок и в Chef, и в Ruby. Сообщения журнала предназначены только для отладки, я еще не придумал, как установить уровень отладки для шеф-повара-соло через кухню-ec2... - person ModulusJoe; 17.07.2015
comment
если это сработает, ты молодец. Причина, по которой я не знаю, где она находится, так как она основана на дистрибутиве и версии Python. Я хочу, чтобы это работало на centos7, centos6, amazon linux и других. - person ModulusJoe; 17.07.2015
comment
Его следует обрабатывать как атрибут, основанный на пакете версии Python (полученном от ohai) и дистрибутиве (также полученном от ohai), см., например, некоторые кулинарные книги сообщества о том, как это можно сделать. Но я почти уверен, что путь угадывается по этим данным. - person Tensibai; 17.07.2015
comment
понятно, почему угадывать местоположение лучше, чем запрашивать, какой пакет действительно установлен? Также я не знал, что Охай знал установленную версию Python, очень полезно! - person ModulusJoe; 17.07.2015
comment
@AcycloTau полный список плагинов ohai по умолчанию находится здесь и вы также можете найти в Google некоторые пользовательские плагины для конкретных случаев. - person Tensibai; 17.07.2015
comment
работал отлично, я позволил себе обновить ваш ответ, чтобы удалить ссылку на «/etc/hosts». - person ModulusJoe; 17.07.2015
comment
Редактирование @AcycloTau одобрено :) Забыли заменить его после копирования/вставки с сайта документации - person Tensibai; 17.07.2015