2017-12-11 1 views
0

단위 테스트를 작성해야하는 매우 정통 요리사 코드가 있는데 제대로 수행 할 수있는 방법을 찾을 수 없습니다.ChefSpec 및 동적 속성이있는 루프 용

불행히도 환경 파일의 구조 때문에 아래에서 볼 수있는 for 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 문서 나 예제에서 찾을 수있는 것은 없습니다.

여기이 분야에 대해 더 알고있는 사람이 있습니까?

감사합니다.

답변

0

특별한 것은 없지만 일부 노드 속성으로 러너를 설정 한 다음 올바른 hostsfile_entry 자원 (it { expect(chef_run).to create_hostsfile_entry('asdf') } 등)을 확인하십시오.