0
私は単体テストを書く必要がある非常に非正統なシェフコードを持っていますが、正しく実行する方法がわかりません。ChefSpecと動的属性のループ
残念なことに、環境ファイルの構造のために、これらのforループはすべて以下のように必要です。それに書かれた料理の数十が既に存在しているように、環境ファイルが対処することはできません
コードは基本的に次のようになります。
# Redis Sentinel information
node['os_setup']['zones'].each do |_zone|
_zone['nodes'].each do |_node|
if _node['nodename'] =~ /mpredis/i #is it a redis node?
node['db']['redis_sentinels'] << _node['hostname']
end
end
end
# generate /etc/hosts entries for Redis Sentinels
node['db']['redis_sentinels'].each do |_hostname|
# add entry for INTERSITE network
hostsfile_entry findIPfrom_host(_hostname, 'REDIS') do
hostname "#{_hostname}.#{node['domain']}"
aliases [_hostname]
unique true
comment "appended by recipe[#{cookbook_name}::#{recipe_name}]"
action :create
end
# add entry for TRAFFIC network
hostsfile_entry findIPfrom_host(_hostname, 'TRAFFIC') do
hostname "#{_hostname}db.#{node['domain']}"
aliases ["#{_hostname}db"]
unique true
comment "appended by recipe[#{cookbook_name}::#{recipe_name}]"
action :create
end
end
findIPfrom_host()
機能が異なる料理から図書館で見つけ、それが見えていますこのように:
def getIPfrom_host(hostname, interface)
ip_addr = nil
node['os_setup']['zones'].each do |_zone|
_zone['nodes'].each do |_node|
if _node['hostname'] == hostname
_node['interfaces'].each do |_nic|
if _nic['device'] == node['interface_definitions'][interface.upcase]
ip_addr = _nic['ipaddress']
end
end
end
end
end
return ip_addr
end
私は完全にこれに固執しています。 ChefSpecのマニュアルや例で見つけられるものはありません。
ここに詳しい人はいますか?
ありがとうございます!