RegexpError в шеф-поваре при запуске начальной загрузки ножа

Я изучаю учебник «Учитесь устанавливать и управлять своим собственным сервером Chef/Управление узлом на вашем сервере Chef» на сайте Learn.chef.io, но столкнулся с проблемой, о которой Google, по-видимому, не знает.

Я пытаюсь запустить все локально, поэтому настройте следующее:

  • Chef Workstation — мой ноутбук с Fedora 20
  • Chef Server — виртуальная машина под управлением CentOS 7 минимум
  • Chef Node — еще одна виртуальная машина с минимальной CentOS 7

Я настроил рабочую станцию ​​и сервер, пользователей и организации, извлек Starter Kit, и все работает нормально.

Когда я пытаюсь загрузить свой Chef Node, он терпит неудачу следующим образом:

$ knife bootstrap centos-slave1.example.com --ssh-user <me> --sudo --identity-file ~/.ssh/id_dsa --node-name centos-slave1 --run-list 'recipe[hello_chef_server]'
Doing old-style registration with the validation key at /home/<me>/chef-repo/.chef/merin-validator.pem...
Delete your validation key in order to use your user credentials instead

Connecting to centos-slave1.example.com
ERROR: RegexpError: end pattern with unmatched parenthesis: /^(for$/i

Если я удалю этот ключ проверки, он все равно выйдет из строя с той же ошибкой:

Creating new client for centos-slave1
Creating new node for centos-slave1
Connecting to centos-slave1.merin
ERROR: RegexpError: end pattern with unmatched parenthesis: /^(for$/i

Я не вносил никаких особых изменений во что-либо помимо шагов учебника. Все порты прослушиваются, брандмауэры открыты между всеми компонентами, ключи ssh работают - в основном подключение во всех отношениях кажется нормальным.

Я также пробовал эту команду начальной загрузки, используя свой пароль, и даже пытался удалять флаги по одному (вплоть до просто «загрузки ножа») - всегда приводило к одной и той же ошибке.

Любые идеи или даже просто толчок в правильном направлении были бы замечательными. Рад работать над собой, но я застрял на этом некоторое время (даже начинал несколько раз).

Заранее спасибо, Мэтт

EDIT: добавлен knife.rb (с заменой конфиденциальной информации)

$ cat .chef/knife.rb 
# See https://docs.getchef.com/config_rb_knife.html for more information on knife configuration options

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "<me>"
client_key               "#{current_dir}/<me>.pem"
validation_client_name   "merin-validator"
validation_key           "#{current_dir}/merin-validator.pem"
chef_server_url          "https://chef-master.example.com/organizations/merin"
cookbook_path            ["#{current_dir}/../cookbooks"]

person Matt P    schedule 06.08.2015    source источник
comment
как выглядит твой knife.rb?   -  person StephenKing    schedule 06.08.2015
comment
Я добавил свой конфиг knife.rb в основной пост   -  person Matt P    schedule 06.08.2015
comment
У вас есть что-то в вашем ~/.ssh/config, что SSH-клиент ruby ​​может не понять?   -  person StephenKing    schedule 06.08.2015
comment
Бинго! Спасибо, Стивен Кинг :)   -  person Matt P    schedule 06.08.2015


Ответы (2)


Спасибо Стивену Кингу за ответ

Мой .ssh/config содержал строку, похожую на следующую:

Host example  # Blah blah (for blah)

Как только я переместил этот комментарий в отдельную строку, начал работать «ножевой бутстрап». Это было подтверждено и повторено с помощью «ножа ssh» впоследствии и повторного использования .ssh/config.

person Matt P    schedule 06.08.2015

Сегодня у меня была такая же проблема, и я застрял на некоторое время, пока не запустил команду начальной загрузки в режиме отладки, добавив параметр -V -V и проанализировав журналы.

knife bootstrap <ip-address> -V -V -x <username> -P <password> --sudo -N <node-name>

Я получил следующие журналы отладки

    DEBUG: Looking for bootstrap template in /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/bootstrap/templates
DEBUG: Found bootstrap template in /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/bootstrap/templates
DEBUG: Adding <node-ip-address>
/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:240:in `initialize': end pattern with unmatched parenthesis: /^(no$/i (RegexpError)
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:240:in `new'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:240:in `pattern2regex'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:115:in `block (2 levels) in load'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:115:in `select'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:115:in `block in load'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:81:in `foreach'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:81:in `load'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:64:in `block in for'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:63:in `each'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:63:in `inject'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb:63:in `for'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh.rb:262:in `configuration_for'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:231:in `session_options'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:258:in `block in session_from_list'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:255:in `each'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:255:in `session_from_list'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:174:in `configure_session'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/ssh.rb:541:in `run'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife/bootstrap.rb:392:in `run'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife.rb:416:in `block in run_with_pretty_exceptions'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/local_mode.rb:44:in `with_server_connectivity'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife.rb:415:in `run_with_pretty_exceptions'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/knife.rb:214:in `run'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/lib/chef/application/knife.rb:148:in `run'
    from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.7.2/bin/knife:25:in `<top (required)>'
    from /usr/local/bin/knife:50:in `load'
    from /usr/local/bin/knife:50:in `<main>'

Когда я заглянул в файл /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.0.2/lib/net/ssh/config.rb в моем экземпляре узла, первое, что я увидел, были комментарии:

The Net::SSH::Config class is used to parse OpenSSH configuration files,
  # and translates that syntax into the configuration syntax that Net::SSH
  # understands. This lets Net::SSH scripts read their configuration (to
  # some extent) from OpenSSH configuration files (~/.ssh/config, /etc/ssh_config,
  # and so forth).

мой файл ~/.ssh/config был правильным, но были проблемы с моим файлом /etc/ssh_config, в нем было несколько комментариев с () в одной строке, например: Host * # (no default). Я полностью избавился от файла ssh_config, так как он нигде не использовался в моей системе и снова успешно попробовал команду начальной загрузки ножа без каких-либо проблем :) Другой альтернативой могло быть исправление всех комментариев и избавление от () из комментариев.

person sjaiswal    schedule 10.03.2016