0

我有以下结构 -

堡垒(具有公共 DNS 的 EC2 实例)-> 运行 docker 容器的私有 EC2 实例。

现在,我可以看到通过 ssh 运行到 Bastion的docker 容器,使用ssh -i key.pem ec2-user@ec2.us-west-amazon.com后跟ssh -i key.pem <private EC2 instance IP>docker ps -a

我有 15 个不同的私有 EC2 实例和不同的 docker 容器。我想 ssh 到每个私有 EC2 实例并检查每个 docker 容器的属性。

使用 serverspec 我正在尝试这样的事情 -

describe command('ssh -i QA.pem  ec2-user@us-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 不是这个的好选择?

4

1 回答 1

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

我认为上面的示例不会通过 bash 中的 for 循环和 grep 来为您带来很多好处,但是我们确实需要了解更多详细信息才能知道混合使用 serverspec 是否有好处。

于 2015-10-23T11:53:29.680 回答