如何在amazon ec2实例上使用serverspec docker资源

如何在amazon ec2实例上使用serverspec docker资源,rspec,amazon-ec2,chef-infra,knife,serverspec,Rspec,Amazon Ec2,Chef Infra,Knife,Serverspec,我有以下结构- Bastion(带有公共DNS的EC2实例)->运行docker容器的私有EC2实例 现在,我可以看到docker容器使用ssh-I key.pem ec2通过ssh运行到Bastion-user@ec2.us-west amazon.com后接ssh-i key.pem后接docker ps-a 我有15个具有不同docker容器的不同私有EC2实例。我想ssh到每个私有EC2实例,并检查每个docker容器的属性 对于serverspec,我尝试了类似的方法- describ

我有以下结构-

Bastion(带有公共DNS的EC2实例)->运行docker容器的私有EC2实例

现在,我可以看到docker容器使用
ssh-I key.pem ec2通过ssh运行到Bastion-user@ec2.us-west amazon.com
后接
ssh-i key.pem
后接
docker ps-a

我有15个具有不同docker容器的不同私有EC2实例。我想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不是很好的选择?

我认为这取决于您想要检查的内容(如果您可以列举这些功能,那么告诉您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中用grep for results为for循环买很多东西,但我们确实需要了解更多细节,才能知道在组合中使用serverspec是否有好处。

谢谢您的回答!以下是服务器规范docker支持的链接。在您的示例中,您正在for循环中执行1级ssh,在我的示例中,有2级ssh。谢谢你的帮助@rohitkadam19扩展答案有那么难吗?i、 e:
ssh#{bastion ip}'ssh#{ip}'docker ps-a\''
(我不确定转义引号,甚至引号都是必要的,但测试只是一个练习)@Tensibai扩展答案并不难,我已经手动尝试了您提到的相同命令。我试图找到使用serverspec的最佳方法。@rohitkadam19在本例中,我将打开一个新的问题链接到那里,显示您实际尝试了什么,并解释它不适合的原因,或者显示失败的地方的日志。(这就是SO的工作原理,它不是一个论坛,你可以在每次新的anwser之后扩展问题)。(编辑:我觉得有点苛刻,对不起,我只是想给你一些指导,但用词再好不过了:/)@Tensibai添加了serverspec片段。如果有用,请告诉我。谢谢你的建议。这是一个更好的起点,我远不是serverspec方面的专家,但我很确定命令不会被链接,执行的顺序会更为顺序,而且由于第一个命令没有结束,你也不会进入内部命令。(但这只是一个猜测,我可能错了,我让更多有知识的人证实了这一点)