#arrays #ruby #linux #chef-infra #chef-recipe
#массивы #ruby #linux #шеф-повар-инфра #шеф-повар-рецепт
Вопрос:
Как вы можете использовать переменные в массиве в Chef. Я пытаюсь создать несколько папок с массивом. Однако мой код не работает:
Код
variable1 = "/var/lib/temp"
variable2 = "/opt/chef/library"
%w{ #{variable1} #{variable2} }.each do |dir|
directory dir do
owner 'root'
group 'root'
mode '755'
recursive true
action :create
end
end
Ответ №1:
%w{ ... }
Синтаксис предназначен для объявления массива слов, и интерполяция не выполняется. Поскольку вам нужен массив уже существующих строк, вы можете сделать это таким образом, объявив обычный старый массив:
[ variable1, variable2 ].each do |dir|
# ...
end
Или вы можете переключиться на это:
%w[ /var/lib/temp /opt/chef/library ].each |dir|
# ...
end
Вторая форма имеет гораздо больше смысла, поскольку это ваше намерение. Нет необходимости в промежуточных переменных.
Комментарии:
1. Спасибо за ваш ответ, это сработало. Как я могу установить группу пользователей с помощью этой команды во вложенных папках?
recursive true
не устанавливает группу пользователей во вложенных папках ниже/var/lib/temp
и/opt/chef/library
. Равнозначная команда дляchown -R user:group /var/lib/temp/*
в Linux.2. Это совсем другой вопрос, поэтому лучше выделить его как отдельную вещь.