2015-10-23 66 views
0

我有以下結構 -如何使用serverspec搬運工資源在Amazon EC2實例

堡壘(公共DNS EC2實例) - >私人EC2實例在其泊塢窗容器運行。現在

,我可以通過SSH看到搬運工人容器中運行使用ssh -i key.pem [email protected]隨後ssh -i key.pem <private EC2 instance IP>其次docker ps -a

我有不同的碼頭工人,容器15個不同的私人EC2實例堡壘。我想ssh到每個私有EC2實例,並檢查每個碼頭集裝箱的屬性。

隨着serverspec我是想這樣的事情 -

describe command('ssh -i QA.pem [email protected]s-west-2.elb.amazonaws.com') do 

    describe command('ssh -t -t 10.0.5.5 docker ps -a') do 
     its(:stdout) { should contain('web-server') } 
    end 

end 

我們怎樣才能做到這一點使用serverspec?或serverspec是不是這個好的選擇?

+0

這是一個更好的起點,我很想成爲serverspec的專家,但我敢肯定,命令不會被鏈接,更順序執行,並且作爲第一個沒有結束,你贏了'沒有達到內在的一個。 (但是這是一個猜測,我可能在那裏錯了,我讓更多有見識的人確認或體弱) – Tensibai

回答

2

我認爲這取決於你想檢查什麼(也許如果你可以枚舉這些,那麼告訴你serverspec是否已經具有這些功能?)。這聽起來像一個docker命令的for循環,所以我不確定你會從一個額外的框架中獲得很多。

鑑於這一切,是微不足道的寫一個循環來在serverspec運行一些命令和測試輸出:

machines = %w(10.1.2.3 10.4.5.6 10.7.8.9) 
machines.each do |ip| 
    describe command("ssh #{ip} 'docker ps -a'") do 
    its(:stdout) { should match /bin/ } 
    its(:stderr) { should match /failed/ } 
    its(:exit_status) { should eq 0 } 
    end 
end 

我不認爲上面的例子給你買了很多在for循環在bash中使用grep來獲得結果,但我們真的需要知道更多的細節,以瞭解是否有利於在服務器中使用Serverspec。

+0

感謝您的回答!這裏是服務器規範碼頭支持鏈接http://serverspec.org/resource_types.html#docker_image。在你的例子中,你在做for循環的1級ssh,在我的情況下有2級ssh。感謝你的幫助! – rohitkadam19

+0

@ rohitkadam19難以延伸答案嗎?即:'ssh#{bastion-ip}'ssh#'{ip} \'docker ps -a \'''(我不確定轉義引號,甚至引號是必要的,但測試留作練習) – Tensibai

+0

@ Tensibai擴展答案並不難,我已經手動嘗試過你提到的相同命令。我試圖找到一些使用serverspec的最佳方式。 – rohitkadam19