Eva*_*ton -1 ruby linux chef-infra chefdk
不确定我将如何使用数组在厨师中创建 Sales 文件夹的多个子文件夹。
sales = 'Sales'
salesfolders = %w{'NewClients', 'MarketingMaterial', 'SalesTools', 'ClientInformation'}
directory "#{directory}\\#{salesfolders}"
owner 'root'
group 'root'
mode '0755'
recursive true
action :create
end '
Run Code Online (Sandbox Code Playgroud)
}
小智 5
好的 - 有几件事情要看。首先,salesfolders当前不是有效的数组。你会想要这样定义它:
salesfolders = ['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)
或者像这样:
salesfolders = %w(foo bar)
Run Code Online (Sandbox Code Playgroud)
后一种语法是字符串数组的简写——它与第一个示例相同,但语法糖更少。
一旦您获得了一个格式良好的数组,您就需要遍历该数组并为其中的每个项目运行一些代码。在 Ruby 中,这是通过调用.each数组来实现的,如下所示:
salesfolders.each do |salesfolder|
# do something with salesfolder
end
Run Code Online (Sandbox Code Playgroud)
请注意,那里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
Run Code Online (Sandbox Code Playgroud)
对于数组中的每个 salesfolder,我们将运行该directory块并创建一个新目录。