2016-06-15 12 views
1

Ich verwende Terraform, um den Build eines AWS EC2-basierten Docker-Hosts zu automatisieren und dann mithilfe seiner Remote-Exec-Option eine Docker-Datei herunterzuladen, zu erstellen und auszuführen.Terraform und Serverspec integrieren

ich gehofft hatte dies mit Serverspec zu integrieren, aber ich kämpfen zwei Dinge zu erarbeiten:

  1. Der beste Weg, um die externe dns der neu geschaffenen AWS EC2-Instanz Serverspec passieren.

  2. So konfigurieren Sie die SSH-Optionen für Serverspec, so dass sie ordnungsgemäß auf einem Amazon Linux AMI mit dem ec2-Benutzerkonto ausgeführt werden.

Ich würde normalerweise auf die EC2-Instanz verbinden einen vordefinierten Schlüsselpaar verwenden und ein Passwort nie jedoch verwenden ServerSpec scheint Befehle auf dem Server mit einem sudo -p-Format ausgeführt werden.

Jeder Rat sehr geschätzt.

Inhalt von spec_helper.rb

require 'serverspec' 
require 'net/ssh' 

set :ssh_options, :user => 'ec2-user' 

auch bearbeitet Rakefile mit richtige EC2 externen dns (maskiert) zu zwingen folgt:

require 'rake' 
require 'rspec/core/rake_task' 

hosts = %w(
    ec2-nn-nn-nn-nnn.eu-west-1.compute.amazonaws.com 
) 

set :ssh_options, :user => 'ec2-user' 

task :spec => 'spec:all' 

namespace :spec do 
    task :all => hosts.map {|h| 'spec:' + h.split('.')[0] } 
    hosts.each do |host| 
    short_name = host.split('.')[0] 
    role  = short_name.match(/[^0-9]+/)[0] 

    desc "Run serverspec to #{host}" 
    RSpec::Core::RakeTask.new(short_name) do |t| 
     ENV['TARGET_HOST'] = host 
     t.pattern = "spec/Nexus/*_spec.rb" 
    end 
    end 
end 
+0

Ich habe mehr Erfolg hatte Ersatz-Server-Spezifikation mit Koch INSPEC. Es ist viel einfacher aufzurufen. Ich bin mir sicher, dass es andere Kompromisse gibt, aber für meinen Anwendungsfall funktioniert es besser. – user1229364

Antwort

1
  1. Sie können die IP-Adresse machen ein output in Terraform . In der Tat gibt den Link ein Beispiel zu tun, dass nur die IP-Adresse einer AWS-Instanz zu erhalten, mit dem Namen web in diesem Fall:

    output "address" { 
        value = "${aws_instance.web.public_dns}" 
    } 
    

    Dann können Sie diesen Wert von der Kommandozeile erhalten nach einem terraform apply mit terraform output address.

  2. Sie können das sudo-Passwort mit der Konfigurationsoption sudo_password festlegen. Wenn der ec2-Benutzer sudo ohne Passwort ausführen kann, setzen Sie dies auf ''. (. Siehe this blog post für ein Beispiel) oder es in der Variablen SUDO_PASSWORD Umgebung passieren, hier beschrieben: http://serverspec.org/tutorial.html

+0

Danke für Ihre Hilfe. Ich kämpfe immer noch, um den genauen Inhalt herauszufinden, den ich in rakefile und spec_helper.rb für einen einfachen Test für einen einzelnen Wirt benötige, der den Net: SSH Benutzer zu ec2-Benutzer einstellt. – user1229364

+0

Hinzufügen des Zeilensatzes: ssh_options,: user => 'ec2-user' zu einer Datei funktioniert nicht. Es versucht immer noch, eine Verbindung zum EC2-Host mit meinem Mac-Benutzernamen herzustellen. – user1229364

+0

Können Sie den Inhalt Ihres spec_helper.rb zu Ihrem Beitrag hinzufügen? –