шеф-повар л oop и уведомляет - PullRequest
1 голос
/ 15 января 2020

Чтобы поместить два сертификата в коробку и затем добавить их в кошелек, я использовал следующий код:

RDS_CA_CERTS = %w[ cert1.cer cert2.cer]
RDS_CA_CERTS.each do |rds_ca_cert|
  cookbook_file "/oracle_home/ssl_wallet/#{rds_ca_cert}" do
    source "certs/#{rds_ca_cert}"
    owner 'oracle'
    group 'dba'
    mode '0644'
    action :create
    notifies :run, 'execute[import_rds_cert]', :immediately
  end

  execute 'import_rds_cert' do
    command "orapki wallet add -wallet /oracle_home/ssl_wallet -trusted_cert -cert /oracle_home/ssl_wallet/#{rds_ca_cert} -auto_login_only"
    user 'oracle'
    group 'dba'
    umask '0025'
    action :nothing
  end
end

Я ожидал, что приведенный выше код принесет один файл cert1.cer и вызовет выполнение для того же. Тогда это принесет в cert2.cer и с выполнением триггера. Таким образом, только при добавлении файла будет выполнено выполнение (ворота для выполнения)

Но в TK наблюдаемое поведение немного странно для меня. Он приносит файл cert1.cer, а затем, когда запускает его выполнение, происходит сбой, говоря, что cert2.cer не существует. Это может произойти, только если l oop перешел к следующему файлу до того, как было выполнено выполнение.

Не могли бы вы объяснить поведение? Какой был бы лучше альтернативный подход?

1 Ответ

0 голосов
/ 15 января 2020

Ваш код генерирует 2 ресурса cookbook_file и 2 ресурса execute. К сожалению, ваши ресурсы выполнения имеют то же имя и в конечном итоге объединяются в 1 ресурс Chef с командой последнего ресурса, перезаписывающей предыдущий. Таким образом, ваш cookbook_file "/oracle_home/ssl_wallet/cert1.cer" ресурс запускает execute 'import_rds_cert' ресурс с command "orapki wallet add -wallet /oracle_home/ssl_wallet -trusted_cert -cert /oracle_home/ssl_wallet/cert2.cer -auto_login_only".

. Чтобы решить вашу проблему, измените имя исполняемого ресурса, чтобы оно зависело от переменной rds_ca_cert. Таким образом, Chef также сгенерирует 2 разных исполнительных ресурса.

cookbook_file "/oracle_home/ssl_wallet/#{rds_ca_cert}" do
  [...]
  notifies :run, "execute[import_rds_cert_#{rds_ca_cert}]", :immediately
end

execute "import_rds_cert_#{rds_ca_cert}" do
  [...]
end
...