2017-11-14 4 views
0

Ich habe Probleme, den Serverspec-Test auf der GCP-Packer-Instanz vom lokalen Computer auszuführen. Ich habe einen Packer json Konfigurationsdatei wie folgt erstellt ein Bild auf GCP zu erzeugen:Serverspec-Test auf GCP-Packer-Instanz kann nicht ausgeführt werden

{ 
"variables": { 
    "project": "gcp-project", 
    "image_family": "centos-7", 
    "username": "centos", 
    "zone": "us-central1-c", 
    "version": "latest" 
}, 

"builders": [ 
    { 
     "type": "googlecompute", 
     "account_file": "account.json", 
     "project_id": "{{user `project`}}", 
     "zone": "{{user `zone`}}", 
     "source_image":"centos-7-v20171025", 
     "image_name": "sftp-{{user `image_family`}}-{{user `version`}}-{{timestamp}}", 
     "image_family": "{{user `image_family`}}", 
     "image_description": "sftp - from packer", 
     "ssh_username": "{{user `username`}}", 
     "machine_type": "g1-small" 
    } 
], 

"provisioners": [ 
    { 
     "type": "shell-local", 
     "command": "rake spec TARGET_HOST=remotehost" 
    } 
] 

}

und ich bin Ausführung rake spec TARGET_HOST=(ip of packer instance) serverspec Test von dem lokalen Rechner und spec_helper.rb auszuführen ist konfiguriert mit SSH Melden Sie sich wie folgt an:

host = ENV['TARGET_HOST'] 
options = Net::SSH::Config.for(host) 
options[:user] = 'centos' 
set :host,  options[:host_name] || host 
set :ssh_options, options 

und Rakefile ist konfiguriert, Test von bestimmten Ordner auszuführen.

nach Packer Build Befehl ausführen packer build -var-file=variables.json sftp.json| tee build.log

es nicht mit

Net::SSH::AuthenticationFailed: 
Authentication failed for user [email protected] 

Packer

==> googlecompute: Checking image does not exist... 
==> googlecompute: Creating temporary SSH key for instance... 
==> googlecompute: Using image: centos-7-v20171025 
==> googlecompute: Creating instance... 
    googlecompute: Loading zone: us-central1-c 
    googlecompute: Loading machine type: g1-small 
    googlecompute: Loading network: default 
    googlecompute: Requesting instance creation... 
    googlecompute: Waiting for creation operation to complete... 
    googlecompute: Instance has been created! 
==> googlecompute: Waiting for the instance to become running... 
    googlecompute: IP: 1.2.3.4 
==> googlecompute: Waiting for SSH to become available... 
==> googlecompute: Connected to SSH! 
==> googlecompute: Executing local command: rake spec TARGET_HOST=1.2.3.4 
    googlecompute: An error occurred while loading ./spec/1.2.3.4/sftp_spec.rb. 
    googlecompute: On host '1.2.3.4' 
    googlecompute: Failure/Error: 
    googlecompute: describe service('sshd'), :if => os[:family] == 'redhat' do 
    googlecompute:  it { should be_enabled } 
    googlecompute:  it { should be_running } 
    googlecompute: end 
    googlecompute: Net::SSH::AuthenticationFailed: 
    googlecompute: Authentication failed for user [email protected] 

Aufgrund dieses Fehlers Buildprotokoll Ich kann keine serverspec Test von den lokalen Rechner laufen mit ssh auf Remote-Packer-Instanz.

jede Antwort wird geschätzt. vielen Dank.

+0

Dies ist eine Art einer unangenehmen Abweichung von dem Best Practices von serverspec Rakefile/spec_helper Interaktion, aber als Antwort unten impliziert, dies ist ein reines Problem mit der Verwendung des "net-ssh" Gems und hat nichts mit Packer, Serverspec, Rspec oder GCP zu tun. Verwenden Sie einen SSH-Schlüssel oder ein Kennwort und fügen Sie es zu den Net-SSH-Argumenten hinzu, um dieses Problem zu beheben. –

+0

@MattSchuchard Ich wende mich nicht von Praktiken der Serverspec-Rakefile/spec_helper-Interaktion ab, ich verpasste es einfach, den Pfad zum Schlüssel in die ~/.ssh/config-Datei mit Pfad zu gültiger 'private_key_file' zu ​​setzen. Wie auch immer, ich werde versuchen, Serverspec gemäß Serverspec-Richtlinie zu implementieren –

Antwort

0

Es scheint, als ob Sie das Passwort für centos Benutzer vermissen.

Fügen Sie diese auf spec_helper.rb:

options[:password] = ENV['LOGIN_PASSWORD'] 

Und ajust Ihre shell-local zu:

{ 
    "type": "shell-local", 
    "command": "LOGIN_PASSWORD='{{ user `sftp_password` }}' rake spec TARGET_HOST=remotehost" 
} 
+0

'centos' Benutzer hat kein Passwort, da es als' ssh_username' erstellt wird, da CentOS und aktuelle Debian-Images root ssh access standardmäßig deaktiviert haben. und aus der Packer-Dokumentation Setzen Sie ssh_username auf einen beliebigen Benutzer, der von einem Packer mit sudo-Zugriff erstellt wird. https://www.packer.io/docs/builders/googlecompute.html –

+1

Und wie haben Sie erwartet, dass Serverspec authentifizieren würde? Dann müssen Sie eine bekannte 'ssh_private_key_file' verwenden, siehe https://www.packer.io/docs/templates/communicator.html#ssh_private_key_file und https://devops.stackexchange.com/a/1349 –

+0

vielen Dank , Sie hatten Recht, es fehlte 'ssh_private_key_file' und ich habe einen Eintrag in' ~/.ssh/config' Datei mit dem Pfad zur gültigen 'private_key_file' erstellt –

Verwandte Themen