Почему ресурс cookbook_file в каждом цикле Ruby на самом деле не копирует файлы в рецепте Chef? - PullRequest
0 голосов
/ 21 декабря 2018

Я пользуюсь Ruby / Chef уже около 8 часов :), поэтому, надеюсь, это что-то простое.

Почему этот цикл не работает в моем рецепте Chef?Но если я выполняю их по отдельности, они функционируют как нужно (размещение файлов репо поваренной книги на сервере, на котором выполняется рецепт шеф-повара)?

Не помещает служебные файлы в / etc / systemd / system /

["airflow.service", "airflow-webserver.service", "airflow-scheduler.service"].each do |f|        
    cookbook_file '/etc/systemd/system/#{f}' do
        action :create
        source f
    end
end

Правильно размещает файлы / etc / systemd / system /

cookbook_file '/etc/systemd/system/airflow.service' do
        action :create
        source 'airflow.service'
end

cookbook_file '/etc/systemd/system/airflow-scheduler.service' do
    action :create
    source 'airflow-scheduler.service'
end

cookbook_file '/etc/systemd/system/airflow-webserver.service' do
    action :create
    source 'airflow-webserver.service'
end

1 Ответ

0 голосов
/ 21 декабря 2018

В ruby ​​строки в одинарных кавычках читаются буквально, тогда как строки в двойных кавычках интерполируют «специальные символы» (с косой чертой) и внутренние переменные.

Например:

[1] pry(main)> world = "earth"
[2] pry(main)> puts 'hello #{world}\ntesting 123'
hello #{world}\ntesting 123
[3] pry(main)> puts "hello #{world}\ntesting 123"
hello earth
testing 123

Поскольку вы использовали строку в одинарных кавычках, она трактуется как буквально /etc/systemd/system/#{f}.Используя двойные кавычки, вы можете интерполировать переменную - например, /etc/systemd/system/airflow-webserver.service.

...