ChefSpec и для циклов с динамическими атрибутами

У меня есть очень неортодоксальный код Chef, для которого мне нужно написать модульный тест, и я не могу найти способ правильно это сделать.

К сожалению, из-за структуры файла среды все эти циклы 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 или примерах, не помогает.

Кто-нибудь здесь более осведомлен в этой области?

Спасибо!

1 ответ

Там нет ничего особенного, просто настройте бегун с некоторыми атрибутами узла, а затем проверьте правильность hostsfile_entry Ресурсы (it { expect(chef_run).to create_hostsfile_entry('asdf') }, так далее).

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