aslheyrr
aslheyrr

Reputation: 372

Get 'ArgumentError' with Chef-client and recipe

I am trying to run follow Chef recipe with chef-client, my recipe is:

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'
    }

but when execute that recipe (and any one) get this:

[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)

I don't know why that ArgumentError. Ruby syntax is OK. Ruby version 1.8.7 Chef version 12.5.1

How I can solve it?

Thanks :)

Updates:

1:

I have tried with Ruby 1.9, Ruby 2.1.7 and Ruby 2.0.0

2:

chef-stacktrace.out file:

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>'

Upvotes: 2

Views: 776

Answers (3)

coderanger
coderanger

Reputation: 54267

You should be using the ChefDK installers for your workstation. We do not support installing via gems anymore for general usage (read: it works and will continue to work, but you need to handle getting your environment set up correctly).

Upvotes: 0

zuazo
zuazo

Reputation: 5758

Chef 12.5.1 requires Ruby 2 or higher.

Ruby 1.8.7 reached EOL long ago.

Try upgrading your Ruby version.

Update after reading your chef-stacktrace.out output:

The following code from sys-proctable gem seems to be the problem:

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

Some process has invalid UTF-8 chars in its environment.

There is a related issue here: djberg96/sys-proctable#19. In that case it was related to the dovecot/imap process environ file filled with 0xab chars. Maybe you are having the same problem with Dovecot or other process that behaves similarly.

They fixed it setting the default external encoding:

Encoding.default_external = Encoding::ASCII_8BIT

I recommend you to try to stop this process or maybe to fix its environment if possible.

Based on @WattsInABox answer, you can search the environ files using ag:

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

Another possible approach is to open an issue in the sys-proctable gem.

Upvotes: 1

WattsInABox
WattsInABox

Reputation: 4636

I double-checked your output for UTF-8 characters and found none. So, as was said in a comment and given the stack trace, you have some UTF-8 character(s) in your ssh.rb (inside your chef repo- home/rizotas/Documents/safari/ssh.rb). Is that a file you wrote b/c it sounds like one of the files that's normally included in chef?

I'm not entirely sure it's related to your ruby version, although I guess it could be. The thing is, chef is bundled with standalone ruby now so I'm doubting that's it.

Things I would try, in no particular order:

  1. Update ruby just b/c it's easy with things like RVM and like @zuazo said, 1.8 is EOL
  2. Run ag (the silver searcher) on the ssh.rb to make sure there's no UTF-8 characters in it https://github.com/ggreer/the_silver_searcher

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

  3. Double check for bugs in the OpenSSH cookbook online to make sure this isn't a known issue.

Upvotes: 0

Related Questions