Win 7でserverspec動かしてみたら、host.ipaddressが取れなかった
Win 7でserverspec動かしてみたら、host.ipaddressがとれない
require 'spec_helper' describe host("www.example.com") do it { should be_resolvable } its(:ipaddress) { should eq "192.0.2.1" } end Failures: 1) Host "www.example.com" Failure/Error: it { expect(subject.ipaddress).to eq "192.0.2.1" } NotImplementedError: get_ipaddress is not implemented in Specinfra::Command::Windows::Base::Host
specinfra/host.rb at master · serverspec/specinfra · GitHub
コード見たら確かにget_ipaddress実装されてない。
linuxとかだと下記のようにgetent hostsの結果らしいのだけど
def get_ipaddress(name) "getent hosts #{escape(name)} | awk '{print $1}'" end
check_is_resolvable内を参考に下記をPowerShellで試してたら、複数IPアドレスが返ってきたので、取れないわけではなさそうだけど、配列になっちゃうから、リソースタイプのドキュメントのeqではなくてbe_include("192.0.2.1")とかで書くことになりそう。
PS> [System.Net.Dns]::GetHostAddresses("www.google.com")|fl IPAddressToString IPAddressToString : 74.125.235.113 IPAddressToString : 74.125.235.114 IPAddressToString : 74.125.235.115 IPAddressToString : 74.125.235.116 IPAddressToString : 74.125.235.112
パッチとか書くか悩む。
他の実装をみているとPowerShell側で最後TrueかFalseを返すものが多い。それに倣うとPowerShell側では下記のようなコマンド発行になりそう。
PS> @([System.Net.Dns]::GetHostAddresses("www.google.com")| select {$_.IPAddressToString -eq "74.125.235.112"}).count -gt 0
でserverspec側はこういう感じで書くことになりそう。
it { should have_ipaddress( "74.125.235.112") }