Как использовать ресурс докера serverpec на экземпляре amazon ec2

У меня есть следующая структура -

Bastion (экземпляр EC2 с общедоступным DNS) -> частный экземпляр EC2, на котором работает контейнер Docker.

Теперь я вижу док-контейнер, запущенный по ssh в Bastion, используя 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]') do

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

end

Как мы можем добиться этого с помощью serverspec? Или serverspec не подходит для этого?


person rohitkadam19    schedule 23.10.2015    source источник
comment
Это лучшая отправная точка, я далеко не эксперт в спецификациях серверов, но я почти уверен, что команда не будет сцеплена в цепочку, будет выполняться более последовательно, и, поскольку первая не завершена, вы не доберетесь до внутренний. (Но это предположение, я могу ошибаться и пусть более знающие люди это подтвердят или опровергнут)   -  person Tensibai    schedule 23.10.2015


Ответы (1)


Я думаю, это зависит от того, что вы хотите проверить (может быть, если бы вы могли их перечислить, было бы легче сказать вам, есть ли у serverspec какие-либо из этих функций?). Это звучит как цикл 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 в миксе.

person Martin    schedule 23.10.2015
comment
Спасибо за ответ! Вот ссылка на поддержку докеров спецификации сервера serverspec.org/resource_types.html#docker_image. В вашем примере вы выполняете 1 уровень ssh в цикле for, где в моем случае есть 2 уровня ssh. Ценю твою помощь! - person rohitkadam19; 23.10.2015
comment
@ rohitkadam19 Так сложно расширить ответ? то есть: ssh #{bastion-ip} 'ssh #'{ip} \'docker ps -a\'' (я не уверен, что экранирование кавычек и даже кавычек необходимо, но тестирование остается в качестве упражнения) - person Tensibai; 23.10.2015
comment
@Tensibai Не так сложно расширить ответ, я пробовал ту же команду вручную, что вы упомянули. Я пытался найти лучший способ использования serverspec. - person rohitkadam19; 23.10.2015
comment
@ rohitkadam19 В этом случае я бы открыл новый вопрос со ссылкой на него, показав, что вы на самом деле пробовали, и объяснив, почему это не подходит, или показав журналы того, где это не удается. (именно так должен работать SO, это не форум, где вы расширяете вопрос после каждого нового ответа). (Редактировать: я чувствую себя немного резко, извините, просто пытаюсь дать вам руководство и не могу сформулировать это лучше:/) - person Tensibai; 23.10.2015
comment
@Tensibai Добавлен фрагмент спецификации сервера. Дайте мне знать, если это будет полезно. Спасибо за совет. - person rohitkadam19; 23.10.2015