jkeiser / knife-essentials

Knife commands to treat the Chef server like a filesystem
Apache License 2.0
81 stars 27 forks source link

'knife upload' fails on databag item containing 'name' field. #66

Closed desbonnm closed 12 years ago

desbonnm commented 12 years ago

knife upload raises an error when uploading a databag item containing a name field, where this field differs from the databag item filename.

E.g.:

$ mkdir -p data_bags/test
$ cat > data_bags/test/test_item.json
{
"id": "test_item",
"name": "test_name"
}
$ knife upload data_bags/test
ERROR: RuntimeError: Name in remote/data_bags/test/test_item.json must be 'test_item' (is 'test_name')

(There's a full stack trace from 'knife -V -V' below).

Reading the source (lib/chef_fs/file_system/rest_list_dir.rb), it looks like there is a check that the filename of a .json file being uploaded must match the internal name field in the json object if it exists (or the id field otherwise). I cannot find any reference to a name field in http://wiki.opscode.com/display/chef/Data+Bags (or via google), which leads me to wonder why knife upload treats this field specially.

Is this a bug in knife upload, or a case of bad usage of the name field in a databag item?

Thanks, manuel.

$ knife upload -V -V data_bags/test
...snip...
/home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system/rest_list_dir.rb:43:in `create_child': Name in remote/data_bags/test/test_item.json must be 'test_item' (is 'test_name') (RuntimeError)
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:259:in `copy_entries'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:287:in `block in copy_entries'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:286:in `each'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:286:in `copy_entries'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:102:in `block in copy_to'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:130:in `block in list_pairs'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:16:in `call'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:16:in `list'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:28:in `list'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:28:in `list'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:127:in `list_pairs'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef_fs/file_system.rb:99:in `copy_to'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef/knife/upload.rb:41:in `block in run'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef/knife/upload.rb:40:in `each'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/knife-essentials-0.7.5/lib/chef/knife/upload.rb:40:in `run'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/chef-0.10.8/lib/chef/knife.rb:391:in `run_with_pretty_exceptions'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/chef-0.10.8/lib/chef/knife.rb:166:in `run'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/chef-0.10.8/lib/chef/application/knife.rb:128:in `run'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/gems/chef-0.10.8/bin/knife:25:in `<top (required)>'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/bin/knife:19:in `load'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/bin/knife:19:in `<main>'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `eval'
    from /home/desbonne/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `<main>'
jkeiser commented 12 years ago

Yep, that's a bug! There are more paths to check that thing than I thought. Thanks for the detailed report. I'll get something out shortly.

jkeiser commented 12 years ago

This is in the latest knife-essentials (0.7.6). Let me know if it works for you :) Thanks again!

desbonnm commented 12 years ago

Yep - looks good. Thanks for the quick turnaround.