Получите «ArgumentError» с Chef-клиентом и рецептом

Я пытаюсь выполнить рецепт шеф-повара с шеф-клиентом, мой рецепт:

require 'chef/provisioning/docker_driver'
machine 'wario' do
    recipe 'openssh::default'
    machine_options :docker_options => {
      :base_image => {
          :name => 'ubuntu',
          :repository => 'ubuntu',
          :tag => '14.04'
      },
      :command => '/usr/sbin/sshd -p 8022 -D'
    }

но при выполнении этого рецепта (и любого другого) получите следующее:

[2016-01-25T09:22:03-05:00] WARN: No config file found or specified on command line, using command line options.
[2016-01-25T09:22:03-05:00] WARN: No cookbooks directory found at or above current directory.  Assuming /home/rizotas/Documents/safari.
Starting Chef Client, version 12.6.0
resolving cookbooks for run list: []
Synchronizing Cookbooks:
Compiling Cookbooks...
[2016-01-25T09:22:05-05:00] WARN: Node myHost has an empty run list.
Converging 1 resources
Recipe: @recipe_files::/home/rizotas/Documents/safari/ssh.rb
  * machine[wario] action converge
    - update node wario at chefzero://localhost:8889
    -   update normal.chef_provisioning.reference.allocated_at from "2016-01-25 14:18:49 UTC" to "2016-01-25 14:22:05 UTC"
    -   add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
    -   add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
    -   remove normal.chef_provisioning.reference.docker_options.base_image
    -   remove normal.chef_provisioning.reference.docker_options.command
    -   update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
    - update node wario at chefzero://localhost:8889
    -   add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
    -   add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
    -   remove normal.chef_provisioning.reference.docker_options.base_image
    -   remove normal.chef_provisioning.reference.docker_options.command
    -   update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
    - update node wario at chefzero://localhost:8889
    -   add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
    -   add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
    -   remove normal.chef_provisioning.reference.docker_options.base_image
    -   remove normal.chef_provisioning.reference.docker_options.command
    -   update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
    ================================================================================
    Error executing action `converge` on resource 'machine[wario]'
    ================================================================================
    
    ArgumentError
    -------------
    invalid byte sequence in UTF-8
    
    Resource Declaration:
    ---------------------
    # In /home/rizotas/Documents/safari/ssh.rb
    
      2: machine 'wario' do
      3:    recipe 'openssh::default'
      4:    machine_options :docker_options => {
      5:      :base_image => {
      6:          :name => 'ubuntu',
      7:          :repository => 'ubuntu',
      8:          :tag => '14.04'
      9:      },
     10:      :command => '/usr/sbin/sshd -p 8022 -D'
     11:    }
     12: end
    
    Compiled Resource:
    ------------------
    # Declared in /home/rizotas/Documents/safari/ssh.rb:2:in `from_file'
    
    machine("wario") do
      action [:converge]
      retries 0
      retry_delay 2
      default_guard_interpreter :default
      chef_server {:chef_server_url=>"chefzero://localhost:8889", :options=>{:client_name=>"myHost", :signing_key_filename=>nil, :api_version=>"0"}}
      driver "docker"
      machine_options {:docker_options=>{:base_image=>{:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}, :command=>"/usr/sbin/sshd -p 8022 -D"}}
      declared_type :machine
      cookbook_name "@recipe_files"
      recipe_name "/home/rizotas/Documents/safari/ssh.rb"
      run_list_modifiers [#<Chef::RunList::RunListItem:0x007f087ca79528 @version=nil, @type=:recipe, @name="openssh::default">]
    end
    

Running handlers:
[2016-01-25T09:22:07-05:00] ERROR: Running exception handlers
Running handlers complete
[2016-01-25T09:22:07-05:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 04 seconds
[2016-01-25T09:22:07-05:00] FATAL: Stacktrace dumped to /home/rizotas/.chef/local-mode-cache/cache/chef-stacktrace.out
[2016-01-25T09:22:07-05:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-01-25T09:22:07-05:00] ERROR: machine[wario] (@recipe_files::/home/rizotas/Documents/safari/ssh.rb line 2) had an error: ArgumentError: invalid byte sequence in UTF-8
[2016-01-25T09:22:07-05:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

Я не знаю, почему это ArgumentError. Синтаксис Ruby в порядке. Ruby версия 1.8.7 Chef версия 12.5.1

Как я могу это решить?

Спасибо :)

Обновления:

1:

Я пробовал с Ruby 1.9, Ruby 2.1.7 и Ruby 2.0.0.

2:

chef-stacktrace.out файл:

Generated at 2016-01-25 11:43:14 -0500
ArgumentError: machine[wario] (@recipe_files::/home/rizotas/Documents/safari/creating-containers/create-containers.rb line 4) had an error: ArgumentError: invalid byte sequence in UTF-8
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:137:in `split'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:137:in `block in ps'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:114:in `foreach'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:114:in `ps'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-docker-0.7/lib/chef/provisioning/docker_driver/docker_transport.rb:230:in `using_boot2docker?'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-docker-0.7/lib/chef/provisioning/docker_driver/docker_transport.rb:193:in `make_url_available_to_remote'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/machine/basic_machine.rb:75:in `make_url_available_to_remote'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/convergence_strategy/precreate_chef_objects.rb:32:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/convergence_strategy/install_cached.rb:47:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/machine/basic_machine.rb:17:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provider/machine.rb:58:in `block in <class:Machine>'
(eval):2:in `block in action_converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:360:in `instance_eval'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:360:in `compile_and_converge_action'
(eval):2:in `action_converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:144:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource.rb:596:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:74:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `block (2 levels) in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `each'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `block in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/resource_list.rb:83:in `block in execute_each_resource'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:116:in `call'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:116:in `call_iterator_block'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:104:in `iterate'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/resource_list.rb:81:in `execute_each_resource'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:105:in `converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:658:in `block in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:653:in `catch'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:653:in `converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:692:in `converge_and_save'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:271:in `run'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:261:in `block in fork_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:249:in `fork'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:249:in `fork_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:215:in `block in run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/local_mode.rb:44:in `with_server_connectivity'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:203:in `run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:413:in `block in interval_run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:403:in `loop'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:403:in `interval_run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:393:in `run_application'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:58:in `run'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/bin/chef-client:26:in `<top (required)>'
/usr/local/bin/chef-client:23:in `load'
/usr/local/bin/chef-client:23:in `<main>'

person aslheyrr    schedule 25.01.2016    source источник
comment
Убедитесь, что: (@recipe_files::/home/rizotas/Documents/safari/ssh.rb line 2) had an error: ArgumentError: invalid byte sequence in UTF-8 (возможно, есть какой-то невидимый специальный символ)   -  person StephenKing    schedule 25.01.2016
comment
Я пробовал с github.com/chef/chef-provisioning-docker/blob/master/test/ и получить ту же ошибку   -  person aslheyrr    schedule 25.01.2016
comment
Не могли бы вы взглянуть на файл /home/rizotas/.chef/local-mode-cache/cache/chef-stacktrace.out и посмотреть, есть ли еще какая-то информация?   -  person zuazo    schedule 25.01.2016


Ответы (3)


Повару 12.5.1 требуется Ruby 2 или выше.

Ruby 1.8.7 давно достиг EOL.

Попробуйте обновить версию Ruby.

Обновите после прочтения вашего chef-stacktrace.out вывода:

Следующее код из sys-proctable gem кажется проблемой:

IO.read("/proc/#{file}/environ").split("\0").each{ |str|
  key, value = str.split('=')
  struct.environ[key] = value
}

Некоторый процесс имеет недопустимые символы UTF-8 в своей среде.

Здесь есть связанная проблема: djberg96/sys-proctable#19. В этом случае это было связано с dovecot/imap обработать environ файл, заполненный 0xab символами. Возможно, у вас такая же проблема с Dovecot или другим процессом, который ведет себя аналогично.

Они исправили это, установив внешнюю кодировку по умолчанию:

Encoding.default_external = Encoding::ASCII_8BIT

Я рекомендую вам попытаться остановить этот процесс или, возможно, исправить его среду, если это возможно.

Основываясь на ответе @WattsInABox, вы можете искать файлы environ, используя ag:

# ag "[\x80-\xFF]" /proc/*/environ

Другой возможный подход — открыть задачу в sys-proctable gem.

person zuazo    schedule 25.01.2016
comment
OK. Я обновил ответ после прочтения вывода stacktrace. - person zuazo; 25.01.2016
comment
добавление Encoding.default_external = Encoding::ASCII_8BIT к рецепту решило ошибку... но решение ужасное. Спасибо @zuazo - person aslheyrr; 25.01.2016

Я дважды проверил ваш вывод на наличие символов UTF-8 и ничего не нашел. Итак, как было сказано в комментарии и учитывая трассировку стека, у вас есть некоторые символы UTF-8 в вашем ssh.rb (внутри вашего репозитория шеф-повара-home/rizotas/Documents/safari/ssh.rb). Это файл, который вы написали, потому что он звучит как один из файлов, которые обычно включаются в шеф-повар?

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

Вещи, которые я бы попробовал, в произвольном порядке:

  1. Обновите ruby ​​просто потому, что это легко с такими вещами, как RVM и, как сказал @zuazo, 1.8 - это EOL
  2. Запустите ag (серебряный поисковик) на ssh.rb, чтобы убедиться, что в нем нет символов UTF-8 https://github.com/ggreer/the_silver_searcher

    ag "[\x80-\xFF]" ssh.rb

  3. Дважды проверьте наличие ошибок в кулинарной книге OpenSSH в Интернете, чтобы убедиться, что это не известная проблема.
person WattsInABox    schedule 25.01.2016

Вы должны использовать установщики ChefDK для своей рабочей станции. Мы больше не поддерживаем установку через гемы для общего использования (читай: это работает и будет продолжать работать, но вам нужно правильно настроить свою среду).

person coderanger    schedule 25.01.2016