Шеф-повар, использующий переменные в массиве

#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. Это совсем другой вопрос, поэтому лучше выделить его как отдельную вещь.