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-run, използвайте манипулатор, може би извикване на ServerSpec, както в Тестова кухня.

person Tensibai    schedule 17.07.2015
comment
Извинявам се за обратните отметки, аз съм нов и за Chef, и за Ruby. Съобщенията в регистрационния файл са само за отстраняване на грешки, все още не съм измислил как да задам нивото на отстраняване на грешки на chef-solo чрез kitchen-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
разбрах защо отгатването на местоположението би било по-добро от запитването какво всъщност е инсталирал пакетът? Също така не знаех, че Ohai знае инсталираната версия на python, много полезно! - person ModulusJoe; 17.07.2015
comment
@AcyclicTau пълният списък с плъгини по подразбиране на ohai е тук и можете да намерите в Google и някои персонализирани добавки за конкретни случаи - person Tensibai; 17.07.2015
comment
работи перфектно, поех си свободата да актуализирам отговора ви, за да премахна препратката към „/etc/hosts“. - person ModulusJoe; 17.07.2015
comment
Редактирането на @AcyclicTau одобрено :) Забравих да го заменя след копиране/поставяне от сайта за документация - person Tensibai; 17.07.2015