Создать несколько подпапок одновременно шеф-повар

Не уверен, как бы я использовал массив для создания нескольких подпапок в папке "Продажи" в 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 заблокировать и создать новый каталог.

Другие вопросы по тегам