Невозможно запустить тест serverpec на экземпляре упаковщика GCP

Я изо всех сил пытаюсь запустить тест serverpec на экземпляре упаковщика GCP с локального компьютера. Я создал файл конфигурации json для упаковщика следующим образом, чтобы создать изображение на GCP:

{
"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"
    }
]

}

и я выполняю rake spec TARGET_HOST=(ip of packer instance) для запуска теста serverpec с локального компьютера, а spec_helper.rb настроен с входом ssh следующим образом:

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

а Rakefile настроен на запуск теста из определенной папки.

после выполнения команды сборки упаковщика packer build -var-file=variables.json sftp.json| tee build.log

это не с

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

Журнал сборки упаковщика

==> 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]

Из-за этой ошибки я не могу запустить тест serverpec с локального компьютера, используя ssh на удаленном экземпляре упаковщика.

любой ответ будет оценен. Спасибо большое.


person Nirmal Baral    schedule 14.11.2017    source источник
comment
Это своего рода неудобное отклонение от лучших практик взаимодействия serverpec Rakefile / spec_helper, но, как следует из ответа ниже, это чисто проблема с использованием net-ssh gem и не связана с упаковщиком, serverpec, rspec или gcp. Используйте ключ ssh или пароль и добавьте его в аргументы net-ssh, чтобы решить эту проблему.   -  person Matt Schuchard    schedule 15.11.2017
comment
@MattSchuchard Я не отклоняюсь от практики взаимодействия serverpec Rakefile / spec_helper, я просто пропустил установку пути к ключу в файле ~ / .ssh / config с путем к действительному private_key_file. В любом случае я попытаюсь реализовать serverpec в соответствии с руководством serverpec   -  person Nirmal Baral    schedule 15.11.2017


Ответы (1)


Похоже, вам не хватает пароля для centos пользователя.

Добавьте это в spec_helper.rb:

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

И настройте свой shell-local на:

{
    "type": "shell-local",
    "command": "LOGIN_PASSWORD='{{ user `sftp_password` }}' rake spec TARGET_HOST=remotehost"
}
person Rickard von Essen    schedule 15.11.2017
comment
centos у пользователя нет пароля, поскольку он создается как ssh_username, потому что в CentOS и последних образах Debian по умолчанию отключен root-доступ по ssh. и из документации упаковщика. Установите ssh_username для любого пользователя, который будет создан упаковщиком с доступом sudo. packer.io/docs/builders/googlecompute.html - person Nirmal Baral; 15.11.2017
comment
И как вы ожидали, что serverpec будет аутентифицироваться? Затем вам нужно использовать известный ssh_private_key_file, см. packer.io/docs/templates/ коммуникатор.html # ssh_private_key_file и DevOps.stackexchange.com/a/1349 - person Rickard von Essen; 15.11.2017
comment
Большое вам спасибо, вы были правы, он отсутствовал ssh_private_key_file, и я создал запись в ~/.ssh/config файле с путем к действительному private_key_file - person Nirmal Baral; 15.11.2017