Ruby 我可以在chef节点属性数组上使用sort和uniq吗?
我们有一个生成bash脚本的模板,其中包括一个基于节点属性(特别是分配给节点的角色)检查的修补程序列表Ruby 我可以在chef节点属性数组上使用sort和uniq吗?,ruby,chef-infra,Ruby,Chef Infra,我们有一个生成bash脚本的模板,其中包括一个基于节点属性(特别是分配给节点的角色)检查的修补程序列表 patchlist=( <%= node['oracledb']['install']['oneoff']['db_oo_apply'] rescue nil %> <%= node['oracledb']['install']['oneoff']['db_psu_num'] rescue nil %> ) 如果所有属性都有值,则该选项有效 但似乎发生的是,如果列表中
patchlist=( <%= node['oracledb']['install']['oneoff']['db_oo_apply'] rescue nil %> <%= node['oracledb']['install']['oneoff']['db_psu_num'] rescue nil %> )
如果所有属性都有值,则该选项有效
但似乎发生的是,如果列表中的任何一个属性为空,则rescue nil
将启动,整个数组返回为nil
我认为在第一个变量中,rescue nil
的范围仅限于特定属性,但在第二个变量中,它适用于整个字符串
那么,我能以某种方式构建这个数组,让它排序并保持唯一性,并且仍然控制数组中单个元素可能为空的情况吗?只需使用纯ruby即可,例如:
irb(main):001:0>([nil]+[2,1]).compact.uniq.sort
=> [1, 2]
简言之,将数组连接到一个新数组中,
compact
it以获取一个已连接数组的副本,并删除所有nil
元素,然后应用uniq
和sort
,只需使用纯ruby即可,例如:
irb(main):001:0>([nil]+[2,1]).compact.uniq.sort
=> [1, 2]
简而言之,将数组连接到一个新数组中,
compact
it以获取一个已连接数组的副本,并删除所有nil
元素,然后应用uniq
和sort
实现这一点的一种方法是创建节点属性的实际数组。在您当前的实现中,它不是数组,只是由空格分隔的属性
这在模板上有点逻辑过载,但应该可以工作
模板示例:
实现这一点的一种方法是创建节点属性的实际数组。在您当前的实现中,它不是数组,只是由空格分隔的属性 这在模板上有点逻辑过载,但应该可以工作 模板示例:
在厨师配方中执行属性逻辑并仅使用ERB呈现计算变量如何?在厨师配方中执行属性逻辑并仅使用ERB呈现计算变量如何?可能不需要执行p.nil?
检查,因为数组的nil
元素似乎被忽略无论如何。p.nil?
检查可能不需要,因为数组的nil
元素似乎被忽略了。
patchlist=( <%= ( node['oracledb']['install']['oneoff']['db_oo_apply'] + ' ' + node['oracledb']['install']['oneoff']['db_psu_num'] rescue nil).split(' ').uniq.sort.join(' ') %> )