Создать несколько подпапок одновременно шеф-повар
Не уверен, как бы я использовал массив для создания нескольких подпапок в папке "Продажи" в Chef.
sales = 'Sales'
salesfolders = %w{'NewClients', 'MarketingMaterial', 'SalesTools', 'ClientInformation'}
directory "#{directory}\\#{salesfolders}"
owner 'root'
group 'root'
mode '0755'
recursive true
action :create
end '
}
1 ответ
ОК - есть несколько вещей, на которые можно посмотреть. Во-первых, salesfolders
в настоящее время не является допустимым массивом. Вы можете определить это так:
salesfolders = ['foo', 'bar']
или вот так:
salesfolders = %w(foo bar)
Последний синтаксис является сокращением для массива строк - он такой же, как в первом примере, но с меньшим количеством синтаксического сахара.
После того, как вы получили хорошо отформатированный массив, вам нужно перебрать этот массив и запустить некоторый код для каждого элемента в нем. В Ruby это достигается путем вызова .each
на массиве, вот так:
salesfolders.each do |salesfolder|
# do something with salesfolder
end
Обратите внимание, что есть salesfolder
установленная там переменная, которая будет отличаться для каждого элемента массива - если мы посмотрим на наш предыдущий пример, то при первом запуске этого блока кода он будет foo
, второй bar
, и так далее.
Имея это в виду, если мы хотим запустить ваш код Chef для каждой папки продаж, мы можем сделать что-то вроде этого:
salesfolders.each do |salesfolder|
directory "/something/else/here/#{salesfolder}" do
owner 'root'
group 'root'
mode '0755'
recursive true
action :create
end
end
Для каждой папки продаж в нашем массиве мы запустим directory
заблокировать и создать новый каталог.