knife 18.6.2 → 18.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +23 -27
- data/LICENSE +201 -201
- data/Rakefile +33 -33
- data/bin/knife +24 -24
- data/knife.gemspec +65 -64
- data/lib/chef/application/knife.rb +237 -237
- data/lib/chef/chef_fs/knife.rb +162 -162
- data/lib/chef/knife/acl_add.rb +57 -57
- data/lib/chef/knife/acl_base.rb +183 -183
- data/lib/chef/knife/acl_bulk_add.rb +78 -78
- data/lib/chef/knife/acl_bulk_remove.rb +83 -83
- data/lib/chef/knife/acl_remove.rb +62 -62
- data/lib/chef/knife/acl_show.rb +56 -56
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +160 -160
- data/lib/chef/knife/bootstrap/client_builder.rb +212 -212
- data/lib/chef/knife/bootstrap/templates/README.md +11 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +249 -249
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +278 -278
- data/lib/chef/knife/bootstrap/train_connector.rb +334 -334
- data/lib/chef/knife/bootstrap.rb +1229 -1219
- data/lib/chef/knife/client_bulk_delete.rb +104 -104
- data/lib/chef/knife/client_create.rb +140 -140
- data/lib/chef/knife/client_delete.rb +62 -62
- data/lib/chef/knife/client_edit.rb +52 -52
- data/lib/chef/knife/client_key_create.rb +73 -73
- data/lib/chef/knife/client_key_delete.rb +80 -80
- data/lib/chef/knife/client_key_edit.rb +83 -83
- data/lib/chef/knife/client_key_list.rb +73 -73
- data/lib/chef/knife/client_key_show.rb +80 -80
- data/lib/chef/knife/client_list.rb +41 -41
- data/lib/chef/knife/client_reregister.rb +58 -58
- data/lib/chef/knife/client_show.rb +48 -48
- data/lib/chef/knife/config_get.rb +39 -39
- data/lib/chef/knife/config_get_profile.rb +37 -37
- data/lib/chef/knife/config_list.rb +139 -139
- data/lib/chef/knife/config_list_profiles.rb +37 -37
- data/lib/chef/knife/config_show.rb +127 -127
- data/lib/chef/knife/config_use.rb +61 -61
- data/lib/chef/knife/config_use_profile.rb +47 -47
- data/lib/chef/knife/configure.rb +150 -150
- data/lib/chef/knife/configure_client.rb +48 -48
- data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
- data/lib/chef/knife/cookbook_delete.rb +151 -151
- data/lib/chef/knife/cookbook_download.rb +142 -142
- data/lib/chef/knife/cookbook_list.rb +47 -47
- data/lib/chef/knife/cookbook_metadata.rb +106 -106
- data/lib/chef/knife/cookbook_metadata_from_file.rb +49 -49
- data/lib/chef/knife/cookbook_show.rb +98 -98
- data/lib/chef/knife/cookbook_upload.rb +313 -313
- data/lib/chef/knife/core/bootstrap_context.rb +274 -274
- data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
- data/lib/chef/knife/core/cookbook_site_streaming_uploader.rb +249 -249
- data/lib/chef/knife/core/formatting_options.rb +49 -49
- data/lib/chef/knife/core/gem_glob_loader.rb +134 -134
- data/lib/chef/knife/core/generic_presenter.rb +238 -238
- data/lib/chef/knife/core/hashed_command_loader.rb +100 -100
- data/lib/chef/knife/core/node_editor.rb +130 -130
- data/lib/chef/knife/core/node_presenter.rb +133 -133
- data/lib/chef/knife/core/object_loader.rb +115 -115
- data/lib/chef/knife/core/status_presenter.rb +147 -147
- data/lib/chef/knife/core/subcommand_loader.rb +208 -208
- data/lib/chef/knife/core/text_formatter.rb +85 -85
- data/lib/chef/knife/core/ui.rb +339 -339
- data/lib/chef/knife/core/windows_bootstrap_context.rb +441 -443
- data/lib/chef/knife/data_bag_create.rb +81 -81
- data/lib/chef/knife/data_bag_delete.rb +49 -49
- data/lib/chef/knife/data_bag_edit.rb +74 -74
- data/lib/chef/knife/data_bag_from_file.rb +113 -113
- data/lib/chef/knife/data_bag_list.rb +42 -42
- data/lib/chef/knife/data_bag_secret_options.rb +122 -122
- data/lib/chef/knife/data_bag_show.rb +69 -69
- data/lib/chef/knife/delete.rb +125 -125
- data/lib/chef/knife/deps.rb +156 -156
- data/lib/chef/knife/diff.rb +83 -83
- data/lib/chef/knife/download.rb +85 -85
- data/lib/chef/knife/edit.rb +88 -88
- data/lib/chef/knife/environment_compare.rb +128 -128
- data/lib/chef/knife/environment_create.rb +52 -52
- data/lib/chef/knife/environment_delete.rb +44 -44
- data/lib/chef/knife/environment_edit.rb +44 -44
- data/lib/chef/knife/environment_from_file.rb +84 -84
- data/lib/chef/knife/environment_list.rb +41 -41
- data/lib/chef/knife/environment_show.rb +47 -47
- data/lib/chef/knife/exec.rb +99 -99
- data/lib/chef/knife/group_add.rb +55 -55
- data/lib/chef/knife/group_create.rb +49 -49
- data/lib/chef/knife/group_destroy.rb +53 -53
- data/lib/chef/knife/group_list.rb +43 -43
- data/lib/chef/knife/group_remove.rb +56 -56
- data/lib/chef/knife/group_show.rb +49 -49
- data/lib/chef/knife/key_create.rb +112 -112
- data/lib/chef/knife/key_create_base.rb +50 -50
- data/lib/chef/knife/key_delete.rb +55 -55
- data/lib/chef/knife/key_edit.rb +118 -118
- data/lib/chef/knife/key_edit_base.rb +55 -55
- data/lib/chef/knife/key_list.rb +90 -90
- data/lib/chef/knife/key_list_base.rb +45 -45
- data/lib/chef/knife/key_show.rb +53 -53
- data/lib/chef/knife/license.rb +52 -52
- data/lib/chef/knife/list.rb +177 -177
- data/lib/chef/knife/node_bulk_delete.rb +75 -75
- data/lib/chef/knife/node_create.rb +47 -47
- data/lib/chef/knife/node_delete.rb +46 -46
- data/lib/chef/knife/node_edit.rb +70 -70
- data/lib/chef/knife/node_environment_set.rb +53 -53
- data/lib/chef/knife/node_from_file.rb +51 -51
- data/lib/chef/knife/node_list.rb +44 -44
- data/lib/chef/knife/node_policy_set.rb +79 -79
- data/lib/chef/knife/node_run_list_add.rb +104 -104
- data/lib/chef/knife/node_run_list_remove.rb +67 -67
- data/lib/chef/knife/node_run_list_set.rb +66 -66
- data/lib/chef/knife/node_show.rb +63 -63
- data/lib/chef/knife/null.rb +12 -12
- data/lib/chef/knife/org_create.rb +70 -70
- data/lib/chef/knife/org_delete.rb +32 -32
- data/lib/chef/knife/org_edit.rb +48 -48
- data/lib/chef/knife/org_list.rb +44 -44
- data/lib/chef/knife/org_show.rb +31 -31
- data/lib/chef/knife/org_user_add.rb +62 -62
- data/lib/chef/knife/org_user_remove.rb +103 -103
- data/lib/chef/knife/raw.rb +123 -123
- data/lib/chef/knife/recipe_list.rb +32 -32
- data/lib/chef/knife/rehash.rb +50 -50
- data/lib/chef/knife/role_bulk_delete.rb +66 -66
- data/lib/chef/knife/role_create.rb +53 -53
- data/lib/chef/knife/role_delete.rb +46 -46
- data/lib/chef/knife/role_edit.rb +45 -45
- data/lib/chef/knife/role_env_run_list_add.rb +87 -87
- data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_env_run_list_set.rb +70 -70
- data/lib/chef/knife/role_from_file.rb +51 -51
- data/lib/chef/knife/role_list.rb +42 -42
- data/lib/chef/knife/role_run_list_add.rb +87 -87
- data/lib/chef/knife/role_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_run_list_remove.rb +56 -56
- data/lib/chef/knife/role_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_run_list_set.rb +69 -69
- data/lib/chef/knife/role_show.rb +48 -48
- data/lib/chef/knife/search.rb +194 -194
- data/lib/chef/knife/serve.rb +65 -65
- data/lib/chef/knife/show.rb +72 -72
- data/lib/chef/knife/ssh.rb +657 -657
- data/lib/chef/knife/ssl_check.rb +284 -284
- data/lib/chef/knife/ssl_fetch.rb +162 -162
- data/lib/chef/knife/status.rb +95 -95
- data/lib/chef/knife/supermarket_download.rb +119 -119
- data/lib/chef/knife/supermarket_install.rb +192 -192
- data/lib/chef/knife/supermarket_list.rb +76 -76
- data/lib/chef/knife/supermarket_search.rb +53 -53
- data/lib/chef/knife/supermarket_share.rb +166 -166
- data/lib/chef/knife/supermarket_show.rb +66 -66
- data/lib/chef/knife/supermarket_unshare.rb +62 -62
- data/lib/chef/knife/tag_create.rb +52 -52
- data/lib/chef/knife/tag_delete.rb +60 -60
- data/lib/chef/knife/tag_list.rb +47 -47
- data/lib/chef/knife/upload.rb +87 -87
- data/lib/chef/knife/user_create.rb +180 -180
- data/lib/chef/knife/user_delete.rb +151 -151
- data/lib/chef/knife/user_dissociate.rb +42 -42
- data/lib/chef/knife/user_edit.rb +94 -94
- data/lib/chef/knife/user_invite_add.rb +43 -43
- data/lib/chef/knife/user_invite_list.rb +34 -34
- data/lib/chef/knife/user_invite_rescind.rb +63 -63
- data/lib/chef/knife/user_key_create.rb +73 -73
- data/lib/chef/knife/user_key_delete.rb +80 -80
- data/lib/chef/knife/user_key_edit.rb +83 -83
- data/lib/chef/knife/user_key_list.rb +73 -73
- data/lib/chef/knife/user_key_show.rb +80 -80
- data/lib/chef/knife/user_list.rb +43 -43
- data/lib/chef/knife/user_password.rb +70 -70
- data/lib/chef/knife/user_reregister.rb +59 -59
- data/lib/chef/knife/user_show.rb +52 -52
- data/lib/chef/knife/version.rb +24 -24
- data/lib/chef/knife/xargs.rb +282 -282
- data/lib/chef/knife/yaml_convert.rb +91 -91
- data/lib/chef/knife.rb +677 -677
- data/lib/chef/utils/licensing_config.rb +9 -9
- data/lib/chef/utils/licensing_handler.rb +72 -46
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
- data/spec/data/apt/var/www/apt/conf/distributions +7 -7
- data/spec/data/apt/var/www/apt/conf/incoming +4 -4
- data/spec/data/apt/var/www/apt/conf/pulls +3 -3
- data/spec/data/apt/var/www/apt/db/version +4 -4
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
- data/spec/data/bootstrap/no_proxy.erb +2 -2
- data/spec/data/bootstrap/secret.erb +9 -9
- data/spec/data/bootstrap/test-hints.erb +12 -12
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
- data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
- data/spec/data/client.d_00/00-foo.rb +2 -2
- data/spec/data/client.d_00/01-bar.rb +1 -1
- data/spec/data/client.d_00/02-strings.rb +2 -2
- data/spec/data/client.d_00/bar +1 -1
- data/spec/data/client.d_01/foo/bar.rb +1 -1
- data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
- data/spec/data/config.rb +6 -6
- data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
- data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
- data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
- data/spec/data/cookbooks/apache2/metadata.json +33 -33
- data/spec/data/cookbooks/apache2/metadata.rb +2 -2
- data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
- data/spec/data/cookbooks/borken/metadata.rb +2 -2
- data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
- data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
- data/spec/data/cookbooks/chefignore +8 -8
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
- data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
- data/spec/data/cookbooks/irssi/files/default/irssi.response +2 -2
- data/spec/data/cookbooks/java/files/default/java.response +1 -1
- data/spec/data/cookbooks/java/metadata.json +33 -33
- data/spec/data/cookbooks/java/metadata.rb +2 -2
- data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
- data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
- data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
- data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
- data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
- data/spec/data/cookbooks/openldap/metadata.rb +8 -8
- data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
- data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
- data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
- data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
- data/spec/data/cookbooks/preseed/metadata.rb +2 -2
- data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
- data/spec/data/cookbooks/starter/chefignore +8 -8
- data/spec/data/cookbooks/starter/metadata.rb +2 -2
- data/spec/data/cookbooks/starter/recipes/default.rb +4 -4
- data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
- data/spec/data/cookbooks/wget/files/default/wget.response +2 -2
- data/spec/data/definitions/test.rb +4 -4
- data/spec/data/environment-config.rb +4 -4
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
- data/spec/data/fileedit/hosts +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
- data/spec/data/kitchen/chefignore +6 -6
- data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
- data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
- data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
- data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
- data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
- data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
- data/spec/data/knife_subcommand/test_yourself.rb +21 -21
- data/spec/data/lwrp/providers/buck_passer.rb +28 -28
- data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
- data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
- data/spec/data/lwrp/resources/bar.rb +4 -4
- data/spec/data/lwrp/resources/buck_passer.rb +6 -6
- data/spec/data/lwrp/resources/buck_passer_2.rb +4 -4
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +4 -4
- data/spec/data/lwrp/resources/foo.rb +6 -6
- data/spec/data/lwrp/resources/inline_compiler.rb +4 -4
- data/spec/data/lwrp/resources/monkey_name_printer.rb +6 -6
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +4 -4
- data/spec/data/lwrp/resources/thumb_twiddler.rb +4 -4
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +3 -3
- data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -1
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
- data/spec/data/lwrp_override/resources/foo.rb +11 -11
- data/spec/data/mac_users/10.9.plist.xml +560 -560
- data/spec/data/mac_users/10.9.shadow.xml +21 -21
- data/spec/data/metadata/quick_start/metadata.rb +14 -14
- data/spec/data/mixin/invalid_data.rb +3 -3
- data/spec/data/mixin/real_data.rb +2 -2
- data/spec/data/nested.json +2 -2
- data/spec/data/nodes/default.rb +15 -15
- data/spec/data/nodes/test.example.com.rb +17 -17
- data/spec/data/nodes/test.rb +15 -15
- data/spec/data/null_config.rb +1 -1
- data/spec/data/object_loader/environments/test.json +7 -7
- data/spec/data/object_loader/environments/test.rb +2 -2
- data/spec/data/object_loader/environments/test_json_class.json +8 -8
- data/spec/data/object_loader/nodes/test.json +7 -7
- data/spec/data/object_loader/nodes/test.rb +2 -2
- data/spec/data/object_loader/nodes/test_json_class.json +8 -8
- data/spec/data/object_loader/roles/test.json +7 -7
- data/spec/data/object_loader/roles/test.rb +2 -2
- data/spec/data/object_loader/roles/test_json_class.json +8 -8
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/prefer_metadata_json/metadata.json +51 -51
- data/spec/data/prefer_metadata_json/metadata.rb +6 -6
- data/spec/data/recipes/test.rb +7 -7
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
- data/spec/data/rubygems.org/sexp_processor-info +49 -49
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file +1 -1
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +2 -2
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +2 -2
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
- data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
- data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
- data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +2 -2
- data/spec/data/run_context/nodes/run_context.rb +5 -5
- data/spec/data/sample_msu1.xml +10 -10
- data/spec/data/sample_msu2.xml +14 -14
- data/spec/data/sample_msu3.xml +16 -16
- data/spec/data/search_queries_to_transform.txt +98 -98
- data/spec/data/shef-config.rb +11 -11
- data/spec/data/snap_package/async_result_success.json +6 -6
- data/spec/data/snap_package/change_id_result.json +175 -175
- data/spec/data/snap_package/find_result_failure.json +10 -10
- data/spec/data/snap_package/find_result_success.json +70 -70
- data/spec/data/snap_package/get_by_name_result_failure.json +10 -10
- data/spec/data/snap_package/get_by_name_result_success.json +38 -38
- data/spec/data/snap_package/get_conf_success.json +10 -10
- data/spec/data/snap_package/result_failure.json +9 -9
- data/spec/data/ssl/5e707473.0 +18 -18
- data/spec/data/ssl/chef-rspec.cert +27 -27
- data/spec/data/ssl/chef-rspec.key +27 -27
- data/spec/data/ssl/key.pem +15 -15
- data/spec/data/ssl/private_key.pem +27 -27
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
- data/spec/data/standalone_cookbook/chefignore +9 -9
- data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
- data/spec/data/templates/failed.erb +5 -5
- data/spec/data/trusted_certs/example.crt +22 -22
- data/spec/data/trusted_certs/example_no_cn.crt +36 -36
- data/spec/data/trusted_certs/intermediate.pem +27 -27
- data/spec/data/trusted_certs/opscode.pem +57 -57
- data/spec/data/trusted_certs/root.pem +22 -22
- data/spec/data/windows_certificates/base64_test.cer +20 -20
- data/spec/data/windows_certificates/othertest.cer +20 -20
- data/spec/data/windows_certificates/test.cer +20 -20
- data/spec/data/windows_certificates/test.pem +20 -20
- data/spec/functional/configure_spec.rb +33 -33
- data/spec/functional/cookbook_delete_spec.rb +157 -156
- data/spec/functional/exec_spec.rb +55 -55
- data/spec/functional/rehash_spec.rb +39 -39
- data/spec/functional/smoke_test.rb +42 -42
- data/spec/functional/ssh_spec.rb +352 -352
- data/spec/functional/version_spec.rb +26 -26
- data/spec/integration/chef_fs_data_store_spec.rb +557 -557
- data/spec/integration/chef_repo_path_spec.rb +962 -962
- data/spec/integration/chef_repository_file_system_spec.rb +200 -200
- data/spec/integration/chefignore_spec.rb +301 -301
- data/spec/integration/client_bulk_delete_spec.rb +131 -131
- data/spec/integration/client_create_spec.rb +70 -70
- data/spec/integration/client_delete_spec.rb +64 -64
- data/spec/integration/client_key_create_spec.rb +66 -66
- data/spec/integration/client_key_delete_spec.rb +43 -43
- data/spec/integration/client_key_list_spec.rb +61 -61
- data/spec/integration/client_key_show_spec.rb +45 -45
- data/spec/integration/client_list_spec.rb +49 -49
- data/spec/integration/client_show_spec.rb +37 -37
- data/spec/integration/commands_spec.rb +55 -55
- data/spec/integration/common_options_spec.rb +174 -174
- data/spec/integration/config_list_spec.rb +220 -220
- data/spec/integration/config_show_spec.rb +192 -192
- data/spec/integration/config_use_spec.rb +198 -198
- data/spec/integration/cookbook_api_ipv6_spec.rb +113 -113
- data/spec/integration/cookbook_bulk_delete_spec.rb +65 -65
- data/spec/integration/cookbook_download_spec.rb +72 -72
- data/spec/integration/cookbook_list_spec.rb +55 -55
- data/spec/integration/cookbook_show_spec.rb +149 -149
- data/spec/integration/cookbook_upload_spec.rb +128 -128
- data/spec/integration/data_bag_create_spec.rb +125 -125
- data/spec/integration/data_bag_delete_spec.rb +59 -59
- data/spec/integration/data_bag_edit_spec.rb +105 -105
- data/spec/integration/data_bag_from_file_spec.rb +116 -116
- data/spec/integration/data_bag_list_spec.rb +44 -44
- data/spec/integration/data_bag_show_spec.rb +95 -95
- data/spec/integration/delete_spec.rb +1018 -1018
- data/spec/integration/deps_spec.rb +703 -703
- data/spec/integration/diff_spec.rb +605 -605
- data/spec/integration/download_spec.rb +1336 -1336
- data/spec/integration/environment_compare_spec.rb +75 -75
- data/spec/integration/environment_create_spec.rb +41 -41
- data/spec/integration/environment_delete_spec.rb +37 -37
- data/spec/integration/environment_from_file_spec.rb +116 -116
- data/spec/integration/environment_list_spec.rb +42 -42
- data/spec/integration/environment_show_spec.rb +77 -77
- data/spec/integration/list_spec.rb +1060 -1060
- data/spec/integration/node_bulk_delete_spec.rb +52 -52
- data/spec/integration/node_create_spec.rb +47 -47
- data/spec/integration/node_delete_spec.rb +48 -48
- data/spec/integration/node_environment_set_spec.rb +46 -46
- data/spec/integration/node_from_file_spec.rb +59 -59
- data/spec/integration/node_list_spec.rb +45 -45
- data/spec/integration/node_run_list_add_spec.rb +54 -54
- data/spec/integration/node_run_list_remove_spec.rb +36 -36
- data/spec/integration/node_run_list_set_spec.rb +41 -41
- data/spec/integration/node_show_spec.rb +36 -36
- data/spec/integration/raw_spec.rb +297 -297
- data/spec/integration/redirection_spec.rb +64 -64
- data/spec/integration/role_bulk_delete_spec.rb +52 -52
- data/spec/integration/role_create_spec.rb +41 -41
- data/spec/integration/role_delete_spec.rb +48 -48
- data/spec/integration/role_from_file_spec.rb +96 -96
- data/spec/integration/role_list_spec.rb +45 -45
- data/spec/integration/role_show_spec.rb +51 -51
- data/spec/integration/search_node_spec.rb +40 -40
- data/spec/integration/serve_spec.rb +92 -92
- data/spec/integration/show_spec.rb +197 -197
- data/spec/integration/upload_spec.rb +1616 -1616
- data/spec/knife_spec_helper.rb +241 -241
- data/spec/support/chef_helpers.rb +79 -79
- data/spec/support/key_helpers.rb +102 -102
- data/spec/support/platform_helpers.rb +255 -255
- data/spec/support/platforms/prof/gc.rb +51 -51
- data/spec/support/platforms/prof/win32.rb +45 -45
- data/spec/support/platforms/win32/spec_service.rb +57 -57
- data/spec/support/recipe_dsl_helper.rb +83 -83
- data/spec/support/shared/context/config.rb +18 -18
- data/spec/support/shared/functional/knife.rb +37 -37
- data/spec/support/shared/integration/integration_helper.rb +122 -122
- data/spec/support/shared/integration/knife_support.rb +192 -192
- data/spec/support/shared/matchers/exit_with_code.rb +32 -32
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
- data/spec/support/shared/unit/knife_shared.rb +39 -39
- data/spec/support/shared/unit/mock_shellout.rb +49 -49
- data/spec/tiny_server.rb +193 -190
- data/spec/unit/application/knife_spec.rb +241 -241
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
- data/spec/unit/knife/bootstrap/train_connector_spec.rb +244 -244
- data/spec/unit/knife/bootstrap_spec.rb +2311 -2288
- data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
- data/spec/unit/knife/client_create_spec.rb +232 -232
- data/spec/unit/knife/client_delete_spec.rb +99 -99
- data/spec/unit/knife/client_edit_spec.rb +53 -53
- data/spec/unit/knife/client_list_spec.rb +34 -34
- data/spec/unit/knife/client_reregister_spec.rb +62 -62
- data/spec/unit/knife/client_show_spec.rb +52 -52
- data/spec/unit/knife/configure_client_spec.rb +81 -81
- data/spec/unit/knife/configure_spec.rb +190 -190
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
- data/spec/unit/knife/cookbook_download_spec.rb +255 -255
- data/spec/unit/knife/cookbook_list_spec.rb +88 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +72 -72
- data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
- data/spec/unit/knife/cookbook_show_spec.rb +253 -253
- data/spec/unit/knife/cookbook_upload_spec.rb +426 -426
- data/spec/unit/knife/core/bootstrap_context_spec.rb +287 -287
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
- data/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb +198 -198
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +242 -242
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +112 -112
- data/spec/unit/knife/core/node_editor_spec.rb +211 -211
- data/spec/unit/knife/core/object_loader_spec.rb +81 -81
- data/spec/unit/knife/core/status_presenter_spec.rb +54 -54
- data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
- data/spec/unit/knife/core/ui_spec.rb +656 -656
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +282 -238
- data/spec/unit/knife/data_bag_create_spec.rb +175 -175
- data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
- data/spec/unit/knife/data_bag_from_file_spec.rb +174 -174
- data/spec/unit/knife/data_bag_secret_options_spec.rb +173 -173
- data/spec/unit/knife/data_bag_show_spec.rb +139 -139
- data/spec/unit/knife/environment_compare_spec.rb +112 -112
- data/spec/unit/knife/environment_create_spec.rb +91 -91
- data/spec/unit/knife/environment_delete_spec.rb +71 -71
- data/spec/unit/knife/environment_edit_spec.rb +79 -79
- data/spec/unit/knife/environment_from_file_spec.rb +90 -90
- data/spec/unit/knife/environment_list_spec.rb +54 -54
- data/spec/unit/knife/environment_show_spec.rb +52 -52
- data/spec/unit/knife/key_create_spec.rb +223 -223
- data/spec/unit/knife/key_delete_spec.rb +133 -133
- data/spec/unit/knife/key_edit_spec.rb +264 -264
- data/spec/unit/knife/key_helper.rb +74 -74
- data/spec/unit/knife/key_list_spec.rb +216 -216
- data/spec/unit/knife/key_show_spec.rb +126 -126
- data/spec/unit/knife/license_spec.rb +89 -89
- data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
- data/spec/unit/knife/node_delete_spec.rb +77 -77
- data/spec/unit/knife/node_edit_spec.rb +116 -116
- data/spec/unit/knife/node_environment_set_spec.rb +61 -61
- data/spec/unit/knife/node_from_file_spec.rb +59 -59
- data/spec/unit/knife/node_list_spec.rb +62 -62
- data/spec/unit/knife/node_policy_set_spec.rb +122 -122
- data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
- data/spec/unit/knife/node_show_spec.rb +65 -65
- data/spec/unit/knife/org_create_spec.rb +76 -76
- data/spec/unit/knife/org_delete_spec.rb +41 -41
- data/spec/unit/knife/org_edit_spec.rb +49 -49
- data/spec/unit/knife/org_list_spec.rb +58 -58
- data/spec/unit/knife/org_show_spec.rb +45 -45
- data/spec/unit/knife/org_user_add_spec.rb +39 -39
- data/spec/unit/knife/raw_spec.rb +43 -43
- data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
- data/spec/unit/knife/role_create_spec.rb +80 -80
- data/spec/unit/knife/role_delete_spec.rb +67 -67
- data/spec/unit/knife/role_edit_spec.rb +77 -77
- data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
- data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
- data/spec/unit/knife/role_from_file_spec.rb +69 -69
- data/spec/unit/knife/role_list_spec.rb +54 -54
- data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
- data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
- data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
- data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
- data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
- data/spec/unit/knife/role_show_spec.rb +59 -59
- data/spec/unit/knife/search_spec.rb +147 -147
- data/spec/unit/knife/ssh_spec.rb +403 -403
- data/spec/unit/knife/ssl_check_spec.rb +256 -256
- data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
- data/spec/unit/knife/status_spec.rb +112 -112
- data/spec/unit/knife/supermarket_download_spec.rb +152 -152
- data/spec/unit/knife/supermarket_install_spec.rb +203 -203
- data/spec/unit/knife/supermarket_list_spec.rb +70 -70
- data/spec/unit/knife/supermarket_search_spec.rb +85 -85
- data/spec/unit/knife/supermarket_share_spec.rb +208 -208
- data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
- data/spec/unit/knife/tag_create_spec.rb +23 -23
- data/spec/unit/knife/tag_delete_spec.rb +25 -25
- data/spec/unit/knife/tag_list_spec.rb +23 -23
- data/spec/unit/knife/user_create_spec.rb +282 -282
- data/spec/unit/knife/user_delete_spec.rb +171 -171
- data/spec/unit/knife/user_edit_spec.rb +54 -54
- data/spec/unit/knife/user_list_spec.rb +73 -73
- data/spec/unit/knife/user_password_spec.rb +64 -64
- data/spec/unit/knife/user_reregister_spec.rb +56 -56
- data/spec/unit/knife/user_show_spec.rb +91 -91
- data/spec/unit/knife_spec.rb +637 -637
- data/spec/unit/utils/licensing_handler_spec.rb +140 -0
- metadata +36 -21
@@ -1,703 +1,703 @@
|
|
1
|
-
#
|
2
|
-
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require "knife_spec_helper"
|
19
|
-
require "support/shared/integration/integration_helper"
|
20
|
-
require "support/shared/context/config"
|
21
|
-
require "chef/knife/deps"
|
22
|
-
|
23
|
-
describe "knife deps", :workstation do
|
24
|
-
include IntegrationSupport
|
25
|
-
include KnifeSupport
|
26
|
-
|
27
|
-
context "local" do
|
28
|
-
when_the_repository "has a role with no run_list" do
|
29
|
-
before { file "roles/starring.json", {} }
|
30
|
-
it "knife deps reports no dependencies" do
|
31
|
-
knife("deps /roles/starring.json").should_succeed "/roles/starring.json\n"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
when_the_repository "has a role with a default run_list" do
|
36
|
-
before do
|
37
|
-
file "roles/starring.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
38
|
-
file "roles/minor.json", {}
|
39
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
40
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
41
|
-
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
42
|
-
file "cookbooks/soup/recipes/chicken.rb", ""
|
43
|
-
end
|
44
|
-
it "knife deps reports all dependencies" do
|
45
|
-
knife("deps /roles/starring.json").should_succeed <<~EOM
|
46
|
-
/roles/minor.json
|
47
|
-
/cookbooks/quiche
|
48
|
-
/cookbooks/soup
|
49
|
-
/roles/starring.json
|
50
|
-
EOM
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
when_the_repository "has a role with an env_run_list" do
|
55
|
-
before do
|
56
|
-
file "roles/starring.json", { "env_run_lists" => { "desert" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} } }
|
57
|
-
file "roles/minor.json", {}
|
58
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
59
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
60
|
-
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
61
|
-
file "cookbooks/soup/recipes/chicken.rb", ""
|
62
|
-
end
|
63
|
-
it "knife deps reports all dependencies" do
|
64
|
-
knife("deps /roles/starring.json").should_succeed <<~EOM
|
65
|
-
/roles/minor.json
|
66
|
-
/cookbooks/quiche
|
67
|
-
/cookbooks/soup
|
68
|
-
/roles/starring.json
|
69
|
-
EOM
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
when_the_repository "has a node with no environment or run_list" do
|
74
|
-
before { file "nodes/mort.json", {} }
|
75
|
-
it "knife deps reports just the node" do
|
76
|
-
knife("deps /nodes/mort.json").should_succeed "/nodes/mort.json\n"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
when_the_repository "has a node with an environment" do
|
80
|
-
before do
|
81
|
-
file "environments/desert.json", {}
|
82
|
-
file "nodes/mort.json", { "chef_environment" => "desert" }
|
83
|
-
end
|
84
|
-
it "knife deps reports just the node" do
|
85
|
-
knife("deps /nodes/mort.json").should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
when_the_repository "has a node with roles and recipes in its run_list" do
|
89
|
-
before do
|
90
|
-
file "roles/minor.json", {}
|
91
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
92
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
93
|
-
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
94
|
-
file "cookbooks/soup/recipes/chicken.rb", ""
|
95
|
-
file "nodes/mort.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
96
|
-
end
|
97
|
-
it "knife deps reports just the node" do
|
98
|
-
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
99
|
-
/roles/minor.json
|
100
|
-
/cookbooks/quiche
|
101
|
-
/cookbooks/soup
|
102
|
-
/nodes/mort.json
|
103
|
-
EOM
|
104
|
-
end
|
105
|
-
end
|
106
|
-
when_the_repository "has a cookbook with no dependencies" do
|
107
|
-
before do
|
108
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
109
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
110
|
-
end
|
111
|
-
it "knife deps reports just the cookbook" do
|
112
|
-
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/quiche\n"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
when_the_repository "has a cookbook with dependencies" do
|
116
|
-
before do
|
117
|
-
file "cookbooks/kettle/metadata.rb", 'name "kettle"'
|
118
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"
|
119
|
-
depends "kettle"'
|
120
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
121
|
-
end
|
122
|
-
it "knife deps reports just the cookbook" do
|
123
|
-
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
124
|
-
end
|
125
|
-
end
|
126
|
-
when_the_repository "has a data bag" do
|
127
|
-
before { file "data_bags/bag/item.json", {} }
|
128
|
-
it "knife deps reports just the data bag" do
|
129
|
-
knife("deps /data_bags/bag/item.json").should_succeed "/data_bags/bag/item.json\n"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
when_the_repository "has an environment" do
|
133
|
-
before { file "environments/desert.json", {} }
|
134
|
-
it "knife deps reports just the environment" do
|
135
|
-
knife("deps /environments/desert.json").should_succeed "/environments/desert.json\n"
|
136
|
-
end
|
137
|
-
end
|
138
|
-
when_the_repository "has a deep dependency tree" do
|
139
|
-
before do
|
140
|
-
file "roles/starring.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
141
|
-
file "roles/minor.json", {}
|
142
|
-
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
143
|
-
file "cookbooks/quiche/recipes/default.rb", ""
|
144
|
-
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
145
|
-
file "cookbooks/soup/recipes/chicken.rb", ""
|
146
|
-
file "environments/desert.json", {}
|
147
|
-
file "nodes/mort.json", { "chef_environment" => "desert", "run_list" => [ "role[starring]" ] }
|
148
|
-
file "nodes/bart.json", { "run_list" => [ "role[minor]" ] }
|
149
|
-
end
|
150
|
-
|
151
|
-
it "knife deps reports all dependencies" do
|
152
|
-
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
153
|
-
/environments/desert.json
|
154
|
-
/roles/minor.json
|
155
|
-
/cookbooks/quiche
|
156
|
-
/cookbooks/soup
|
157
|
-
/roles/starring.json
|
158
|
-
/nodes/mort.json
|
159
|
-
EOM
|
160
|
-
end
|
161
|
-
it "knife deps * reports all dependencies of all things" do
|
162
|
-
knife("deps /nodes/*").should_succeed <<~EOM
|
163
|
-
/roles/minor.json
|
164
|
-
/nodes/bart.json
|
165
|
-
/environments/desert.json
|
166
|
-
/cookbooks/quiche
|
167
|
-
/cookbooks/soup
|
168
|
-
/roles/starring.json
|
169
|
-
/nodes/mort.json
|
170
|
-
EOM
|
171
|
-
end
|
172
|
-
it "knife deps a b reports all dependencies of a and b" do
|
173
|
-
knife("deps /nodes/bart.json /nodes/mort.json").should_succeed <<~EOM
|
174
|
-
/roles/minor.json
|
175
|
-
/nodes/bart.json
|
176
|
-
/environments/desert.json
|
177
|
-
/cookbooks/quiche
|
178
|
-
/cookbooks/soup
|
179
|
-
/roles/starring.json
|
180
|
-
/nodes/mort.json
|
181
|
-
EOM
|
182
|
-
end
|
183
|
-
it "knife deps --tree /* shows dependencies in a tree" do
|
184
|
-
knife("deps --tree /nodes/*").should_succeed <<~EOM
|
185
|
-
/nodes/bart.json
|
186
|
-
/roles/minor.json
|
187
|
-
/nodes/mort.json
|
188
|
-
/environments/desert.json
|
189
|
-
/roles/starring.json
|
190
|
-
/roles/minor.json
|
191
|
-
/cookbooks/quiche
|
192
|
-
/cookbooks/soup
|
193
|
-
EOM
|
194
|
-
end
|
195
|
-
it "knife deps --tree --no-recurse shows only the first level of dependencies" do
|
196
|
-
knife("deps --tree --no-recurse /nodes/*").should_succeed <<~EOM
|
197
|
-
/nodes/bart.json
|
198
|
-
/roles/minor.json
|
199
|
-
/nodes/mort.json
|
200
|
-
/environments/desert.json
|
201
|
-
/roles/starring.json
|
202
|
-
EOM
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
context "circular dependencies" do
|
207
|
-
when_the_repository "has cookbooks with circular dependencies" do
|
208
|
-
before do
|
209
|
-
file "cookbooks/foo/metadata.rb", 'name "foo"
|
210
|
-
depends "bar"'
|
211
|
-
file "cookbooks/bar/metadata.rb", 'name "bar"
|
212
|
-
depends "baz"'
|
213
|
-
file "cookbooks/baz/metadata.rb", 'name "baz"
|
214
|
-
depends "foo"'
|
215
|
-
end
|
216
|
-
|
217
|
-
it "knife deps prints each once" do
|
218
|
-
knife("deps /cookbooks/foo").should_succeed(
|
219
|
-
stdout: "/cookbooks/baz\n/cookbooks/bar\n/cookbooks/foo\n"
|
220
|
-
)
|
221
|
-
end
|
222
|
-
it "knife deps --tree prints each once" do
|
223
|
-
knife("deps --tree /cookbooks/foo").should_succeed(
|
224
|
-
stdout: "/cookbooks/foo\n /cookbooks/bar\n /cookbooks/baz\n /cookbooks/foo\n"
|
225
|
-
)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
when_the_repository "has roles with circular dependencies" do
|
229
|
-
before do
|
230
|
-
file "roles/foo.json", { "run_list" => [ "role[bar]" ] }
|
231
|
-
file "roles/bar.json", { "run_list" => [ "role[baz]" ] }
|
232
|
-
file "roles/baz.json", { "run_list" => [ "role[foo]" ] }
|
233
|
-
file "roles/self.json", { "run_list" => [ "role[self]" ] }
|
234
|
-
end
|
235
|
-
it "knife deps prints each once" do
|
236
|
-
knife("deps /roles/foo.json /roles/self.json").should_succeed <<~EOM
|
237
|
-
/roles/baz.json
|
238
|
-
/roles/bar.json
|
239
|
-
/roles/foo.json
|
240
|
-
/roles/self.json
|
241
|
-
EOM
|
242
|
-
end
|
243
|
-
it "knife deps --tree prints each once" do
|
244
|
-
knife("deps --tree /roles/foo.json /roles/self.json") do
|
245
|
-
expect(stdout).to eq("/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n")
|
246
|
-
expect(stderr).to eq("WARNING: No knife configuration file found. See https://docs.chef.io/config_rb/ for details.\n")
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
context "missing objects" do
|
253
|
-
when_the_repository "is empty" do
|
254
|
-
it "knife deps /blah reports an error" do
|
255
|
-
knife("deps /blah").should_fail(
|
256
|
-
exit_code: 2,
|
257
|
-
stdout: "/blah\n",
|
258
|
-
stderr: "ERROR: /blah: No such file or directory\n"
|
259
|
-
)
|
260
|
-
end
|
261
|
-
it "knife deps /roles/x.json reports an error" do
|
262
|
-
knife("deps /roles/x.json").should_fail(
|
263
|
-
exit_code: 2,
|
264
|
-
stdout: "/roles/x.json\n",
|
265
|
-
stderr: "ERROR: /roles/x.json: No such file or directory\n"
|
266
|
-
)
|
267
|
-
end
|
268
|
-
it "knife deps /nodes/x.json reports an error" do
|
269
|
-
knife("deps /nodes/x.json").should_fail(
|
270
|
-
exit_code: 2,
|
271
|
-
stdout: "/nodes/x.json\n",
|
272
|
-
stderr: "ERROR: /nodes/x.json: No such file or directory\n"
|
273
|
-
)
|
274
|
-
end
|
275
|
-
it "knife deps /environments/x.json reports an error" do
|
276
|
-
knife("deps /environments/x.json").should_fail(
|
277
|
-
exit_code: 2,
|
278
|
-
stdout: "/environments/x.json\n",
|
279
|
-
stderr: "ERROR: /environments/x.json: No such file or directory\n"
|
280
|
-
)
|
281
|
-
end
|
282
|
-
it "knife deps /cookbooks/x reports an error" do
|
283
|
-
knife("deps /cookbooks/x").should_fail(
|
284
|
-
exit_code: 2,
|
285
|
-
stdout: "/cookbooks/x\n",
|
286
|
-
stderr: "ERROR: /cookbooks/x: No such file or directory\n"
|
287
|
-
)
|
288
|
-
end
|
289
|
-
it "knife deps /data_bags/bag/item.json reports an error" do
|
290
|
-
knife("deps /data_bags/bag/item.json").should_fail(
|
291
|
-
exit_code: 2,
|
292
|
-
stdout: "/data_bags/bag/item.json\n",
|
293
|
-
stderr: "ERROR: /data_bags/bag/item.json: No such file or directory\n"
|
294
|
-
)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
when_the_repository "is missing a dependent cookbook" do
|
298
|
-
before do
|
299
|
-
file "roles/starring.json", { "run_list" => [ "recipe[quiche]"] }
|
300
|
-
end
|
301
|
-
it "knife deps reports the cookbook, along with an error" do
|
302
|
-
knife("deps /roles/starring.json").should_fail(
|
303
|
-
exit_code: 2,
|
304
|
-
stdout: "/cookbooks/quiche\n/roles/starring.json\n",
|
305
|
-
stderr: "ERROR: /cookbooks/quiche: No such file or directory\n"
|
306
|
-
)
|
307
|
-
end
|
308
|
-
end
|
309
|
-
when_the_repository "is missing a dependent environment" do
|
310
|
-
before do
|
311
|
-
file "nodes/mort.json", { "chef_environment" => "desert" }
|
312
|
-
end
|
313
|
-
it "knife deps reports the environment, along with an error" do
|
314
|
-
knife("deps /nodes/mort.json").should_fail(
|
315
|
-
exit_code: 2,
|
316
|
-
stdout: "/environments/desert.json\n/nodes/mort.json\n",
|
317
|
-
stderr: "ERROR: /environments/desert.json: No such file or directory\n"
|
318
|
-
)
|
319
|
-
end
|
320
|
-
end
|
321
|
-
when_the_repository "is missing a dependent role" do
|
322
|
-
before do
|
323
|
-
file "roles/starring.json", { "run_list" => [ "role[minor]"] }
|
324
|
-
end
|
325
|
-
it "knife deps reports the role, along with an error" do
|
326
|
-
knife("deps /roles/starring.json").should_fail(
|
327
|
-
exit_code: 2,
|
328
|
-
stdout: "/roles/minor.json\n/roles/starring.json\n",
|
329
|
-
stderr: "ERROR: /roles/minor.json: No such file or directory\n"
|
330
|
-
)
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end
|
334
|
-
context "invalid objects" do
|
335
|
-
when_the_repository "is empty" do
|
336
|
-
it "knife deps / reports itself only" do
|
337
|
-
knife("deps /").should_succeed("/\n")
|
338
|
-
end
|
339
|
-
it "knife deps /roles reports an error" do
|
340
|
-
knife("deps /roles").should_fail(
|
341
|
-
exit_code: 2,
|
342
|
-
stderr: "ERROR: /roles: No such file or directory\n",
|
343
|
-
stdout: "/roles\n"
|
344
|
-
)
|
345
|
-
end
|
346
|
-
end
|
347
|
-
when_the_repository "has a data bag" do
|
348
|
-
before { file "data_bags/bag/item.json", "" }
|
349
|
-
it "knife deps /data_bags/bag shows no dependencies" do
|
350
|
-
knife("deps /data_bags/bag").should_succeed("/data_bags/bag\n")
|
351
|
-
end
|
352
|
-
end
|
353
|
-
when_the_repository "has a cookbook" do
|
354
|
-
before { file "cookbooks/blah/metadata.rb", 'name "blah"' }
|
355
|
-
it "knife deps on a cookbook file shows no dependencies" do
|
356
|
-
knife("deps /cookbooks/blah/metadata.rb").should_succeed(
|
357
|
-
"/cookbooks/blah/metadata.rb\n"
|
358
|
-
)
|
359
|
-
end
|
360
|
-
end
|
361
|
-
end
|
362
|
-
end
|
363
|
-
|
364
|
-
context "remote" do
|
365
|
-
include_context "default config options"
|
366
|
-
|
367
|
-
when_the_chef_server "has a role with no run_list" do
|
368
|
-
before { role "starring", {} }
|
369
|
-
it "knife deps reports no dependencies" do
|
370
|
-
knife("deps --remote /roles/starring.json").should_succeed "/roles/starring.json\n"
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
when_the_chef_server "has a role with a default run_list" do
|
375
|
-
before do
|
376
|
-
role "starring", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
377
|
-
role "minor", {}
|
378
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
379
|
-
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
380
|
-
end
|
381
|
-
it "knife deps reports all dependencies" do
|
382
|
-
knife("deps --remote /roles/starring.json").should_succeed <<~EOM
|
383
|
-
/roles/minor.json
|
384
|
-
/cookbooks/quiche
|
385
|
-
/cookbooks/soup
|
386
|
-
/roles/starring.json
|
387
|
-
EOM
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
when_the_chef_server "has a role with an env_run_list" do
|
392
|
-
before do
|
393
|
-
role "starring", { "env_run_lists" => { "desert" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} } }
|
394
|
-
role "minor", {}
|
395
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
396
|
-
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
397
|
-
end
|
398
|
-
it "knife deps reports all dependencies" do
|
399
|
-
knife("deps --remote /roles/starring.json").should_succeed <<~EOM
|
400
|
-
/roles/minor.json
|
401
|
-
/cookbooks/quiche
|
402
|
-
/cookbooks/soup
|
403
|
-
/roles/starring.json
|
404
|
-
EOM
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
when_the_chef_server "has a node with no environment or run_list" do
|
409
|
-
before { node "mort", {} }
|
410
|
-
it "knife deps reports just the node" do
|
411
|
-
knife("deps --remote /nodes/mort.json").should_succeed "/nodes/mort.json\n"
|
412
|
-
end
|
413
|
-
end
|
414
|
-
when_the_chef_server "has a node with an environment" do
|
415
|
-
before do
|
416
|
-
environment "desert", {}
|
417
|
-
node "mort", { "chef_environment" => "desert" }
|
418
|
-
end
|
419
|
-
it "knife deps reports just the node" do
|
420
|
-
knife("deps --remote /nodes/mort.json").should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
421
|
-
end
|
422
|
-
end
|
423
|
-
when_the_chef_server "has a node with roles and recipes in its run_list" do
|
424
|
-
before do
|
425
|
-
role "minor", {}
|
426
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
427
|
-
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
428
|
-
node "mort", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
429
|
-
end
|
430
|
-
it "knife deps reports just the node" do
|
431
|
-
knife("deps --remote /nodes/mort.json").should_succeed <<~EOM
|
432
|
-
/roles/minor.json
|
433
|
-
/cookbooks/quiche
|
434
|
-
/cookbooks/soup
|
435
|
-
/nodes/mort.json
|
436
|
-
EOM
|
437
|
-
end
|
438
|
-
end
|
439
|
-
when_the_chef_server "has a cookbook with no dependencies" do
|
440
|
-
before do
|
441
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
442
|
-
end
|
443
|
-
it "knife deps reports just the cookbook" do
|
444
|
-
knife("deps --remote /cookbooks/quiche").should_succeed "/cookbooks/quiche\n"
|
445
|
-
end
|
446
|
-
end
|
447
|
-
when_the_chef_server "has a cookbook with dependencies" do
|
448
|
-
before do
|
449
|
-
cookbook "kettle", "1.0.0", { "metadata.rb" => %Q{name "kettle"\nversion "1.0.0"\n} }
|
450
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => 'name "quiche"
|
451
|
-
depends "kettle"', "recipes" => { "default.rb" => "" } }
|
452
|
-
end
|
453
|
-
it "knife deps reports the cookbook and its dependencies" do
|
454
|
-
knife("deps --remote /cookbooks/quiche").should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
455
|
-
end
|
456
|
-
end
|
457
|
-
when_the_chef_server "has a data bag" do
|
458
|
-
before { data_bag "bag", { "item" => {} } }
|
459
|
-
it "knife deps reports just the data bag" do
|
460
|
-
knife("deps --remote /data_bags/bag/item.json").should_succeed "/data_bags/bag/item.json\n"
|
461
|
-
end
|
462
|
-
end
|
463
|
-
when_the_chef_server "has an environment" do
|
464
|
-
before { environment "desert", {} }
|
465
|
-
it "knife deps reports just the environment" do
|
466
|
-
knife("deps --remote /environments/desert.json").should_succeed "/environments/desert.json\n"
|
467
|
-
end
|
468
|
-
end
|
469
|
-
when_the_chef_server "has a deep dependency tree" do
|
470
|
-
before do
|
471
|
-
role "starring", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
472
|
-
role "minor", {}
|
473
|
-
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
474
|
-
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
475
|
-
environment "desert", {}
|
476
|
-
node "mort", { "chef_environment" => "desert", "run_list" => [ "role[starring]" ] }
|
477
|
-
node "bart", { "run_list" => [ "role[minor]" ] }
|
478
|
-
end
|
479
|
-
|
480
|
-
it "knife deps reports all dependencies" do
|
481
|
-
knife("deps --remote /nodes/mort.json").should_succeed <<~EOM
|
482
|
-
/environments/desert.json
|
483
|
-
/roles/minor.json
|
484
|
-
/cookbooks/quiche
|
485
|
-
/cookbooks/soup
|
486
|
-
/roles/starring.json
|
487
|
-
/nodes/mort.json
|
488
|
-
EOM
|
489
|
-
end
|
490
|
-
it "knife deps * reports all dependencies of all things" do
|
491
|
-
knife("deps --remote /nodes/*").should_succeed <<~EOM
|
492
|
-
/roles/minor.json
|
493
|
-
/nodes/bart.json
|
494
|
-
/environments/desert.json
|
495
|
-
/cookbooks/quiche
|
496
|
-
/cookbooks/soup
|
497
|
-
/roles/starring.json
|
498
|
-
/nodes/mort.json
|
499
|
-
EOM
|
500
|
-
end
|
501
|
-
it "knife deps a b reports all dependencies of a and b" do
|
502
|
-
knife("deps --remote /nodes/bart.json /nodes/mort.json").should_succeed <<~EOM
|
503
|
-
/roles/minor.json
|
504
|
-
/nodes/bart.json
|
505
|
-
/environments/desert.json
|
506
|
-
/cookbooks/quiche
|
507
|
-
/cookbooks/soup
|
508
|
-
/roles/starring.json
|
509
|
-
/nodes/mort.json
|
510
|
-
EOM
|
511
|
-
end
|
512
|
-
it "knife deps --tree /* shows dependencies in a tree" do
|
513
|
-
knife("deps --remote --tree /nodes/*").should_succeed <<~EOM
|
514
|
-
/nodes/bart.json
|
515
|
-
/roles/minor.json
|
516
|
-
/nodes/mort.json
|
517
|
-
/environments/desert.json
|
518
|
-
/roles/starring.json
|
519
|
-
/roles/minor.json
|
520
|
-
/cookbooks/quiche
|
521
|
-
/cookbooks/soup
|
522
|
-
EOM
|
523
|
-
end
|
524
|
-
it "knife deps --tree --no-recurse shows only the first level of dependencies" do
|
525
|
-
knife("deps --remote --tree --no-recurse /nodes/*").should_succeed <<~EOM
|
526
|
-
/nodes/bart.json
|
527
|
-
/roles/minor.json
|
528
|
-
/nodes/mort.json
|
529
|
-
/environments/desert.json
|
530
|
-
/roles/starring.json
|
531
|
-
EOM
|
532
|
-
end
|
533
|
-
end
|
534
|
-
|
535
|
-
context "circular dependencies" do
|
536
|
-
when_the_chef_server "has cookbooks with circular dependencies" do
|
537
|
-
before do
|
538
|
-
cookbook "foo", "1.0.0", { "metadata.rb" => 'name "foo"
|
539
|
-
depends "bar"' }
|
540
|
-
cookbook "bar", "1.0.0", { "metadata.rb" => 'name "bar"
|
541
|
-
depends "baz"' }
|
542
|
-
cookbook "baz", "1.0.0", { "metadata.rb" => 'name "baz"
|
543
|
-
depends "foo"' }
|
544
|
-
cookbook "self", "1.0.0", { "metadata.rb" => 'name "self"
|
545
|
-
depends "self"' }
|
546
|
-
end
|
547
|
-
it "knife deps prints each once" do
|
548
|
-
knife("deps --remote /cookbooks/foo /cookbooks/self").should_succeed <<~EOM
|
549
|
-
/cookbooks/baz
|
550
|
-
/cookbooks/bar
|
551
|
-
/cookbooks/foo
|
552
|
-
/cookbooks/self
|
553
|
-
EOM
|
554
|
-
end
|
555
|
-
it "knife deps --tree prints each once" do
|
556
|
-
knife("deps --remote --tree /cookbooks/foo /cookbooks/self").should_succeed <<~EOM
|
557
|
-
/cookbooks/foo
|
558
|
-
/cookbooks/bar
|
559
|
-
/cookbooks/baz
|
560
|
-
/cookbooks/foo
|
561
|
-
/cookbooks/self
|
562
|
-
/cookbooks/self
|
563
|
-
EOM
|
564
|
-
end
|
565
|
-
end
|
566
|
-
when_the_chef_server "has roles with circular dependencies" do
|
567
|
-
before do
|
568
|
-
role "foo", { "run_list" => [ "role[bar]" ] }
|
569
|
-
role "bar", { "run_list" => [ "role[baz]" ] }
|
570
|
-
role "baz", { "run_list" => [ "role[foo]" ] }
|
571
|
-
role "self", { "run_list" => [ "role[self]" ] }
|
572
|
-
end
|
573
|
-
it "knife deps prints each once" do
|
574
|
-
knife("deps --remote /roles/foo.json /roles/self.json").should_succeed <<~EOM
|
575
|
-
/roles/baz.json
|
576
|
-
/roles/bar.json
|
577
|
-
/roles/foo.json
|
578
|
-
/roles/self.json
|
579
|
-
EOM
|
580
|
-
end
|
581
|
-
it "knife deps --tree prints each once" do
|
582
|
-
knife("deps --remote --tree /roles/foo.json /roles/self.json") do
|
583
|
-
expect(stdout).to eq("/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n")
|
584
|
-
expect(stderr).to eq("WARNING: No knife configuration file found. See https://docs.chef.io/config_rb/ for details.\n")
|
585
|
-
end
|
586
|
-
end
|
587
|
-
end
|
588
|
-
end
|
589
|
-
|
590
|
-
context "missing objects" do
|
591
|
-
when_the_chef_server "is empty" do
|
592
|
-
it "knife deps /blah reports an error" do
|
593
|
-
knife("deps --remote /blah").should_fail(
|
594
|
-
exit_code: 2,
|
595
|
-
stdout: "/blah\n",
|
596
|
-
stderr: "ERROR: /blah: No such file or directory\n"
|
597
|
-
)
|
598
|
-
end
|
599
|
-
it "knife deps /roles/x.json reports an error" do
|
600
|
-
knife("deps --remote /roles/x.json").should_fail(
|
601
|
-
exit_code: 2,
|
602
|
-
stdout: "/roles/x.json\n",
|
603
|
-
stderr: "ERROR: /roles/x.json: No such file or directory\n"
|
604
|
-
)
|
605
|
-
end
|
606
|
-
it "knife deps /nodes/x.json reports an error" do
|
607
|
-
knife("deps --remote /nodes/x.json").should_fail(
|
608
|
-
exit_code: 2,
|
609
|
-
stdout: "/nodes/x.json\n",
|
610
|
-
stderr: "ERROR: /nodes/x.json: No such file or directory\n"
|
611
|
-
)
|
612
|
-
end
|
613
|
-
it "knife deps /environments/x.json reports an error" do
|
614
|
-
knife("deps --remote /environments/x.json").should_fail(
|
615
|
-
exit_code: 2,
|
616
|
-
stdout: "/environments/x.json\n",
|
617
|
-
stderr: "ERROR: /environments/x.json: No such file or directory\n"
|
618
|
-
)
|
619
|
-
end
|
620
|
-
it "knife deps /cookbooks/x reports an error" do
|
621
|
-
knife("deps --remote /cookbooks/x").should_fail(
|
622
|
-
exit_code: 2,
|
623
|
-
stdout: "/cookbooks/x\n",
|
624
|
-
stderr: "ERROR: /cookbooks/x: No such file or directory\n"
|
625
|
-
)
|
626
|
-
end
|
627
|
-
it "knife deps /data_bags/bag/item reports an error" do
|
628
|
-
knife("deps --remote /data_bags/bag/item.json").should_fail(
|
629
|
-
exit_code: 2,
|
630
|
-
stdout: "/data_bags/bag/item.json\n",
|
631
|
-
stderr: "ERROR: /data_bags/bag/item.json: No such file or directory\n"
|
632
|
-
)
|
633
|
-
end
|
634
|
-
end
|
635
|
-
when_the_chef_server "is missing a dependent cookbook" do
|
636
|
-
before do
|
637
|
-
role "starring", { "run_list" => [ "recipe[quiche]"] }
|
638
|
-
end
|
639
|
-
it "knife deps reports the cookbook, along with an error" do
|
640
|
-
knife("deps --remote /roles/starring.json").should_fail(
|
641
|
-
exit_code: 2,
|
642
|
-
stdout: "/cookbooks/quiche\n/roles/starring.json\n",
|
643
|
-
stderr: "ERROR: /cookbooks/quiche: No such file or directory\n"
|
644
|
-
)
|
645
|
-
end
|
646
|
-
end
|
647
|
-
when_the_chef_server "is missing a dependent environment" do
|
648
|
-
before do
|
649
|
-
node "mort", { "chef_environment" => "desert" }
|
650
|
-
end
|
651
|
-
it "knife deps reports the environment, along with an error" do
|
652
|
-
knife("deps --remote /nodes/mort.json").should_fail(
|
653
|
-
exit_code: 2,
|
654
|
-
stdout: "/environments/desert.json\n/nodes/mort.json\n",
|
655
|
-
stderr: "ERROR: /environments/desert.json: No such file or directory\n"
|
656
|
-
)
|
657
|
-
end
|
658
|
-
end
|
659
|
-
when_the_chef_server "is missing a dependent role" do
|
660
|
-
before do
|
661
|
-
role "starring", { "run_list" => [ "role[minor]"] }
|
662
|
-
end
|
663
|
-
it "knife deps reports the role, along with an error" do
|
664
|
-
knife("deps --remote /roles/starring.json").should_fail(
|
665
|
-
exit_code: 2,
|
666
|
-
stdout: "/roles/minor.json\n/roles/starring.json\n",
|
667
|
-
stderr: "ERROR: /roles/minor.json: No such file or directory\n"
|
668
|
-
)
|
669
|
-
end
|
670
|
-
end
|
671
|
-
end
|
672
|
-
context "invalid objects" do
|
673
|
-
when_the_chef_server "is empty" do
|
674
|
-
it "knife deps / reports an error" do
|
675
|
-
knife("deps --remote /").should_succeed("/\n")
|
676
|
-
end
|
677
|
-
it "knife deps /roles reports an error" do
|
678
|
-
knife("deps --remote /roles").should_succeed("/roles\n")
|
679
|
-
end
|
680
|
-
end
|
681
|
-
when_the_chef_server "has a data bag" do
|
682
|
-
before { data_bag "bag", { "item" => {} } }
|
683
|
-
it "knife deps /data_bags/bag shows no dependencies" do
|
684
|
-
knife("deps --remote /data_bags/bag").should_succeed("/data_bags/bag\n")
|
685
|
-
end
|
686
|
-
end
|
687
|
-
when_the_chef_server "has a cookbook" do
|
688
|
-
before do
|
689
|
-
cookbook "blah", "1.0.0", { "metadata.rb" => 'name "blah"' }
|
690
|
-
end
|
691
|
-
it "knife deps on a cookbook file shows no dependencies" do
|
692
|
-
knife("deps --remote /cookbooks/blah/metadata.rb").should_succeed(
|
693
|
-
"/cookbooks/blah/metadata.rb\n"
|
694
|
-
)
|
695
|
-
end
|
696
|
-
end
|
697
|
-
end
|
698
|
-
end
|
699
|
-
|
700
|
-
it "knife deps --no-recurse reports an error" do
|
701
|
-
knife("deps --no-recurse /").should_fail("ERROR: --no-recurse requires --tree\n")
|
702
|
-
end
|
703
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require "knife_spec_helper"
|
19
|
+
require "support/shared/integration/integration_helper"
|
20
|
+
require "support/shared/context/config"
|
21
|
+
require "chef/knife/deps"
|
22
|
+
|
23
|
+
describe "knife deps", :workstation do
|
24
|
+
include IntegrationSupport
|
25
|
+
include KnifeSupport
|
26
|
+
|
27
|
+
context "local" do
|
28
|
+
when_the_repository "has a role with no run_list" do
|
29
|
+
before { file "roles/starring.json", {} }
|
30
|
+
it "knife deps reports no dependencies" do
|
31
|
+
knife("deps /roles/starring.json").should_succeed "/roles/starring.json\n"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
when_the_repository "has a role with a default run_list" do
|
36
|
+
before do
|
37
|
+
file "roles/starring.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
38
|
+
file "roles/minor.json", {}
|
39
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
40
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
41
|
+
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
42
|
+
file "cookbooks/soup/recipes/chicken.rb", ""
|
43
|
+
end
|
44
|
+
it "knife deps reports all dependencies" do
|
45
|
+
knife("deps /roles/starring.json").should_succeed <<~EOM
|
46
|
+
/roles/minor.json
|
47
|
+
/cookbooks/quiche
|
48
|
+
/cookbooks/soup
|
49
|
+
/roles/starring.json
|
50
|
+
EOM
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
when_the_repository "has a role with an env_run_list" do
|
55
|
+
before do
|
56
|
+
file "roles/starring.json", { "env_run_lists" => { "desert" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} } }
|
57
|
+
file "roles/minor.json", {}
|
58
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
59
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
60
|
+
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
61
|
+
file "cookbooks/soup/recipes/chicken.rb", ""
|
62
|
+
end
|
63
|
+
it "knife deps reports all dependencies" do
|
64
|
+
knife("deps /roles/starring.json").should_succeed <<~EOM
|
65
|
+
/roles/minor.json
|
66
|
+
/cookbooks/quiche
|
67
|
+
/cookbooks/soup
|
68
|
+
/roles/starring.json
|
69
|
+
EOM
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
when_the_repository "has a node with no environment or run_list" do
|
74
|
+
before { file "nodes/mort.json", {} }
|
75
|
+
it "knife deps reports just the node" do
|
76
|
+
knife("deps /nodes/mort.json").should_succeed "/nodes/mort.json\n"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
when_the_repository "has a node with an environment" do
|
80
|
+
before do
|
81
|
+
file "environments/desert.json", {}
|
82
|
+
file "nodes/mort.json", { "chef_environment" => "desert" }
|
83
|
+
end
|
84
|
+
it "knife deps reports just the node" do
|
85
|
+
knife("deps /nodes/mort.json").should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
when_the_repository "has a node with roles and recipes in its run_list" do
|
89
|
+
before do
|
90
|
+
file "roles/minor.json", {}
|
91
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
92
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
93
|
+
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
94
|
+
file "cookbooks/soup/recipes/chicken.rb", ""
|
95
|
+
file "nodes/mort.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
96
|
+
end
|
97
|
+
it "knife deps reports just the node" do
|
98
|
+
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
99
|
+
/roles/minor.json
|
100
|
+
/cookbooks/quiche
|
101
|
+
/cookbooks/soup
|
102
|
+
/nodes/mort.json
|
103
|
+
EOM
|
104
|
+
end
|
105
|
+
end
|
106
|
+
when_the_repository "has a cookbook with no dependencies" do
|
107
|
+
before do
|
108
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
109
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
110
|
+
end
|
111
|
+
it "knife deps reports just the cookbook" do
|
112
|
+
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/quiche\n"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
when_the_repository "has a cookbook with dependencies" do
|
116
|
+
before do
|
117
|
+
file "cookbooks/kettle/metadata.rb", 'name "kettle"'
|
118
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"
|
119
|
+
depends "kettle"'
|
120
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
121
|
+
end
|
122
|
+
it "knife deps reports just the cookbook" do
|
123
|
+
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
when_the_repository "has a data bag" do
|
127
|
+
before { file "data_bags/bag/item.json", {} }
|
128
|
+
it "knife deps reports just the data bag" do
|
129
|
+
knife("deps /data_bags/bag/item.json").should_succeed "/data_bags/bag/item.json\n"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
when_the_repository "has an environment" do
|
133
|
+
before { file "environments/desert.json", {} }
|
134
|
+
it "knife deps reports just the environment" do
|
135
|
+
knife("deps /environments/desert.json").should_succeed "/environments/desert.json\n"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
when_the_repository "has a deep dependency tree" do
|
139
|
+
before do
|
140
|
+
file "roles/starring.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
141
|
+
file "roles/minor.json", {}
|
142
|
+
file "cookbooks/quiche/metadata.rb", 'name "quiche"'
|
143
|
+
file "cookbooks/quiche/recipes/default.rb", ""
|
144
|
+
file "cookbooks/soup/metadata.rb", 'name "soup"'
|
145
|
+
file "cookbooks/soup/recipes/chicken.rb", ""
|
146
|
+
file "environments/desert.json", {}
|
147
|
+
file "nodes/mort.json", { "chef_environment" => "desert", "run_list" => [ "role[starring]" ] }
|
148
|
+
file "nodes/bart.json", { "run_list" => [ "role[minor]" ] }
|
149
|
+
end
|
150
|
+
|
151
|
+
it "knife deps reports all dependencies" do
|
152
|
+
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
153
|
+
/environments/desert.json
|
154
|
+
/roles/minor.json
|
155
|
+
/cookbooks/quiche
|
156
|
+
/cookbooks/soup
|
157
|
+
/roles/starring.json
|
158
|
+
/nodes/mort.json
|
159
|
+
EOM
|
160
|
+
end
|
161
|
+
it "knife deps * reports all dependencies of all things" do
|
162
|
+
knife("deps /nodes/*").should_succeed <<~EOM
|
163
|
+
/roles/minor.json
|
164
|
+
/nodes/bart.json
|
165
|
+
/environments/desert.json
|
166
|
+
/cookbooks/quiche
|
167
|
+
/cookbooks/soup
|
168
|
+
/roles/starring.json
|
169
|
+
/nodes/mort.json
|
170
|
+
EOM
|
171
|
+
end
|
172
|
+
it "knife deps a b reports all dependencies of a and b" do
|
173
|
+
knife("deps /nodes/bart.json /nodes/mort.json").should_succeed <<~EOM
|
174
|
+
/roles/minor.json
|
175
|
+
/nodes/bart.json
|
176
|
+
/environments/desert.json
|
177
|
+
/cookbooks/quiche
|
178
|
+
/cookbooks/soup
|
179
|
+
/roles/starring.json
|
180
|
+
/nodes/mort.json
|
181
|
+
EOM
|
182
|
+
end
|
183
|
+
it "knife deps --tree /* shows dependencies in a tree" do
|
184
|
+
knife("deps --tree /nodes/*").should_succeed <<~EOM
|
185
|
+
/nodes/bart.json
|
186
|
+
/roles/minor.json
|
187
|
+
/nodes/mort.json
|
188
|
+
/environments/desert.json
|
189
|
+
/roles/starring.json
|
190
|
+
/roles/minor.json
|
191
|
+
/cookbooks/quiche
|
192
|
+
/cookbooks/soup
|
193
|
+
EOM
|
194
|
+
end
|
195
|
+
it "knife deps --tree --no-recurse shows only the first level of dependencies" do
|
196
|
+
knife("deps --tree --no-recurse /nodes/*").should_succeed <<~EOM
|
197
|
+
/nodes/bart.json
|
198
|
+
/roles/minor.json
|
199
|
+
/nodes/mort.json
|
200
|
+
/environments/desert.json
|
201
|
+
/roles/starring.json
|
202
|
+
EOM
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
context "circular dependencies" do
|
207
|
+
when_the_repository "has cookbooks with circular dependencies" do
|
208
|
+
before do
|
209
|
+
file "cookbooks/foo/metadata.rb", 'name "foo"
|
210
|
+
depends "bar"'
|
211
|
+
file "cookbooks/bar/metadata.rb", 'name "bar"
|
212
|
+
depends "baz"'
|
213
|
+
file "cookbooks/baz/metadata.rb", 'name "baz"
|
214
|
+
depends "foo"'
|
215
|
+
end
|
216
|
+
|
217
|
+
it "knife deps prints each once" do
|
218
|
+
knife("deps /cookbooks/foo").should_succeed(
|
219
|
+
stdout: "/cookbooks/baz\n/cookbooks/bar\n/cookbooks/foo\n"
|
220
|
+
)
|
221
|
+
end
|
222
|
+
it "knife deps --tree prints each once" do
|
223
|
+
knife("deps --tree /cookbooks/foo").should_succeed(
|
224
|
+
stdout: "/cookbooks/foo\n /cookbooks/bar\n /cookbooks/baz\n /cookbooks/foo\n"
|
225
|
+
)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
when_the_repository "has roles with circular dependencies" do
|
229
|
+
before do
|
230
|
+
file "roles/foo.json", { "run_list" => [ "role[bar]" ] }
|
231
|
+
file "roles/bar.json", { "run_list" => [ "role[baz]" ] }
|
232
|
+
file "roles/baz.json", { "run_list" => [ "role[foo]" ] }
|
233
|
+
file "roles/self.json", { "run_list" => [ "role[self]" ] }
|
234
|
+
end
|
235
|
+
it "knife deps prints each once" do
|
236
|
+
knife("deps /roles/foo.json /roles/self.json").should_succeed <<~EOM
|
237
|
+
/roles/baz.json
|
238
|
+
/roles/bar.json
|
239
|
+
/roles/foo.json
|
240
|
+
/roles/self.json
|
241
|
+
EOM
|
242
|
+
end
|
243
|
+
it "knife deps --tree prints each once" do
|
244
|
+
knife("deps --tree /roles/foo.json /roles/self.json") do
|
245
|
+
expect(stdout).to eq("/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n")
|
246
|
+
expect(stderr).to eq("WARNING: No knife configuration file found. See https://docs.chef.io/config_rb/ for details.\n")
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
context "missing objects" do
|
253
|
+
when_the_repository "is empty" do
|
254
|
+
it "knife deps /blah reports an error" do
|
255
|
+
knife("deps /blah").should_fail(
|
256
|
+
exit_code: 2,
|
257
|
+
stdout: "/blah\n",
|
258
|
+
stderr: "ERROR: /blah: No such file or directory\n"
|
259
|
+
)
|
260
|
+
end
|
261
|
+
it "knife deps /roles/x.json reports an error" do
|
262
|
+
knife("deps /roles/x.json").should_fail(
|
263
|
+
exit_code: 2,
|
264
|
+
stdout: "/roles/x.json\n",
|
265
|
+
stderr: "ERROR: /roles/x.json: No such file or directory\n"
|
266
|
+
)
|
267
|
+
end
|
268
|
+
it "knife deps /nodes/x.json reports an error" do
|
269
|
+
knife("deps /nodes/x.json").should_fail(
|
270
|
+
exit_code: 2,
|
271
|
+
stdout: "/nodes/x.json\n",
|
272
|
+
stderr: "ERROR: /nodes/x.json: No such file or directory\n"
|
273
|
+
)
|
274
|
+
end
|
275
|
+
it "knife deps /environments/x.json reports an error" do
|
276
|
+
knife("deps /environments/x.json").should_fail(
|
277
|
+
exit_code: 2,
|
278
|
+
stdout: "/environments/x.json\n",
|
279
|
+
stderr: "ERROR: /environments/x.json: No such file or directory\n"
|
280
|
+
)
|
281
|
+
end
|
282
|
+
it "knife deps /cookbooks/x reports an error" do
|
283
|
+
knife("deps /cookbooks/x").should_fail(
|
284
|
+
exit_code: 2,
|
285
|
+
stdout: "/cookbooks/x\n",
|
286
|
+
stderr: "ERROR: /cookbooks/x: No such file or directory\n"
|
287
|
+
)
|
288
|
+
end
|
289
|
+
it "knife deps /data_bags/bag/item.json reports an error" do
|
290
|
+
knife("deps /data_bags/bag/item.json").should_fail(
|
291
|
+
exit_code: 2,
|
292
|
+
stdout: "/data_bags/bag/item.json\n",
|
293
|
+
stderr: "ERROR: /data_bags/bag/item.json: No such file or directory\n"
|
294
|
+
)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
when_the_repository "is missing a dependent cookbook" do
|
298
|
+
before do
|
299
|
+
file "roles/starring.json", { "run_list" => [ "recipe[quiche]"] }
|
300
|
+
end
|
301
|
+
it "knife deps reports the cookbook, along with an error" do
|
302
|
+
knife("deps /roles/starring.json").should_fail(
|
303
|
+
exit_code: 2,
|
304
|
+
stdout: "/cookbooks/quiche\n/roles/starring.json\n",
|
305
|
+
stderr: "ERROR: /cookbooks/quiche: No such file or directory\n"
|
306
|
+
)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
when_the_repository "is missing a dependent environment" do
|
310
|
+
before do
|
311
|
+
file "nodes/mort.json", { "chef_environment" => "desert" }
|
312
|
+
end
|
313
|
+
it "knife deps reports the environment, along with an error" do
|
314
|
+
knife("deps /nodes/mort.json").should_fail(
|
315
|
+
exit_code: 2,
|
316
|
+
stdout: "/environments/desert.json\n/nodes/mort.json\n",
|
317
|
+
stderr: "ERROR: /environments/desert.json: No such file or directory\n"
|
318
|
+
)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
when_the_repository "is missing a dependent role" do
|
322
|
+
before do
|
323
|
+
file "roles/starring.json", { "run_list" => [ "role[minor]"] }
|
324
|
+
end
|
325
|
+
it "knife deps reports the role, along with an error" do
|
326
|
+
knife("deps /roles/starring.json").should_fail(
|
327
|
+
exit_code: 2,
|
328
|
+
stdout: "/roles/minor.json\n/roles/starring.json\n",
|
329
|
+
stderr: "ERROR: /roles/minor.json: No such file or directory\n"
|
330
|
+
)
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
context "invalid objects" do
|
335
|
+
when_the_repository "is empty" do
|
336
|
+
it "knife deps / reports itself only" do
|
337
|
+
knife("deps /").should_succeed("/\n")
|
338
|
+
end
|
339
|
+
it "knife deps /roles reports an error" do
|
340
|
+
knife("deps /roles").should_fail(
|
341
|
+
exit_code: 2,
|
342
|
+
stderr: "ERROR: /roles: No such file or directory\n",
|
343
|
+
stdout: "/roles\n"
|
344
|
+
)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
when_the_repository "has a data bag" do
|
348
|
+
before { file "data_bags/bag/item.json", "" }
|
349
|
+
it "knife deps /data_bags/bag shows no dependencies" do
|
350
|
+
knife("deps /data_bags/bag").should_succeed("/data_bags/bag\n")
|
351
|
+
end
|
352
|
+
end
|
353
|
+
when_the_repository "has a cookbook" do
|
354
|
+
before { file "cookbooks/blah/metadata.rb", 'name "blah"' }
|
355
|
+
it "knife deps on a cookbook file shows no dependencies" do
|
356
|
+
knife("deps /cookbooks/blah/metadata.rb").should_succeed(
|
357
|
+
"/cookbooks/blah/metadata.rb\n"
|
358
|
+
)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
context "remote" do
|
365
|
+
include_context "default config options"
|
366
|
+
|
367
|
+
when_the_chef_server "has a role with no run_list" do
|
368
|
+
before { role "starring", {} }
|
369
|
+
it "knife deps reports no dependencies" do
|
370
|
+
knife("deps --remote /roles/starring.json").should_succeed "/roles/starring.json\n"
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
when_the_chef_server "has a role with a default run_list" do
|
375
|
+
before do
|
376
|
+
role "starring", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
377
|
+
role "minor", {}
|
378
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
379
|
+
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
380
|
+
end
|
381
|
+
it "knife deps reports all dependencies" do
|
382
|
+
knife("deps --remote /roles/starring.json").should_succeed <<~EOM
|
383
|
+
/roles/minor.json
|
384
|
+
/cookbooks/quiche
|
385
|
+
/cookbooks/soup
|
386
|
+
/roles/starring.json
|
387
|
+
EOM
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
when_the_chef_server "has a role with an env_run_list" do
|
392
|
+
before do
|
393
|
+
role "starring", { "env_run_lists" => { "desert" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} } }
|
394
|
+
role "minor", {}
|
395
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
396
|
+
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
397
|
+
end
|
398
|
+
it "knife deps reports all dependencies" do
|
399
|
+
knife("deps --remote /roles/starring.json").should_succeed <<~EOM
|
400
|
+
/roles/minor.json
|
401
|
+
/cookbooks/quiche
|
402
|
+
/cookbooks/soup
|
403
|
+
/roles/starring.json
|
404
|
+
EOM
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
when_the_chef_server "has a node with no environment or run_list" do
|
409
|
+
before { node "mort", {} }
|
410
|
+
it "knife deps reports just the node" do
|
411
|
+
knife("deps --remote /nodes/mort.json").should_succeed "/nodes/mort.json\n"
|
412
|
+
end
|
413
|
+
end
|
414
|
+
when_the_chef_server "has a node with an environment" do
|
415
|
+
before do
|
416
|
+
environment "desert", {}
|
417
|
+
node "mort", { "chef_environment" => "desert" }
|
418
|
+
end
|
419
|
+
it "knife deps reports just the node" do
|
420
|
+
knife("deps --remote /nodes/mort.json").should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
421
|
+
end
|
422
|
+
end
|
423
|
+
when_the_chef_server "has a node with roles and recipes in its run_list" do
|
424
|
+
before do
|
425
|
+
role "minor", {}
|
426
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
427
|
+
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
428
|
+
node "mort", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
429
|
+
end
|
430
|
+
it "knife deps reports just the node" do
|
431
|
+
knife("deps --remote /nodes/mort.json").should_succeed <<~EOM
|
432
|
+
/roles/minor.json
|
433
|
+
/cookbooks/quiche
|
434
|
+
/cookbooks/soup
|
435
|
+
/nodes/mort.json
|
436
|
+
EOM
|
437
|
+
end
|
438
|
+
end
|
439
|
+
when_the_chef_server "has a cookbook with no dependencies" do
|
440
|
+
before do
|
441
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
442
|
+
end
|
443
|
+
it "knife deps reports just the cookbook" do
|
444
|
+
knife("deps --remote /cookbooks/quiche").should_succeed "/cookbooks/quiche\n"
|
445
|
+
end
|
446
|
+
end
|
447
|
+
when_the_chef_server "has a cookbook with dependencies" do
|
448
|
+
before do
|
449
|
+
cookbook "kettle", "1.0.0", { "metadata.rb" => %Q{name "kettle"\nversion "1.0.0"\n} }
|
450
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => 'name "quiche"
|
451
|
+
depends "kettle"', "recipes" => { "default.rb" => "" } }
|
452
|
+
end
|
453
|
+
it "knife deps reports the cookbook and its dependencies" do
|
454
|
+
knife("deps --remote /cookbooks/quiche").should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
455
|
+
end
|
456
|
+
end
|
457
|
+
when_the_chef_server "has a data bag" do
|
458
|
+
before { data_bag "bag", { "item" => {} } }
|
459
|
+
it "knife deps reports just the data bag" do
|
460
|
+
knife("deps --remote /data_bags/bag/item.json").should_succeed "/data_bags/bag/item.json\n"
|
461
|
+
end
|
462
|
+
end
|
463
|
+
when_the_chef_server "has an environment" do
|
464
|
+
before { environment "desert", {} }
|
465
|
+
it "knife deps reports just the environment" do
|
466
|
+
knife("deps --remote /environments/desert.json").should_succeed "/environments/desert.json\n"
|
467
|
+
end
|
468
|
+
end
|
469
|
+
when_the_chef_server "has a deep dependency tree" do
|
470
|
+
before do
|
471
|
+
role "starring", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
472
|
+
role "minor", {}
|
473
|
+
cookbook "quiche", "1.0.0", { "metadata.rb" => %Q{name "quiche"\nversion "1.0.0"\n}, "recipes" => { "default.rb" => "" } }
|
474
|
+
cookbook "soup", "1.0.0", { "metadata.rb" => %Q{name "soup"\nversion "1.0.0"\n}, "recipes" => { "chicken.rb" => "" } }
|
475
|
+
environment "desert", {}
|
476
|
+
node "mort", { "chef_environment" => "desert", "run_list" => [ "role[starring]" ] }
|
477
|
+
node "bart", { "run_list" => [ "role[minor]" ] }
|
478
|
+
end
|
479
|
+
|
480
|
+
it "knife deps reports all dependencies" do
|
481
|
+
knife("deps --remote /nodes/mort.json").should_succeed <<~EOM
|
482
|
+
/environments/desert.json
|
483
|
+
/roles/minor.json
|
484
|
+
/cookbooks/quiche
|
485
|
+
/cookbooks/soup
|
486
|
+
/roles/starring.json
|
487
|
+
/nodes/mort.json
|
488
|
+
EOM
|
489
|
+
end
|
490
|
+
it "knife deps * reports all dependencies of all things" do
|
491
|
+
knife("deps --remote /nodes/*").should_succeed <<~EOM
|
492
|
+
/roles/minor.json
|
493
|
+
/nodes/bart.json
|
494
|
+
/environments/desert.json
|
495
|
+
/cookbooks/quiche
|
496
|
+
/cookbooks/soup
|
497
|
+
/roles/starring.json
|
498
|
+
/nodes/mort.json
|
499
|
+
EOM
|
500
|
+
end
|
501
|
+
it "knife deps a b reports all dependencies of a and b" do
|
502
|
+
knife("deps --remote /nodes/bart.json /nodes/mort.json").should_succeed <<~EOM
|
503
|
+
/roles/minor.json
|
504
|
+
/nodes/bart.json
|
505
|
+
/environments/desert.json
|
506
|
+
/cookbooks/quiche
|
507
|
+
/cookbooks/soup
|
508
|
+
/roles/starring.json
|
509
|
+
/nodes/mort.json
|
510
|
+
EOM
|
511
|
+
end
|
512
|
+
it "knife deps --tree /* shows dependencies in a tree" do
|
513
|
+
knife("deps --remote --tree /nodes/*").should_succeed <<~EOM
|
514
|
+
/nodes/bart.json
|
515
|
+
/roles/minor.json
|
516
|
+
/nodes/mort.json
|
517
|
+
/environments/desert.json
|
518
|
+
/roles/starring.json
|
519
|
+
/roles/minor.json
|
520
|
+
/cookbooks/quiche
|
521
|
+
/cookbooks/soup
|
522
|
+
EOM
|
523
|
+
end
|
524
|
+
it "knife deps --tree --no-recurse shows only the first level of dependencies" do
|
525
|
+
knife("deps --remote --tree --no-recurse /nodes/*").should_succeed <<~EOM
|
526
|
+
/nodes/bart.json
|
527
|
+
/roles/minor.json
|
528
|
+
/nodes/mort.json
|
529
|
+
/environments/desert.json
|
530
|
+
/roles/starring.json
|
531
|
+
EOM
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
535
|
+
context "circular dependencies" do
|
536
|
+
when_the_chef_server "has cookbooks with circular dependencies" do
|
537
|
+
before do
|
538
|
+
cookbook "foo", "1.0.0", { "metadata.rb" => 'name "foo"
|
539
|
+
depends "bar"' }
|
540
|
+
cookbook "bar", "1.0.0", { "metadata.rb" => 'name "bar"
|
541
|
+
depends "baz"' }
|
542
|
+
cookbook "baz", "1.0.0", { "metadata.rb" => 'name "baz"
|
543
|
+
depends "foo"' }
|
544
|
+
cookbook "self", "1.0.0", { "metadata.rb" => 'name "self"
|
545
|
+
depends "self"' }
|
546
|
+
end
|
547
|
+
it "knife deps prints each once" do
|
548
|
+
knife("deps --remote /cookbooks/foo /cookbooks/self").should_succeed <<~EOM
|
549
|
+
/cookbooks/baz
|
550
|
+
/cookbooks/bar
|
551
|
+
/cookbooks/foo
|
552
|
+
/cookbooks/self
|
553
|
+
EOM
|
554
|
+
end
|
555
|
+
it "knife deps --tree prints each once" do
|
556
|
+
knife("deps --remote --tree /cookbooks/foo /cookbooks/self").should_succeed <<~EOM
|
557
|
+
/cookbooks/foo
|
558
|
+
/cookbooks/bar
|
559
|
+
/cookbooks/baz
|
560
|
+
/cookbooks/foo
|
561
|
+
/cookbooks/self
|
562
|
+
/cookbooks/self
|
563
|
+
EOM
|
564
|
+
end
|
565
|
+
end
|
566
|
+
when_the_chef_server "has roles with circular dependencies" do
|
567
|
+
before do
|
568
|
+
role "foo", { "run_list" => [ "role[bar]" ] }
|
569
|
+
role "bar", { "run_list" => [ "role[baz]" ] }
|
570
|
+
role "baz", { "run_list" => [ "role[foo]" ] }
|
571
|
+
role "self", { "run_list" => [ "role[self]" ] }
|
572
|
+
end
|
573
|
+
it "knife deps prints each once" do
|
574
|
+
knife("deps --remote /roles/foo.json /roles/self.json").should_succeed <<~EOM
|
575
|
+
/roles/baz.json
|
576
|
+
/roles/bar.json
|
577
|
+
/roles/foo.json
|
578
|
+
/roles/self.json
|
579
|
+
EOM
|
580
|
+
end
|
581
|
+
it "knife deps --tree prints each once" do
|
582
|
+
knife("deps --remote --tree /roles/foo.json /roles/self.json") do
|
583
|
+
expect(stdout).to eq("/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n")
|
584
|
+
expect(stderr).to eq("WARNING: No knife configuration file found. See https://docs.chef.io/config_rb/ for details.\n")
|
585
|
+
end
|
586
|
+
end
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
context "missing objects" do
|
591
|
+
when_the_chef_server "is empty" do
|
592
|
+
it "knife deps /blah reports an error" do
|
593
|
+
knife("deps --remote /blah").should_fail(
|
594
|
+
exit_code: 2,
|
595
|
+
stdout: "/blah\n",
|
596
|
+
stderr: "ERROR: /blah: No such file or directory\n"
|
597
|
+
)
|
598
|
+
end
|
599
|
+
it "knife deps /roles/x.json reports an error" do
|
600
|
+
knife("deps --remote /roles/x.json").should_fail(
|
601
|
+
exit_code: 2,
|
602
|
+
stdout: "/roles/x.json\n",
|
603
|
+
stderr: "ERROR: /roles/x.json: No such file or directory\n"
|
604
|
+
)
|
605
|
+
end
|
606
|
+
it "knife deps /nodes/x.json reports an error" do
|
607
|
+
knife("deps --remote /nodes/x.json").should_fail(
|
608
|
+
exit_code: 2,
|
609
|
+
stdout: "/nodes/x.json\n",
|
610
|
+
stderr: "ERROR: /nodes/x.json: No such file or directory\n"
|
611
|
+
)
|
612
|
+
end
|
613
|
+
it "knife deps /environments/x.json reports an error" do
|
614
|
+
knife("deps --remote /environments/x.json").should_fail(
|
615
|
+
exit_code: 2,
|
616
|
+
stdout: "/environments/x.json\n",
|
617
|
+
stderr: "ERROR: /environments/x.json: No such file or directory\n"
|
618
|
+
)
|
619
|
+
end
|
620
|
+
it "knife deps /cookbooks/x reports an error" do
|
621
|
+
knife("deps --remote /cookbooks/x").should_fail(
|
622
|
+
exit_code: 2,
|
623
|
+
stdout: "/cookbooks/x\n",
|
624
|
+
stderr: "ERROR: /cookbooks/x: No such file or directory\n"
|
625
|
+
)
|
626
|
+
end
|
627
|
+
it "knife deps /data_bags/bag/item reports an error" do
|
628
|
+
knife("deps --remote /data_bags/bag/item.json").should_fail(
|
629
|
+
exit_code: 2,
|
630
|
+
stdout: "/data_bags/bag/item.json\n",
|
631
|
+
stderr: "ERROR: /data_bags/bag/item.json: No such file or directory\n"
|
632
|
+
)
|
633
|
+
end
|
634
|
+
end
|
635
|
+
when_the_chef_server "is missing a dependent cookbook" do
|
636
|
+
before do
|
637
|
+
role "starring", { "run_list" => [ "recipe[quiche]"] }
|
638
|
+
end
|
639
|
+
it "knife deps reports the cookbook, along with an error" do
|
640
|
+
knife("deps --remote /roles/starring.json").should_fail(
|
641
|
+
exit_code: 2,
|
642
|
+
stdout: "/cookbooks/quiche\n/roles/starring.json\n",
|
643
|
+
stderr: "ERROR: /cookbooks/quiche: No such file or directory\n"
|
644
|
+
)
|
645
|
+
end
|
646
|
+
end
|
647
|
+
when_the_chef_server "is missing a dependent environment" do
|
648
|
+
before do
|
649
|
+
node "mort", { "chef_environment" => "desert" }
|
650
|
+
end
|
651
|
+
it "knife deps reports the environment, along with an error" do
|
652
|
+
knife("deps --remote /nodes/mort.json").should_fail(
|
653
|
+
exit_code: 2,
|
654
|
+
stdout: "/environments/desert.json\n/nodes/mort.json\n",
|
655
|
+
stderr: "ERROR: /environments/desert.json: No such file or directory\n"
|
656
|
+
)
|
657
|
+
end
|
658
|
+
end
|
659
|
+
when_the_chef_server "is missing a dependent role" do
|
660
|
+
before do
|
661
|
+
role "starring", { "run_list" => [ "role[minor]"] }
|
662
|
+
end
|
663
|
+
it "knife deps reports the role, along with an error" do
|
664
|
+
knife("deps --remote /roles/starring.json").should_fail(
|
665
|
+
exit_code: 2,
|
666
|
+
stdout: "/roles/minor.json\n/roles/starring.json\n",
|
667
|
+
stderr: "ERROR: /roles/minor.json: No such file or directory\n"
|
668
|
+
)
|
669
|
+
end
|
670
|
+
end
|
671
|
+
end
|
672
|
+
context "invalid objects" do
|
673
|
+
when_the_chef_server "is empty" do
|
674
|
+
it "knife deps / reports an error" do
|
675
|
+
knife("deps --remote /").should_succeed("/\n")
|
676
|
+
end
|
677
|
+
it "knife deps /roles reports an error" do
|
678
|
+
knife("deps --remote /roles").should_succeed("/roles\n")
|
679
|
+
end
|
680
|
+
end
|
681
|
+
when_the_chef_server "has a data bag" do
|
682
|
+
before { data_bag "bag", { "item" => {} } }
|
683
|
+
it "knife deps /data_bags/bag shows no dependencies" do
|
684
|
+
knife("deps --remote /data_bags/bag").should_succeed("/data_bags/bag\n")
|
685
|
+
end
|
686
|
+
end
|
687
|
+
when_the_chef_server "has a cookbook" do
|
688
|
+
before do
|
689
|
+
cookbook "blah", "1.0.0", { "metadata.rb" => 'name "blah"' }
|
690
|
+
end
|
691
|
+
it "knife deps on a cookbook file shows no dependencies" do
|
692
|
+
knife("deps --remote /cookbooks/blah/metadata.rb").should_succeed(
|
693
|
+
"/cookbooks/blah/metadata.rb\n"
|
694
|
+
)
|
695
|
+
end
|
696
|
+
end
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
700
|
+
it "knife deps --no-recurse reports an error" do
|
701
|
+
knife("deps --no-recurse /").should_fail("ERROR: --no-recurse requires --tree\n")
|
702
|
+
end
|
703
|
+
end
|