chef 12.7.2-universal-mingw32 → 12.8.1-universal-mingw32
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/CONTRIBUTING.md +208 -208
- data/Gemfile +49 -58
- data/LICENSE +201 -201
- data/README.md +139 -139
- data/Rakefile +86 -73
- data/VERSION +1 -1
- data/acceptance/.gitignore +2 -1
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -27
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +290 -281
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +59 -49
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -46
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
- data/acceptance/Gemfile +14 -11
- data/acceptance/README.md +132 -86
- data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -3
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/basics/.kitchen.yml +4 -4
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -19
- data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -6
- data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -0
- data/acceptance/fips/.kitchen.yml +4 -0
- data/acceptance/fips/test/integration/fips/serverspec/Gemfile +3 -0
- data/acceptance/fips/test/integration/fips/serverspec/fips_spec.rb +39 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +23 -21
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/top-cookbooks/.gitignore +1 -1
- data/acceptance/top-cookbooks/.kitchen.docker.yml +12 -0
- data/acceptance/top-cookbooks/.kitchen.git.yml +11 -10
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -4
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -4
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -4
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/trivial/.kitchen.yml +7 -7
- data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/windows-service/.kitchen.yml +7 -7
- data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
- data/bin/chef-apply +25 -25
- data/bin/chef-client +26 -26
- data/bin/chef-service-manager +38 -38
- data/bin/chef-shell +34 -37
- data/bin/chef-solo +25 -25
- data/bin/chef-windows-service +35 -35
- data/bin/knife +25 -25
- data/chef-windows.gemspec +24 -24
- data/chef.gemspec +63 -58
- data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
- data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
- data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
- data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
- data/distro/common/html/_sources/index.txt +135 -135
- data/distro/common/html/_sources/knife.txt +74 -74
- data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
- data/distro/common/html/_sources/knife_client.txt +150 -150
- data/distro/common/html/_sources/knife_common_options.txt +6 -6
- data/distro/common/html/_sources/knife_configure.txt +29 -29
- data/distro/common/html/_sources/knife_cookbook.txt +236 -236
- data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
- data/distro/common/html/_sources/knife_data_bag.txt +159 -159
- data/distro/common/html/_sources/knife_delete.txt +26 -26
- data/distro/common/html/_sources/knife_deps.txt +61 -61
- data/distro/common/html/_sources/knife_diff.txt +34 -34
- data/distro/common/html/_sources/knife_download.txt +44 -44
- data/distro/common/html/_sources/knife_edit.txt +26 -26
- data/distro/common/html/_sources/knife_environment.txt +158 -158
- data/distro/common/html/_sources/knife_exec.txt +47 -47
- data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
- data/distro/common/html/_sources/knife_list.txt +33 -33
- data/distro/common/html/_sources/knife_node.txt +250 -250
- data/distro/common/html/_sources/knife_raw.txt +35 -35
- data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
- data/distro/common/html/_sources/knife_role.txt +157 -157
- data/distro/common/html/_sources/knife_search.txt +53 -53
- data/distro/common/html/_sources/knife_serve.txt +18 -18
- data/distro/common/html/_sources/knife_show.txt +26 -26
- data/distro/common/html/_sources/knife_ssh.txt +43 -43
- data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
- data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
- data/distro/common/html/_sources/knife_status.txt +37 -37
- data/distro/common/html/_sources/knife_tag.txt +69 -69
- data/distro/common/html/_sources/knife_upload.txt +49 -49
- data/distro/common/html/_sources/knife_user.txt +127 -127
- data/distro/common/html/_sources/knife_using.txt +43 -43
- data/distro/common/html/_sources/knife_xargs.txt +30 -30
- data/distro/common/html/_static/basic.css +536 -536
- data/distro/common/html/_static/doctools.js +238 -238
- data/distro/common/html/_static/guide.css +504 -504
- data/distro/common/html/_static/pygments.css +61 -61
- data/distro/common/html/_static/searchtools.js +621 -621
- data/distro/common/html/_static/underscore.js +31 -31
- data/distro/common/html/_static/websupport.js +808 -808
- data/distro/common/html/ctl_chef_client.html +269 -269
- data/distro/common/html/ctl_chef_server.html +727 -727
- data/distro/common/html/ctl_chef_shell.html +162 -162
- data/distro/common/html/ctl_chef_solo.html +193 -193
- data/distro/common/html/index.html +201 -201
- data/distro/common/html/knife.html +169 -169
- data/distro/common/html/knife_bootstrap.html +284 -284
- data/distro/common/html/knife_client.html +284 -284
- data/distro/common/html/knife_common_options.html +95 -95
- data/distro/common/html/knife_configure.html +104 -104
- data/distro/common/html/knife_cookbook.html +486 -486
- data/distro/common/html/knife_cookbook_site.html +375 -375
- data/distro/common/html/knife_data_bag.html +373 -373
- data/distro/common/html/knife_delete.html +92 -92
- data/distro/common/html/knife_deps.html +142 -142
- data/distro/common/html/knife_diff.html +122 -122
- data/distro/common/html/knife_download.html +144 -144
- data/distro/common/html/knife_edit.html +88 -88
- data/distro/common/html/knife_environment.html +325 -325
- data/distro/common/html/knife_exec.html +219 -219
- data/distro/common/html/knife_index_rebuild.html +82 -82
- data/distro/common/html/knife_list.html +113 -113
- data/distro/common/html/knife_node.html +457 -457
- data/distro/common/html/knife_raw.html +109 -109
- data/distro/common/html/knife_recipe_list.html +90 -90
- data/distro/common/html/knife_role.html +294 -294
- data/distro/common/html/knife_search.html +202 -202
- data/distro/common/html/knife_serve.html +78 -78
- data/distro/common/html/knife_show.html +103 -103
- data/distro/common/html/knife_ssh.html +176 -176
- data/distro/common/html/knife_ssl_check.html +150 -150
- data/distro/common/html/knife_ssl_fetch.html +150 -150
- data/distro/common/html/knife_status.html +143 -143
- data/distro/common/html/knife_tag.html +137 -137
- data/distro/common/html/knife_upload.html +152 -152
- data/distro/common/html/knife_user.html +241 -241
- data/distro/common/html/knife_using.html +209 -209
- data/distro/common/html/knife_xargs.html +121 -121
- data/distro/common/html/search.html +81 -81
- data/distro/common/man/man1/README.md +58 -58
- data/distro/common/man/man1/chef-shell.1 +194 -194
- data/distro/common/man/man1/knife-bootstrap.1 +215 -215
- data/distro/common/man/man1/knife-client.1 +443 -443
- data/distro/common/man/man1/knife-configure.1 +161 -161
- data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
- data/distro/common/man/man1/knife-cookbook.1 +770 -770
- data/distro/common/man/man1/knife-data-bag.1 +617 -617
- data/distro/common/man/man1/knife-delete.1 +127 -127
- data/distro/common/man/man1/knife-deps.1 +246 -246
- data/distro/common/man/man1/knife-diff.1 +226 -226
- data/distro/common/man/man1/knife-download.1 +258 -258
- data/distro/common/man/man1/knife-edit.1 +121 -121
- data/distro/common/man/man1/knife-environment.1 +508 -508
- data/distro/common/man/man1/knife-exec.1 +362 -362
- data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
- data/distro/common/man/man1/knife-list.1 +174 -174
- data/distro/common/man/man1/knife-node.1 +716 -716
- data/distro/common/man/man1/knife-raw.1 +172 -172
- data/distro/common/man/man1/knife-recipe-list.1 +85 -85
- data/distro/common/man/man1/knife-role.1 +426 -426
- data/distro/common/man/man1/knife-search.1 +359 -359
- data/distro/common/man/man1/knife-serve.1 +109 -109
- data/distro/common/man/man1/knife-show.1 +160 -160
- data/distro/common/man/man1/knife-ssh.1 +284 -284
- data/distro/common/man/man1/knife-ssl-check.1 +207 -207
- data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
- data/distro/common/man/man1/knife-status.1 +234 -234
- data/distro/common/man/man1/knife-tag.1 +189 -189
- data/distro/common/man/man1/knife-upload.1 +280 -280
- data/distro/common/man/man1/knife-user.1 +356 -356
- data/distro/common/man/man1/knife-xargs.1 +189 -189
- data/distro/common/man/man1/knife.1 +332 -332
- data/distro/common/man/man8/chef-apply.8 +86 -86
- data/distro/common/man/man8/chef-client.8 +398 -398
- data/distro/common/man/man8/chef-solo.8 +260 -260
- data/distro/common/markdown/README +3 -3
- data/distro/common/markdown/man1/chef-shell.mkd +195 -195
- data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
- data/distro/common/markdown/man1/knife-client.mkd +103 -103
- data/distro/common/markdown/man1/knife-configure.mkd +70 -70
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
- data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
- data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
- data/distro/common/markdown/man1/knife-environment.mkd +151 -151
- data/distro/common/markdown/man1/knife-exec.mkd +42 -42
- data/distro/common/markdown/man1/knife-index.mkd +30 -30
- data/distro/common/markdown/man1/knife-node.mkd +130 -130
- data/distro/common/markdown/man1/knife-role.mkd +85 -85
- data/distro/common/markdown/man1/knife-search.mkd +180 -180
- data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
- data/distro/common/markdown/man1/knife-status.mkd +36 -36
- data/distro/common/markdown/man1/knife-tag.mkd +39 -39
- data/distro/common/markdown/man1/knife.mkd +213 -213
- data/distro/common/markdown/man8/chef-client.mkd +75 -73
- data/distro/common/markdown/man8/chef-expander.mkd +81 -81
- data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
- data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
- data/distro/common/markdown/man8/chef-server.mkd +120 -120
- data/distro/common/markdown/man8/chef-solo.mkd +107 -107
- data/distro/common/markdown/man8/chef-solr.mkd +89 -89
- data/distro/powershell/chef/chef.psm1 +327 -327
- data/ext/win32-eventlog/Rakefile +53 -53
- data/ext/win32-eventlog/chef-log.man +56 -56
- data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +5 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +5 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +5 -5
- data/lib/chef.rb +35 -35
- data/lib/chef/api_client.rb +233 -233
- data/lib/chef/api_client/registration.rb +192 -192
- data/lib/chef/api_client_v1.rb +325 -325
- data/lib/chef/application.rb +342 -342
- data/lib/chef/application/apply.rb +221 -221
- data/lib/chef/application/client.rb +513 -501
- data/lib/chef/application/knife.rb +208 -208
- data/lib/chef/application/solo.rb +334 -330
- data/lib/chef/application/windows_service.rb +338 -338
- data/lib/chef/application/windows_service_manager.rb +202 -202
- data/lib/chef/applications.rb +4 -4
- data/lib/chef/audit/audit_event_proxy.rb +93 -93
- data/lib/chef/audit/audit_reporter.rb +172 -172
- data/lib/chef/audit/control_group_data.rb +139 -139
- data/lib/chef/audit/logger.rb +36 -36
- data/lib/chef/audit/rspec_formatter.rb +37 -37
- data/lib/chef/audit/runner.rb +196 -196
- data/lib/chef/chef_class.rb +228 -228
- data/lib/chef/chef_fs.rb +59 -59
- data/lib/chef/chef_fs/chef_fs_data_store.rb +871 -856
- data/lib/chef/chef_fs/command_line.rb +285 -285
- data/lib/chef/chef_fs/config.rb +283 -282
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
- data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -29
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +62 -56
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +204 -202
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -30
- data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -42
- data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -27
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
- data/lib/chef/chef_fs/file_pattern.rb +301 -301
- data/lib/chef/chef_fs/file_system.rb +429 -429
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +183 -183
- data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +60 -60
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +102 -102
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +222 -222
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +84 -84
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +102 -102
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +71 -71
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +69 -69
- data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +57 -57
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +53 -53
- data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +31 -31
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +61 -61
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +60 -60
- data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +160 -160
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +137 -137
- data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
- data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +34 -34
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +178 -178
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +187 -187
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +107 -107
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +32 -32
- data/lib/chef/chef_fs/file_system/file_system_error.rb +44 -44
- data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
- data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +64 -64
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -36
- data/lib/chef/chef_fs/file_system/not_found_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +42 -42
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +46 -46
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/{chef_repository_file_system_data_bags_dir.rb → chef_repository_file_system_client_keys_dir.rb} +38 -38
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +146 -95
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +176 -82
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +83 -83
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +214 -210
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/{chef_repository_file_system_cookbook_artifacts_dir.rb → cookbook_artifacts_dir.rb} +36 -34
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -0
- data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +114 -0
- data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -0
- data/lib/chef/chef_fs/file_system/repository/directory.rb +139 -0
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +117 -117
- data/lib/chef/chef_fs/file_system/repository/file_system_root_dir.rb +33 -33
- data/lib/chef/chef_fs/file_system/repository/{chef_repository_file_system_versioned_cookbooks_dir.rb → versioned_cookbooks_dir.rb} +34 -34
- data/lib/chef/chef_fs/knife.rb +161 -161
- data/lib/chef/chef_fs/parallelizer.rb +105 -105
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +281 -281
- data/lib/chef/chef_fs/path_utils.rb +127 -127
- data/lib/chef/client.rb +967 -967
- data/lib/chef/config.rb +85 -85
- data/lib/chef/config_fetcher.rb +72 -72
- data/lib/chef/constants.rb +28 -28
- data/lib/chef/cookbook/chefignore.rb +74 -74
- data/lib/chef/cookbook/cookbook_collection.rb +63 -58
- data/lib/chef/cookbook/cookbook_version_loader.rb +352 -301
- data/lib/chef/cookbook/file_system_file_vendor.rb +59 -59
- data/lib/chef/cookbook/file_vendor.rb +71 -71
- data/lib/chef/cookbook/gem_installer.rb +118 -0
- data/lib/chef/cookbook/metadata.rb +904 -886
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
- data/lib/chef/cookbook/synchronizer.rb +298 -294
- data/lib/chef/cookbook/syntax_check.rb +260 -260
- data/lib/chef/cookbook_loader.rb +200 -182
- data/lib/chef/cookbook_manifest.rb +290 -290
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -244
- data/lib/chef/cookbook_uploader.rb +157 -157
- data/lib/chef/cookbook_version.rb +631 -627
- data/lib/chef/daemon.rb +131 -131
- data/lib/chef/data_bag.rb +176 -175
- data/lib/chef/data_bag_item.rb +218 -218
- data/lib/chef/delayed_evaluator.rb +21 -21
- data/lib/chef/deprecation/mixin/template.rb +48 -48
- data/lib/chef/deprecation/provider/cookbook_file.rb +54 -54
- data/lib/chef/deprecation/provider/file.rb +198 -198
- data/lib/chef/deprecation/provider/remote_directory.rb +52 -52
- data/lib/chef/deprecation/provider/remote_file.rb +85 -85
- data/lib/chef/deprecation/provider/template.rb +63 -63
- data/lib/chef/deprecation/warnings.rb +38 -38
- data/lib/chef/digester.rb +74 -74
- data/lib/chef/dsl.rb +6 -6
- data/lib/chef/dsl/audit.rb +51 -51
- data/lib/chef/dsl/chef_provisioning.rb +57 -57
- data/lib/chef/dsl/cheffish.rb +64 -64
- data/lib/chef/dsl/data_query.rb +89 -89
- data/lib/chef/dsl/declare_resource.rb +108 -108
- data/lib/chef/dsl/definitions.rb +43 -43
- data/lib/chef/dsl/include_attribute.rb +61 -61
- data/lib/chef/dsl/include_recipe.rb +44 -44
- data/lib/chef/dsl/platform_introspection.rb +254 -254
- data/lib/chef/dsl/powershell.rb +29 -29
- data/lib/chef/dsl/reboot_pending.rb +64 -64
- data/lib/chef/dsl/recipe.rb +134 -134
- data/lib/chef/dsl/registry_helper.rb +63 -63
- data/lib/chef/dsl/resources.rb +58 -58
- data/lib/chef/encrypted_data_bag_item.rb +155 -155
- data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
- data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
- data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
- data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/environment.rb +326 -326
- data/lib/chef/event_dispatch/base.rb +420 -400
- data/lib/chef/event_dispatch/dispatcher.rb +62 -62
- data/lib/chef/event_dispatch/dsl.rb +65 -65
- data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
- data/lib/chef/event_loggers/base.rb +62 -62
- data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
- data/lib/chef/exceptions.rb +504 -504
- data/lib/chef/file_access_control.rb +75 -75
- data/lib/chef/file_access_control/unix.rb +290 -290
- data/lib/chef/file_access_control/windows.rb +335 -335
- data/lib/chef/file_cache.rb +221 -221
- data/lib/chef/file_content_management/content_base.rb +56 -56
- data/lib/chef/file_content_management/deploy.rb +37 -37
- data/lib/chef/file_content_management/deploy/cp.rb +48 -48
- data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
- data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
- data/lib/chef/file_content_management/tempfile.rb +97 -96
- data/lib/chef/formatters/base.rb +237 -237
- data/lib/chef/formatters/doc.rb +422 -396
- data/lib/chef/formatters/error_descriptor.rb +67 -67
- data/lib/chef/formatters/error_inspectors.rb +19 -19
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +184 -184
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
- data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
- data/lib/chef/formatters/error_mapper.rb +85 -85
- data/lib/chef/formatters/indentable_output_stream.rb +170 -170
- data/lib/chef/formatters/minimal.rb +233 -233
- data/lib/chef/guard_interpreter.rb +32 -32
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +43 -43
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
- data/lib/chef/handler.rb +235 -235
- data/lib/chef/handler/error_report.rb +33 -33
- data/lib/chef/handler/json_file.rb +63 -63
- data/lib/chef/http.rb +430 -427
- data/lib/chef/http/auth_credentials.rb +57 -57
- data/lib/chef/http/authenticator.rb +106 -106
- data/lib/chef/http/basic_client.rb +169 -169
- data/lib/chef/http/cookie_jar.rb +31 -31
- data/lib/chef/http/cookie_manager.rb +59 -59
- data/lib/chef/http/decompressor.rb +142 -142
- data/lib/chef/http/http_request.rb +186 -186
- data/lib/chef/http/json_input.rb +73 -73
- data/lib/chef/http/json_output.rb +78 -78
- data/lib/chef/http/json_to_model_output.rb +34 -34
- data/lib/chef/http/remote_request_id.rb +46 -46
- data/lib/chef/http/simple.rb +40 -40
- data/lib/chef/http/simple_json.rb +43 -43
- data/lib/chef/http/socketless_chef_zero_client.rb +207 -206
- data/lib/chef/http/ssl_policies.rb +130 -130
- data/lib/chef/http/validate_content_length.rb +115 -110
- data/lib/chef/json_compat.rb +164 -164
- data/lib/chef/key.rb +273 -273
- data/lib/chef/knife.rb +587 -580
- data/lib/chef/knife/bootstrap.rb +480 -480
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
- data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
- data/lib/chef/knife/bootstrap/templates/README.md +11 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -231
- data/lib/chef/knife/client_bulk_delete.rb +104 -104
- data/lib/chef/knife/client_create.rb +111 -111
- data/lib/chef/knife/client_delete.rb +60 -60
- data/lib/chef/knife/client_edit.rb +53 -53
- data/lib/chef/knife/client_key_create.rb +67 -67
- data/lib/chef/knife/client_key_delete.rb +76 -76
- data/lib/chef/knife/client_key_edit.rb +79 -79
- data/lib/chef/knife/client_key_list.rb +69 -69
- data/lib/chef/knife/client_key_show.rb +76 -76
- data/lib/chef/knife/client_list.rb +42 -42
- data/lib/chef/knife/client_reregister.rb +59 -59
- data/lib/chef/knife/client_show.rb +49 -49
- data/lib/chef/knife/configure.rb +171 -171
- data/lib/chef/knife/configure_client.rb +50 -50
- data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
- data/lib/chef/knife/cookbook_create.rb +448 -448
- data/lib/chef/knife/cookbook_delete.rb +151 -151
- data/lib/chef/knife/cookbook_download.rb +143 -143
- data/lib/chef/knife/cookbook_list.rb +47 -47
- data/lib/chef/knife/cookbook_metadata.rb +108 -108
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
- data/lib/chef/knife/cookbook_show.rb +98 -98
- data/lib/chef/knife/cookbook_site_download.rb +109 -109
- data/lib/chef/knife/cookbook_site_install.rb +192 -192
- data/lib/chef/knife/cookbook_site_list.rb +58 -58
- data/lib/chef/knife/cookbook_site_search.rb +46 -46
- data/lib/chef/knife/cookbook_site_share.rb +169 -169
- data/lib/chef/knife/cookbook_site_show.rb +55 -55
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -56
- data/lib/chef/knife/cookbook_site_vendor.rb +46 -46
- data/lib/chef/knife/cookbook_test.rb +95 -95
- data/lib/chef/knife/cookbook_upload.rb +308 -310
- data/lib/chef/knife/core/bootstrap_context.rb +233 -200
- data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
- data/lib/chef/knife/core/custom_manifest_loader.rb +69 -69
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
- data/lib/chef/knife/core/generic_presenter.rb +222 -222
- data/lib/chef/knife/core/hashed_command_loader.rb +99 -80
- data/lib/chef/knife/core/node_editor.rb +130 -130
- data/lib/chef/knife/core/node_presenter.rb +159 -159
- data/lib/chef/knife/core/object_loader.rb +115 -115
- data/lib/chef/knife/core/status_presenter.rb +157 -157
- data/lib/chef/knife/core/subcommand_loader.rb +212 -206
- data/lib/chef/knife/core/text_formatter.rb +85 -85
- data/lib/chef/knife/core/ui.rb +284 -275
- data/lib/chef/knife/data_bag_create.rb +78 -78
- 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 +114 -114
- data/lib/chef/knife/data_bag_list.rb +42 -42
- data/lib/chef/knife/data_bag_secret_options.rb +142 -142
- data/lib/chef/knife/data_bag_show.rb +69 -69
- data/lib/chef/knife/delete.rb +107 -107
- data/lib/chef/knife/deps.rb +140 -140
- data/lib/chef/knife/diff.rb +68 -68
- data/lib/chef/knife/download.rb +68 -68
- data/lib/chef/knife/edit.rb +72 -72
- data/lib/chef/knife/environment_compare.rb +127 -127
- data/lib/chef/knife/environment_create.rb +53 -53
- data/lib/chef/knife/environment_delete.rb +45 -45
- data/lib/chef/knife/environment_edit.rb +45 -45
- data/lib/chef/knife/environment_from_file.rb +82 -82
- data/lib/chef/knife/environment_list.rb +42 -42
- data/lib/chef/knife/environment_show.rb +48 -48
- data/lib/chef/knife/exec.rb +87 -87
- data/lib/chef/knife/help.rb +101 -101
- data/lib/chef/knife/help_topics.rb +4 -4
- data/lib/chef/knife/index_rebuild.rb +133 -133
- data/lib/chef/knife/key_create.rb +112 -108
- 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 -114
- data/lib/chef/knife/key_edit_base.rb +55 -55
- data/lib/chef/knife/key_list.rb +88 -88
- data/lib/chef/knife/key_list_base.rb +45 -45
- data/lib/chef/knife/key_show.rb +53 -53
- data/lib/chef/knife/list.rb +157 -157
- data/lib/chef/knife/node_bulk_delete.rb +74 -74
- 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 +54 -54
- data/lib/chef/knife/node_from_file.rb +51 -51
- data/lib/chef/knife/node_list.rb +44 -44
- 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 +66 -66
- data/lib/chef/knife/null.rb +10 -10
- data/lib/chef/knife/osc_user_create.rb +97 -97
- data/lib/chef/knife/osc_user_delete.rb +51 -51
- data/lib/chef/knife/osc_user_edit.rb +58 -58
- data/lib/chef/knife/osc_user_list.rb +47 -47
- data/lib/chef/knife/osc_user_reregister.rb +64 -64
- data/lib/chef/knife/osc_user_show.rb +54 -54
- data/lib/chef/knife/raw.rb +103 -103
- data/lib/chef/knife/recipe_list.rb +32 -32
- data/lib/chef/knife/rehash.rb +65 -62
- data/lib/chef/knife/role_bulk_delete.rb +65 -65
- 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 +86 -86
- 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 +59 -59
- 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 +86 -86
- data/lib/chef/knife/role_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_run_list_replace.rb +59 -59
- data/lib/chef/knife/role_run_list_set.rb +70 -70
- data/lib/chef/knife/role_show.rb +49 -49
- data/lib/chef/knife/search.rb +201 -201
- data/lib/chef/knife/serve.rb +48 -48
- data/lib/chef/knife/show.rb +56 -56
- data/lib/chef/knife/ssh.rb +572 -575
- data/lib/chef/knife/ssl_check.rb +281 -281
- data/lib/chef/knife/ssl_fetch.rb +157 -157
- data/lib/chef/knife/status.rb +110 -110
- 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 +70 -70
- data/lib/chef/knife/user_create.rb +150 -150
- data/lib/chef/knife/user_delete.rb +95 -95
- data/lib/chef/knife/user_edit.rb +81 -81
- data/lib/chef/knife/user_key_create.rb +69 -69
- data/lib/chef/knife/user_key_delete.rb +76 -76
- data/lib/chef/knife/user_key_edit.rb +79 -79
- data/lib/chef/knife/user_key_list.rb +69 -69
- data/lib/chef/knife/user_key_show.rb +76 -76
- data/lib/chef/knife/user_list.rb +45 -45
- data/lib/chef/knife/user_reregister.rb +89 -89
- data/lib/chef/knife/user_show.rb +78 -78
- data/lib/chef/knife/xargs.rb +266 -266
- data/lib/chef/local_mode.rb +128 -128
- data/lib/chef/log.rb +68 -68
- data/lib/chef/log/syslog.rb +45 -45
- data/lib/chef/log/winevt.rb +99 -99
- data/lib/chef/mash.rb +226 -226
- data/lib/chef/mixin/api_version_request_handling.rb +66 -66
- data/lib/chef/mixin/checksum.rb +32 -32
- data/lib/chef/mixin/command.rb +193 -192
- data/lib/chef/mixin/command/unix.rb +220 -220
- data/lib/chef/mixin/command/windows.rb +71 -71
- data/lib/chef/mixin/convert_to_class_name.rb +126 -126
- data/lib/chef/mixin/create_path.rb +73 -73
- data/lib/chef/mixin/deep_merge.rb +140 -140
- data/lib/chef/mixin/deprecation.rb +123 -123
- data/lib/chef/mixin/descendants_tracker.rb +81 -81
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
- data/lib/chef/mixin/file_class.rb +35 -35
- data/lib/chef/mixin/from_file.rb +50 -50
- data/lib/chef/mixin/get_source_from_package.rb +47 -47
- data/lib/chef/mixin/homebrew_user.rb +68 -68
- data/lib/chef/mixin/language.rb +48 -48
- data/lib/chef/mixin/language_include_attribute.rb +34 -34
- data/lib/chef/mixin/language_include_recipe.rb +31 -31
- data/lib/chef/mixin/params_validate.rb +489 -489
- data/lib/chef/mixin/path_sanity.rb +68 -68
- data/lib/chef/mixin/powershell_out.rb +98 -98
- data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
- data/lib/chef/mixin/properties.rb +303 -302
- data/lib/chef/mixin/provides.rb +28 -27
- data/lib/chef/mixin/proxified_socket.rb +38 -38
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
- data/lib/chef/mixin/securable.rb +196 -196
- data/lib/chef/mixin/shell_out.rb +117 -117
- data/lib/chef/mixin/subclass_directive.rb +37 -37
- data/lib/chef/mixin/template.rb +262 -262
- data/lib/chef/mixin/unformatter.rb +32 -32
- data/lib/chef/mixin/uris.rb +43 -43
- data/lib/chef/mixin/which.rb +37 -37
- data/lib/chef/mixin/why_run.rb +331 -331
- data/lib/chef/mixin/wide_string.rb +72 -72
- data/lib/chef/mixin/windows_architecture_helper.rb +114 -114
- data/lib/chef/mixin/windows_env_helper.rb +67 -67
- data/lib/chef/mixin/xml_escape.rb +140 -140
- data/lib/chef/mixins.rb +13 -13
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -140
- data/lib/chef/monkey_patches/net_http.rb +60 -60
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
- data/lib/chef/monkey_patches/win32/registry.rb +72 -72
- data/lib/chef/monologger.rb +88 -88
- data/lib/chef/nil_argument.rb +3 -3
- data/lib/chef/node.rb +700 -700
- data/lib/chef/node/attribute.rb +586 -586
- data/lib/chef/node/attribute_collections.rb +323 -323
- data/lib/chef/node/immutable_collections.rb +219 -219
- data/lib/chef/node_map.rb +222 -222
- data/lib/chef/null_logger.rb +72 -72
- data/lib/chef/org.rb +149 -149
- data/lib/chef/platform.rb +30 -30
- data/lib/chef/platform/handler_map.rb +40 -40
- data/lib/chef/platform/priority_map.rb +41 -41
- data/lib/chef/platform/provider_handler_map.rb +29 -29
- data/lib/chef/platform/provider_mapping.rb +214 -214
- data/lib/chef/platform/provider_priority_map.rb +11 -11
- data/lib/chef/platform/query_helpers.rb +112 -112
- data/lib/chef/platform/rebooter.rb +54 -54
- data/lib/chef/platform/resource_handler_map.rb +29 -29
- data/lib/chef/platform/resource_priority_map.rb +11 -11
- data/lib/chef/platform/service_helpers.rb +122 -122
- data/lib/chef/policy_builder.rb +42 -42
- data/lib/chef/policy_builder/dynamic.rb +185 -185
- data/lib/chef/policy_builder/expand_node_object.rb +278 -274
- data/lib/chef/policy_builder/policyfile.rb +527 -525
- data/lib/chef/property.rb +673 -673
- data/lib/chef/provider.rb +461 -461
- data/lib/chef/provider/apt_update.rb +79 -79
- data/lib/chef/provider/batch.rb +45 -45
- data/lib/chef/provider/breakpoint.rb +38 -38
- data/lib/chef/provider/cookbook_file.rb +53 -53
- data/lib/chef/provider/cookbook_file/content.rb +49 -49
- data/lib/chef/provider/cron.rb +263 -263
- data/lib/chef/provider/cron/aix.rb +50 -50
- data/lib/chef/provider/cron/solaris.rb +22 -22
- data/lib/chef/provider/cron/unix.rb +83 -83
- data/lib/chef/provider/deploy.rb +476 -476
- data/lib/chef/provider/deploy/revision.rb +109 -109
- data/lib/chef/provider/deploy/timestamped.rb +34 -34
- data/lib/chef/provider/directory.rb +152 -152
- data/lib/chef/provider/dsc_resource.rb +197 -200
- data/lib/chef/provider/dsc_script.rb +185 -185
- data/lib/chef/provider/env.rb +169 -169
- data/lib/chef/provider/env/windows.rb +72 -72
- data/lib/chef/provider/erl_call.rb +108 -108
- data/lib/chef/provider/execute.rb +125 -125
- data/lib/chef/provider/file.rb +495 -495
- data/lib/chef/provider/file/content.rb +39 -39
- data/lib/chef/provider/git.rb +332 -332
- data/lib/chef/provider/group.rb +183 -183
- data/lib/chef/provider/group/aix.rb +86 -86
- data/lib/chef/provider/group/dscl.rb +170 -170
- data/lib/chef/provider/group/gpasswd.rb +58 -58
- data/lib/chef/provider/group/groupadd.rb +137 -137
- data/lib/chef/provider/group/groupmod.rb +128 -128
- data/lib/chef/provider/group/pw.rb +140 -140
- data/lib/chef/provider/group/suse.rb +62 -62
- data/lib/chef/provider/group/usermod.rb +91 -91
- data/lib/chef/provider/group/windows.rb +98 -98
- data/lib/chef/provider/http_request.rb +122 -122
- data/lib/chef/provider/ifconfig.rb +226 -226
- data/lib/chef/provider/ifconfig/aix.rb +99 -99
- data/lib/chef/provider/ifconfig/debian.rb +84 -84
- data/lib/chef/provider/ifconfig/redhat.rb +48 -48
- data/lib/chef/provider/launchd.rb +208 -0
- data/lib/chef/provider/link.rb +159 -159
- data/lib/chef/provider/log.rb +57 -57
- data/lib/chef/provider/lwrp_base.rb +99 -99
- data/lib/chef/provider/mdadm.rb +92 -92
- data/lib/chef/provider/mount.rb +173 -173
- data/lib/chef/provider/mount/aix.rb +180 -180
- data/lib/chef/provider/mount/mount.rb +270 -270
- data/lib/chef/provider/mount/solaris.rb +271 -271
- data/lib/chef/provider/mount/windows.rb +86 -86
- data/lib/chef/provider/ohai.rb +49 -49
- data/lib/chef/provider/osx_profile.rb +256 -256
- data/lib/chef/provider/package.rb +565 -565
- data/lib/chef/provider/package/aix.rb +136 -136
- data/lib/chef/provider/package/apt.rb +185 -185
- data/lib/chef/provider/package/chocolatey.rb +275 -277
- data/lib/chef/provider/package/dpkg.rb +226 -226
- data/lib/chef/provider/package/easy_install.rb +133 -133
- data/lib/chef/provider/package/freebsd/base.rb +89 -89
- data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
- data/lib/chef/provider/package/freebsd/pkgng.rb +78 -78
- data/lib/chef/provider/package/freebsd/port.rb +60 -60
- data/lib/chef/provider/package/homebrew.rb +137 -137
- data/lib/chef/provider/package/ips.rb +91 -91
- data/lib/chef/provider/package/macports.rb +101 -101
- data/lib/chef/provider/package/openbsd.rb +136 -136
- data/lib/chef/provider/package/pacman.rb +104 -104
- data/lib/chef/provider/package/paludis.rb +86 -86
- data/lib/chef/provider/package/portage.rb +140 -140
- data/lib/chef/provider/package/rpm.rb +123 -123
- data/lib/chef/provider/package/rubygems.rb +586 -586
- data/lib/chef/provider/package/smartos.rb +92 -92
- data/lib/chef/provider/package/solaris.rb +138 -138
- data/lib/chef/provider/package/windows.rb +269 -260
- data/lib/chef/provider/package/windows/exe.rb +117 -117
- data/lib/chef/provider/package/windows/msi.rb +93 -93
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +89 -89
- data/lib/chef/provider/package/yum-dump.py +307 -307
- data/lib/chef/provider/package/yum.rb +1421 -1421
- data/lib/chef/provider/package/zypper.rb +143 -143
- data/lib/chef/provider/powershell_script.rb +215 -215
- data/lib/chef/provider/reboot.rb +70 -70
- data/lib/chef/provider/registry_key.rb +155 -155
- data/lib/chef/provider/remote_directory.rb +281 -281
- data/lib/chef/provider/remote_file.rb +53 -53
- data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
- data/lib/chef/provider/remote_file/content.rb +81 -81
- data/lib/chef/provider/remote_file/fetcher.rb +55 -55
- data/lib/chef/provider/remote_file/ftp.rb +183 -183
- data/lib/chef/provider/remote_file/http.rb +117 -117
- data/lib/chef/provider/remote_file/local_file.rb +60 -60
- data/lib/chef/provider/remote_file/network_file.rb +48 -48
- data/lib/chef/provider/resource_update.rb +52 -52
- data/lib/chef/provider/route.rb +229 -229
- data/lib/chef/provider/ruby_block.rb +44 -44
- data/lib/chef/provider/script.rb +85 -85
- data/lib/chef/provider/service.rb +250 -212
- data/lib/chef/provider/service/aix.rb +129 -129
- data/lib/chef/provider/service/aixinit.rb +117 -117
- data/lib/chef/provider/service/arch.rb +118 -118
- data/lib/chef/provider/service/debian.rb +182 -182
- data/lib/chef/provider/service/freebsd.rb +195 -195
- data/lib/chef/provider/service/gentoo.rb +71 -71
- data/lib/chef/provider/service/init.rb +94 -94
- data/lib/chef/provider/service/insserv.rb +59 -59
- data/lib/chef/provider/service/invokercd.rb +41 -41
- data/lib/chef/provider/service/macosx.rb +250 -250
- data/lib/chef/provider/service/openbsd.rb +217 -217
- data/lib/chef/provider/service/redhat.rb +120 -120
- data/lib/chef/provider/service/simple.rb +175 -175
- data/lib/chef/provider/service/solaris.rb +117 -117
- data/lib/chef/provider/service/systemd.rb +155 -139
- data/lib/chef/provider/service/upstart.rb +242 -242
- data/lib/chef/provider/service/windows.rb +313 -313
- data/lib/chef/provider/subversion.rb +221 -221
- data/lib/chef/provider/template.rb +65 -65
- data/lib/chef/provider/template/content.rb +70 -70
- data/lib/chef/provider/template_finder.rb +62 -62
- data/lib/chef/provider/user.rb +211 -211
- data/lib/chef/provider/user/aix.rb +97 -97
- data/lib/chef/provider/user/dscl.rb +710 -710
- data/lib/chef/provider/user/pw.rb +114 -114
- data/lib/chef/provider/user/solaris.rb +121 -121
- data/lib/chef/provider/user/useradd.rb +163 -163
- data/lib/chef/provider/user/windows.rb +128 -128
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
- data/lib/chef/provider/windows_script.rb +72 -72
- data/lib/chef/provider_resolver.rb +170 -170
- data/lib/chef/providers.rb +142 -141
- data/lib/chef/recipe.rb +119 -119
- data/lib/chef/request_id.rb +37 -37
- data/lib/chef/reserved_names.rb +9 -9
- data/lib/chef/resource.rb +1581 -1581
- data/lib/chef/resource/action_class.rb +87 -87
- data/lib/chef/resource/apt_package.rb +32 -32
- data/lib/chef/resource/apt_update.rb +33 -33
- data/lib/chef/resource/bash.rb +33 -33
- data/lib/chef/resource/batch.rb +33 -33
- data/lib/chef/resource/bff_package.rb +27 -27
- data/lib/chef/resource/breakpoint.rb +32 -32
- data/lib/chef/resource/chef_gem.rb +51 -51
- data/lib/chef/resource/chocolatey_package.rb +39 -39
- data/lib/chef/resource/conditional.rb +127 -127
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
- data/lib/chef/resource/cookbook_file.rb +49 -49
- data/lib/chef/resource/cron.rb +216 -216
- data/lib/chef/resource/csh.rb +33 -33
- data/lib/chef/resource/deploy.rb +443 -443
- data/lib/chef/resource/deploy_revision.rb +31 -31
- data/lib/chef/resource/directory.rb +62 -62
- data/lib/chef/resource/dpkg_package.rb +30 -30
- data/lib/chef/resource/dsc_resource.rb +121 -121
- data/lib/chef/resource/dsc_script.rb +140 -140
- data/lib/chef/resource/easy_install_package.rb +32 -32
- data/lib/chef/resource/env.rb +65 -65
- data/lib/chef/resource/erl_call.rb +85 -85
- data/lib/chef/resource/execute.rb +172 -172
- data/lib/chef/resource/file.rb +83 -83
- data/lib/chef/resource/file/verification.rb +128 -128
- data/lib/chef/resource/freebsd_package.rb +62 -62
- data/lib/chef/resource/gem_package.rb +41 -41
- data/lib/chef/resource/git.rb +44 -44
- data/lib/chef/resource/group.rb +102 -102
- data/lib/chef/resource/homebrew_package.rb +34 -34
- data/lib/chef/resource/http_request.rb +66 -66
- data/lib/chef/resource/ifconfig.rb +147 -147
- data/lib/chef/resource/ips_package.rb +34 -34
- data/lib/chef/resource/ksh.rb +32 -32
- data/lib/chef/resource/launchd.rb +104 -0
- data/lib/chef/resource/link.rb +107 -107
- data/lib/chef/resource/log.rb +76 -76
- data/lib/chef/resource/lwrp_base.rb +124 -124
- data/lib/chef/resource/macosx_service.rb +58 -58
- data/lib/chef/resource/macports_package.rb +27 -27
- data/lib/chef/resource/mdadm.rb +103 -103
- data/lib/chef/resource/mount.rb +187 -187
- data/lib/chef/resource/ohai.rb +53 -53
- data/lib/chef/resource/openbsd_package.rb +35 -35
- data/lib/chef/resource/osx_profile.rb +74 -74
- data/lib/chef/resource/package.rb +47 -47
- data/lib/chef/resource/pacman_package.rb +28 -28
- data/lib/chef/resource/paludis_package.rb +33 -33
- data/lib/chef/resource/perl.rb +32 -32
- data/lib/chef/resource/portage_package.rb +32 -32
- data/lib/chef/resource/powershell_script.rb +50 -50
- data/lib/chef/resource/python.rb +31 -31
- data/lib/chef/resource/reboot.rb +48 -48
- data/lib/chef/resource/registry_key.rb +144 -144
- data/lib/chef/resource/remote_directory.rb +122 -122
- data/lib/chef/resource/remote_file.rb +149 -149
- data/lib/chef/resource/resource_notification.rb +122 -122
- data/lib/chef/resource/route.rb +137 -137
- data/lib/chef/resource/rpm_package.rb +32 -32
- data/lib/chef/resource/ruby.rb +31 -31
- data/lib/chef/resource/ruby_block.rb +53 -53
- data/lib/chef/resource/scm.rb +185 -185
- data/lib/chef/resource/script.rb +74 -74
- data/lib/chef/resource/service.rb +208 -197
- data/lib/chef/resource/smartos_package.rb +29 -29
- data/lib/chef/resource/solaris_package.rb +31 -31
- data/lib/chef/resource/subversion.rb +44 -44
- data/lib/chef/resource/template.rb +215 -215
- data/lib/chef/resource/timestamped_deploy.rb +26 -26
- data/lib/chef/resource/user.rb +160 -160
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
- data/lib/chef/resource/windows_package.rb +55 -55
- data/lib/chef/resource/windows_script.rb +65 -65
- data/lib/chef/resource/windows_service.rb +71 -71
- data/lib/chef/resource/yum_package.rb +47 -47
- data/lib/chef/resource/zypper_package.rb +28 -28
- data/lib/chef/resource_builder.rb +151 -151
- data/lib/chef/resource_collection.rb +89 -89
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -59
- data/lib/chef/resource_collection/resource_list.rb +90 -89
- data/lib/chef/resource_collection/resource_set.rb +170 -170
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -124
- data/lib/chef/resource_definition.rb +68 -68
- data/lib/chef/resource_definition_list.rb +38 -38
- data/lib/chef/resource_reporter.rb +327 -327
- data/lib/chef/resource_resolver.rb +185 -185
- data/lib/chef/resources.rb +88 -87
- data/lib/chef/rest.rb +209 -209
- data/lib/chef/role.rb +280 -280
- data/lib/chef/run_context.rb +670 -670
- data/lib/chef/run_context/cookbook_compiler.rb +289 -289
- data/lib/chef/run_list.rb +168 -166
- data/lib/chef/run_list/run_list_expansion.rb +234 -234
- data/lib/chef/run_list/run_list_item.rb +98 -98
- data/lib/chef/run_list/versioned_recipe_list.rb +102 -102
- data/lib/chef/run_lock.rb +197 -197
- data/lib/chef/run_status.rb +125 -125
- data/lib/chef/runner.rb +141 -141
- data/lib/chef/sandbox.rb +20 -20
- data/lib/chef/scan_access_control.rb +138 -138
- data/lib/chef/search/query.rb +180 -180
- data/lib/chef/server_api.rb +78 -78
- data/lib/chef/shell.rb +327 -322
- data/lib/chef/shell/ext.rb +593 -593
- data/lib/chef/shell/model_wrapper.rb +120 -119
- data/lib/chef/shell/shell_session.rb +299 -299
- data/lib/chef/shell_out.rb +13 -13
- data/lib/chef/tasks/chef_repo.rake +200 -200
- data/lib/chef/user.rb +199 -199
- data/lib/chef/user_v1.rb +330 -330
- data/lib/chef/util/backup.rb +94 -94
- data/lib/chef/util/diff.rb +184 -184
- data/lib/chef/util/dsc/configuration_generator.rb +139 -139
- data/lib/chef/util/dsc/lcm_output_parser.rb +137 -137
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -141
- data/lib/chef/util/dsc/resource_info.rb +26 -26
- data/lib/chef/util/dsc/resource_store.rb +109 -109
- data/lib/chef/util/editor.rb +91 -91
- data/lib/chef/util/file_edit.rb +100 -100
- data/lib/chef/util/path_helper.rb +25 -25
- data/lib/chef/util/powershell/cmdlet.rb +170 -170
- data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
- data/lib/chef/util/powershell/ps_credential.rb +41 -41
- data/lib/chef/util/selinux.rb +92 -92
- data/lib/chef/util/threaded_job_queue.rb +61 -61
- data/lib/chef/util/windows.rb +24 -24
- data/lib/chef/util/windows/net_group.rb +84 -84
- data/lib/chef/util/windows/net_use.rb +85 -85
- data/lib/chef/util/windows/net_user.rb +170 -169
- data/lib/chef/util/windows/volume.rb +59 -59
- data/lib/chef/version.rb +34 -34
- data/lib/chef/version/platform.rb +44 -44
- data/lib/chef/version_class.rb +70 -70
- data/lib/chef/version_constraint.rb +118 -118
- data/lib/chef/version_constraint/platform.rb +26 -26
- data/lib/chef/whitelist.rb +86 -86
- data/lib/chef/win32/api.rb +374 -374
- data/lib/chef/win32/api/crypto.rb +63 -63
- data/lib/chef/win32/api/error.rb +953 -922
- data/lib/chef/win32/api/file.rb +625 -622
- data/lib/chef/win32/api/installer.rb +165 -165
- data/lib/chef/win32/api/memory.rb +105 -105
- data/lib/chef/win32/api/net.rb +312 -312
- data/lib/chef/win32/api/process.rb +42 -42
- data/lib/chef/win32/api/psapi.rb +51 -51
- data/lib/chef/win32/api/registry.rb +51 -51
- data/lib/chef/win32/api/security.rb +460 -460
- data/lib/chef/win32/api/synchronization.rb +89 -89
- data/lib/chef/win32/api/system.rb +238 -238
- data/lib/chef/win32/api/unicode.rb +135 -135
- data/lib/chef/win32/crypto.rb +50 -50
- data/lib/chef/win32/error.rb +86 -76
- data/lib/chef/win32/eventlog.rb +31 -31
- data/lib/chef/win32/file.rb +218 -218
- data/lib/chef/win32/file/info.rb +99 -99
- data/lib/chef/win32/file/version_info.rb +93 -93
- data/lib/chef/win32/handle.rb +55 -55
- data/lib/chef/win32/memory.rb +101 -101
- data/lib/chef/win32/mutex.rb +116 -116
- data/lib/chef/win32/net.rb +311 -311
- data/lib/chef/win32/process.rb +97 -97
- data/lib/chef/win32/registry.rb +372 -372
- data/lib/chef/win32/security.rb +665 -665
- data/lib/chef/win32/security/ace.rb +123 -123
- data/lib/chef/win32/security/acl.rb +103 -103
- data/lib/chef/win32/security/securable_object.rb +109 -109
- data/lib/chef/win32/security/security_descriptor.rb +93 -93
- data/lib/chef/win32/security/sid.rb +304 -304
- data/lib/chef/win32/security/token.rb +72 -72
- data/lib/chef/win32/system.rb +62 -62
- data/lib/chef/win32/unicode.rb +60 -60
- data/lib/chef/win32/version.rb +158 -158
- data/lib/chef/workstation_config_loader.rb +23 -23
- 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.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/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/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 -0
- data/spec/data/client.d_00/01-bar.rb +1 -0
- data/spec/data/client.d_00/bar +1 -0
- data/spec/data/client.d_01/foo/bar.rb +1 -0
- data/spec/data/client.d_02/foo.rb/foo.txt +1 -0
- 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.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/java/files/default/java.response +1 -1
- 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/.root_dotfile +0 -0
- 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.rb +4 -4
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
- 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/spec/spec_helper.rb +0 -0
- 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_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/supports-platform-constraints/metadata.rb +5 -5
- 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 +26 -26
- 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 +2 -2
- data/spec/data/lwrp/resources/foo.rb +4 -4
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
- data/spec/data/lwrp_override/resources/foo.rb +10 -10
- data/spec/data/mac_users/10.7-8.plist.xml +559 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
- data/spec/data/mac_users/10.7.plist.xml +559 -559
- data/spec/data/mac_users/10.7.shadow.xml +11 -11
- data/spec/data/mac_users/10.8.plist.xml +559 -559
- data/spec/data/mac_users/10.8.shadow.xml +21 -21
- 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 +19 -19
- 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/recipes/test.rb +7 -7
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
- 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 +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
- 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 +1 -1
- 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/zz_last.rb +3 -3
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
- 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 +1 -1
- 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 +3 -3
- 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 +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
- 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 +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
- 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 +1 -1
- 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 +1 -1
- data/spec/data/run_context/nodes/run_context.rb +5 -5
- data/spec/data/search_queries_to_transform.txt +98 -98
- data/spec/data/shef-config.rb +10 -10
- 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/trusted_certs/example.crt +22 -22
- 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/functional/application_spec.rb +58 -58
- data/spec/functional/assets/chefinittest +34 -34
- data/spec/functional/assets/testchefsubsys +10 -10
- data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
- data/spec/functional/audit/runner_spec.rb +121 -121
- data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
- data/spec/functional/dsl/registry_helper_spec.rb +61 -61
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +101 -101
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
- data/spec/functional/http/simple_spec.rb +140 -140
- data/spec/functional/knife/configure_spec.rb +33 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +167 -167
- data/spec/functional/knife/exec_spec.rb +55 -55
- data/spec/functional/knife/rehash_spec.rb +39 -0
- data/spec/functional/knife/smoke_test.rb +42 -42
- data/spec/functional/knife/ssh_spec.rb +284 -284
- data/spec/functional/mixin/powershell_out_spec.rb +43 -43
- data/spec/functional/mixin/shell_out_spec.rb +48 -48
- data/spec/functional/notifications_spec.rb +238 -238
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
- data/spec/functional/rebooter_spec.rb +105 -105
- data/spec/functional/resource/aix_service_spec.rb +138 -138
- data/spec/functional/resource/aixinit_service_spec.rb +211 -211
- data/spec/functional/resource/base.rb +28 -28
- data/spec/functional/resource/bash_spec.rb +88 -88
- data/spec/functional/resource/batch_spec.rb +30 -30
- data/spec/functional/resource/bff_spec.rb +120 -120
- data/spec/functional/resource/chocolatey_package_spec.rb +130 -124
- data/spec/functional/resource/cookbook_file_spec.rb +81 -81
- data/spec/functional/resource/cron_spec.rb +172 -172
- data/spec/functional/resource/deploy_revision_spec.rb +881 -881
- data/spec/functional/resource/directory_spec.rb +43 -43
- data/spec/functional/resource/dpkg_package_spec.rb +339 -339
- data/spec/functional/resource/dsc_resource_spec.rb +90 -90
- data/spec/functional/resource/dsc_script_spec.rb +479 -469
- data/spec/functional/resource/env_spec.rb +192 -192
- data/spec/functional/resource/execute_spec.rb +154 -154
- data/spec/functional/resource/file_spec.rb +167 -167
- data/spec/functional/resource/git_spec.rb +259 -259
- data/spec/functional/resource/group_spec.rb +461 -461
- data/spec/functional/resource/ifconfig_spec.rb +165 -165
- data/spec/functional/resource/link_spec.rb +613 -613
- data/spec/functional/resource/mount_spec.rb +203 -203
- data/spec/functional/resource/ohai_spec.rb +62 -62
- data/spec/functional/resource/package_spec.rb +386 -386
- data/spec/functional/resource/powershell_script_spec.rb +601 -601
- data/spec/functional/resource/reboot_spec.rb +103 -103
- data/spec/functional/resource/registry_spec.rb +560 -560
- data/spec/functional/resource/remote_directory_spec.rb +220 -220
- data/spec/functional/resource/remote_file_spec.rb +240 -240
- data/spec/functional/resource/rpm_spec.rb +123 -123
- data/spec/functional/resource/template_spec.rb +212 -212
- data/spec/functional/resource/user/dscl_spec.rb +198 -198
- data/spec/functional/resource/user/useradd_spec.rb +692 -699
- data/spec/functional/resource/user/windows_spec.rb +133 -133
- data/spec/functional/resource/windows_package_spec.rb +168 -168
- data/spec/functional/resource/windows_service_spec.rb +102 -102
- data/spec/functional/rest_spec.rb +95 -95
- data/spec/functional/run_lock_spec.rb +466 -466
- data/spec/functional/shell_spec.rb +148 -148
- data/spec/functional/tiny_server_spec.rb +78 -78
- data/spec/functional/util/path_helper_spec.rb +37 -37
- data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
- data/spec/functional/version_spec.rb +35 -35
- data/spec/functional/win32/crypto_spec.rb +54 -54
- data/spec/functional/win32/registry_spec.rb +623 -623
- data/spec/functional/win32/security_spec.rb +100 -100
- data/spec/functional/win32/service_manager_spec.rb +220 -220
- data/spec/functional/win32/sid_spec.rb +55 -55
- data/spec/functional/win32/version_info_spec.rb +50 -50
- data/spec/functional/win32/versions_spec.rb +117 -117
- data/spec/integration/client/client_spec.rb +500 -500
- data/spec/integration/client/ipv6_spec.rb +134 -134
- data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
- data/spec/integration/knife/chef_repo_path_spec.rb +890 -890
- data/spec/integration/knife/chef_repository_file_system_spec.rb +292 -292
- data/spec/integration/knife/chefignore_spec.rb +300 -300
- data/spec/integration/knife/common_options_spec.rb +155 -155
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
- data/spec/integration/knife/delete_spec.rb +1017 -1017
- data/spec/integration/knife/deps_spec.rb +706 -706
- data/spec/integration/knife/diff_spec.rb +602 -602
- data/spec/integration/knife/download_spec.rb +1314 -1314
- data/spec/integration/knife/list_spec.rb +1067 -1067
- data/spec/integration/knife/raw_spec.rb +242 -242
- data/spec/integration/knife/redirection_spec.rb +52 -52
- data/spec/integration/knife/serve_spec.rb +57 -57
- data/spec/integration/knife/show_spec.rb +167 -167
- data/spec/integration/knife/upload_spec.rb +1529 -1529
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +148 -148
- data/spec/integration/recipes/lwrp_spec.rb +53 -53
- data/spec/integration/recipes/provider_choice.rb +37 -37
- data/spec/integration/recipes/recipe_dsl_spec.rb +1519 -1519
- data/spec/integration/recipes/remote_directory.rb +74 -74
- data/spec/integration/recipes/resource_action_spec.rb +569 -569
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +496 -496
- data/spec/integration/recipes/resource_load_spec.rb +208 -208
- data/spec/integration/solo/solo_spec.rb +176 -176
- data/spec/rcov.opts +2 -2
- data/spec/scripts/ssl-serve.rb +47 -47
- data/spec/spec_helper.rb +248 -249
- data/spec/stress/win32/file_spec.rb +37 -37
- data/spec/stress/win32/memory_spec.rb +22 -22
- data/spec/stress/win32/security_spec.rb +69 -69
- data/spec/support/chef_helpers.rb +95 -95
- data/spec/support/key_helpers.rb +104 -104
- data/spec/support/lib/chef/provider/easy.rb +35 -35
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
- data/spec/support/lib/chef/provider/snakeoil.rb +41 -41
- data/spec/support/lib/chef/resource/cat.rb +38 -38
- data/spec/support/lib/chef/resource/one_two_three_four.rb +37 -37
- data/spec/support/lib/chef/resource/openldap_includer.rb +26 -26
- data/spec/support/lib/chef/resource/with_state.rb +28 -28
- data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
- data/spec/support/lib/chef/resource/zen_master.rb +41 -41
- data/spec/support/lib/library_load_order.rb +20 -20
- data/spec/support/matchers/leak.rb +98 -98
- data/spec/support/mock/constant.rb +52 -52
- data/spec/support/mock/platform.rb +25 -25
- data/spec/support/platform_helpers.rb +214 -218
- data/spec/support/platforms/prof/gc.rb +53 -53
- data/spec/support/platforms/prof/win32.rb +45 -45
- data/spec/support/platforms/win32/spec_service.rb +59 -59
- data/spec/support/shared/context/client.rb +285 -285
- data/spec/support/shared/context/config.rb +21 -21
- data/spec/support/shared/context/win32.rb +34 -34
- data/spec/support/shared/examples/client.rb +53 -53
- data/spec/support/shared/functional/diff_disabled.rb +10 -10
- data/spec/support/shared/functional/directory_resource.rb +176 -176
- data/spec/support/shared/functional/file_resource.rb +1049 -1049
- data/spec/support/shared/functional/http.rb +248 -248
- data/spec/support/shared/functional/knife.rb +37 -37
- data/spec/support/shared/functional/securable_resource.rb +547 -547
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
- data/spec/support/shared/functional/win32_service.rb +59 -59
- data/spec/support/shared/functional/windows_script.rb +202 -202
- data/spec/support/shared/integration/app_server_support.rb +42 -42
- data/spec/support/shared/integration/integration_helper.rb +154 -154
- data/spec/support/shared/integration/knife_support.rb +173 -173
- 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/shared_examples.rb +14 -14
- data/spec/support/shared/unit/api_error_inspector.rb +190 -190
- data/spec/support/shared/unit/api_versioning.rb +77 -77
- data/spec/support/shared/unit/application_dot_d.rb +70 -0
- data/spec/support/shared/unit/execute_resource.rb +133 -133
- data/spec/support/shared/unit/file_system_support.rb +69 -69
- data/spec/support/shared/unit/knife_shared.rb +39 -39
- data/spec/support/shared/unit/mock_shellout.rb +49 -49
- data/spec/support/shared/unit/platform_introspector.rb +189 -189
- data/spec/support/shared/unit/provider/file.rb +835 -835
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +433 -433
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
- data/spec/support/shared/unit/script_resource.rb +98 -98
- data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
- data/spec/support/shared/unit/windows_script_resource.rb +80 -80
- data/spec/tiny_server.rb +207 -207
- data/spec/unit/api_client/registration_spec.rb +278 -278
- data/spec/unit/api_client_spec.rb +341 -341
- data/spec/unit/api_client_v1_spec.rb +455 -455
- data/spec/unit/application/apply_spec.rb +110 -110
- data/spec/unit/application/client_spec.rb +435 -431
- data/spec/unit/application/knife_spec.rb +229 -229
- data/spec/unit/application/solo_spec.rb +170 -167
- data/spec/unit/application_spec.rb +384 -384
- data/spec/unit/audit/audit_event_proxy_spec.rb +311 -311
- data/spec/unit/audit/audit_reporter_spec.rb +430 -430
- data/spec/unit/audit/control_group_data_spec.rb +477 -477
- data/spec/unit/audit/logger_spec.rb +42 -42
- data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
- data/spec/unit/audit/runner_spec.rb +144 -144
- data/spec/unit/chef_class_spec.rb +110 -110
- data/spec/unit/chef_fs/config_spec.rb +106 -106
- data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
- data/spec/unit/chef_fs/diff_spec.rb +328 -328
- data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
- data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
- data/spec/unit/chef_fs/file_system_spec.rb +148 -148
- data/spec/unit/chef_fs/parallelizer.rb +479 -479
- data/spec/unit/chef_fs/path_util_spec.rb +108 -108
- data/spec/unit/chef_spec.rb +25 -25
- data/spec/unit/client_spec.rb +544 -544
- data/spec/unit/config_fetcher_spec.rb +125 -125
- data/spec/unit/config_spec.rb +31 -31
- data/spec/unit/cookbook/chefignore_spec.rb +49 -49
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +198 -186
- data/spec/unit/cookbook/file_vendor_spec.rb +97 -97
- data/spec/unit/cookbook/metadata_spec.rb +952 -924
- data/spec/unit/cookbook/synchronizer_spec.rb +520 -520
- data/spec/unit/cookbook/syntax_check_spec.rb +219 -217
- data/spec/unit/cookbook_loader_spec.rb +299 -290
- data/spec/unit/cookbook_manifest_spec.rb +243 -243
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +203 -199
- data/spec/unit/cookbook_spec.rb +66 -66
- data/spec/unit/cookbook_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_version_file_specificity_spec.rb +553 -553
- data/spec/unit/cookbook_version_spec.rb +359 -341
- data/spec/unit/daemon_spec.rb +174 -174
- data/spec/unit/data_bag_item_spec.rb +388 -323
- data/spec/unit/data_bag_spec.rb +260 -260
- data/spec/unit/deprecation_spec.rb +150 -150
- data/spec/unit/digester_spec.rb +49 -49
- data/spec/unit/dsl/audit_spec.rb +43 -43
- data/spec/unit/dsl/data_query_spec.rb +106 -106
- data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
- data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
- data/spec/unit/dsl/recipe_spec.rb +80 -80
- data/spec/unit/dsl/regsitry_helper_spec.rb +52 -52
- data/spec/unit/dsl/resources_spec.rb +85 -85
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -95
- data/spec/unit/encrypted_data_bag_item_spec.rb +437 -437
- data/spec/unit/environment_spec.rb +470 -470
- data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
- data/spec/unit/exceptions_spec.rb +130 -130
- data/spec/unit/file_access_control_spec.rb +308 -308
- data/spec/unit/file_cache_spec.rb +114 -114
- data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
- data/spec/unit/file_content_management/tempfile_spec.rb +85 -0
- data/spec/unit/formatters/base_spec.rb +71 -71
- data/spec/unit/formatters/doc_spec.rb +78 -78
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
- data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
- data/spec/unit/guard_interpreter_spec.rb +41 -41
- data/spec/unit/handler/json_file_spec.rb +63 -63
- data/spec/unit/handler_spec.rb +215 -215
- data/spec/unit/http/authenticator_spec.rb +80 -80
- data/spec/unit/http/basic_client_spec.rb +129 -129
- data/spec/unit/http/http_request_spec.rb +91 -91
- data/spec/unit/http/json_input_spec.rb +128 -128
- data/spec/unit/http/simple_spec.rb +32 -32
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +173 -173
- data/spec/unit/http/ssl_policies_spec.rb +169 -169
- data/spec/unit/http/validate_content_length_spec.rb +207 -192
- data/spec/unit/http_spec.rb +206 -194
- data/spec/unit/json_compat_spec.rb +105 -105
- data/spec/unit/key_spec.rb +631 -631
- 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_spec.rb +822 -773
- data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
- data/spec/unit/knife/client_create_spec.rb +186 -186
- data/spec/unit/knife/client_delete_spec.rb +83 -83
- 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 +83 -83
- data/spec/unit/knife/configure_spec.rb +241 -241
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
- data/spec/unit/knife/cookbook_create_spec.rb +260 -260
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
- data/spec/unit/knife/cookbook_download_spec.rb +237 -237
- data/spec/unit/knife/cookbook_list_spec.rb +88 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
- data/spec/unit/knife/cookbook_metadata_spec.rb +179 -179
- data/spec/unit/knife/cookbook_show_spec.rb +222 -222
- data/spec/unit/knife/cookbook_site_download_spec.rb +149 -149
- data/spec/unit/knife/cookbook_site_install_spec.rb +197 -197
- data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
- data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
- data/spec/unit/knife/cookbook_test_spec.rb +84 -84
- data/spec/unit/knife/cookbook_upload_spec.rb +331 -329
- data/spec/unit/knife/core/bootstrap_context_spec.rb +257 -257
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -41
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +109 -93
- 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/subcommand_loader_spec.rb +70 -64
- data/spec/unit/knife/core/ui_spec.rb +598 -591
- data/spec/unit/knife/data_bag_create_spec.rb +109 -109
- data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
- data/spec/unit/knife/data_bag_from_file_spec.rb +172 -172
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
- data/spec/unit/knife/data_bag_show_spec.rb +123 -123
- 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/index_rebuild_spec.rb +125 -125
- 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/knife_help.rb +92 -92
- data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
- data/spec/unit/knife/node_delete_spec.rb +68 -68
- data/spec/unit/knife/node_edit_spec.rb +114 -114
- data/spec/unit/knife/node_environment_set_spec.rb +80 -80
- 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_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 +140 -140
- data/spec/unit/knife/node_show_spec.rb +65 -65
- data/spec/unit/knife/osc_user_create_spec.rb +93 -93
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
- data/spec/unit/knife/osc_user_list_spec.rb +37 -37
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
- data/spec/unit/knife/osc_user_show_spec.rb +46 -46
- 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/ssh_spec.rb +410 -410
- data/spec/unit/knife/ssl_check_spec.rb +240 -240
- data/spec/unit/knife/ssl_fetch_spec.rb +184 -184
- data/spec/unit/knife/status_spec.rb +108 -108
- 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 +214 -214
- data/spec/unit/knife/user_delete_spec.rb +65 -65
- data/spec/unit/knife/user_edit_spec.rb +66 -66
- data/spec/unit/knife/user_list_spec.rb +36 -36
- data/spec/unit/knife/user_reregister_spec.rb +74 -74
- data/spec/unit/knife/user_show_spec.rb +65 -65
- data/spec/unit/knife_spec.rb +529 -522
- data/spec/unit/lib_backcompat_spec.rb +34 -34
- data/spec/unit/log/syslog_spec.rb +53 -53
- data/spec/unit/log/winevt_spec.rb +55 -55
- data/spec/unit/log_spec.rb +24 -24
- data/spec/unit/lwrp_spec.rb +720 -720
- data/spec/unit/mash_spec.rb +51 -51
- data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
- data/spec/unit/mixin/checksum_spec.rb +40 -40
- data/spec/unit/mixin/command_spec.rb +104 -104
- data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
- data/spec/unit/mixin/deep_merge_spec.rb +342 -342
- data/spec/unit/mixin/deprecation_spec.rb +57 -57
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -100
- data/spec/unit/mixin/params_validate_spec.rb +409 -409
- data/spec/unit/mixin/path_sanity_spec.rb +92 -86
- data/spec/unit/mixin/powershell_out_spec.rb +70 -70
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +83 -83
- data/spec/unit/mixin/properties_spec.rb +97 -97
- data/spec/unit/mixin/proxified_socket_spec.rb +94 -94
- data/spec/unit/mixin/securable_spec.rb +314 -314
- data/spec/unit/mixin/shell_out_spec.rb +299 -299
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
- data/spec/unit/mixin/template_spec.rb +276 -276
- data/spec/unit/mixin/unformatter_spec.rb +61 -61
- data/spec/unit/mixin/uris_spec.rb +57 -57
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
- data/spec/unit/mixin/xml_escape_spec.rb +54 -54
- data/spec/unit/monkey_patches/uri_spec.rb +34 -34
- data/spec/unit/monologger_spec.rb +45 -45
- data/spec/unit/node/attribute_spec.rb +1179 -1179
- data/spec/unit/node/immutable_collections_spec.rb +197 -197
- data/spec/unit/node_map_spec.rb +170 -170
- data/spec/unit/node_spec.rb +1565 -1565
- data/spec/unit/org_spec.rb +196 -196
- data/spec/unit/platform/query_helpers_spec.rb +220 -220
- data/spec/unit/platform_spec.rb +241 -241
- data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
- data/spec/unit/policy_builder/expand_node_object_spec.rb +336 -336
- data/spec/unit/policy_builder/policyfile_spec.rb +745 -739
- data/spec/unit/policy_builder_spec.rb +26 -26
- data/spec/unit/property/state_spec.rb +508 -508
- data/spec/unit/property/validation_spec.rb +704 -704
- data/spec/unit/property_spec.rb +1227 -1227
- data/spec/unit/provider/apt_update_spec.rb +113 -113
- data/spec/unit/provider/breakpoint_spec.rb +53 -53
- data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
- data/spec/unit/provider/cookbook_file_spec.rb +58 -58
- data/spec/unit/provider/cron/unix_spec.rb +139 -139
- data/spec/unit/provider/cron_spec.rb +1010 -1010
- data/spec/unit/provider/deploy/revision_spec.rb +110 -110
- data/spec/unit/provider/deploy/timestamped_spec.rb +40 -40
- data/spec/unit/provider/deploy_spec.rb +641 -641
- data/spec/unit/provider/directory_spec.rb +287 -287
- data/spec/unit/provider/dsc_resource_spec.rb +167 -118
- data/spec/unit/provider/dsc_script_spec.rb +173 -173
- data/spec/unit/provider/env/windows_spec.rb +103 -103
- data/spec/unit/provider/env_spec.rb +310 -310
- data/spec/unit/provider/erl_call_spec.rb +85 -85
- data/spec/unit/provider/execute_spec.rb +243 -243
- data/spec/unit/provider/file/content_spec.rb +114 -114
- data/spec/unit/provider/file_spec.rb +56 -56
- data/spec/unit/provider/git_spec.rb +668 -668
- data/spec/unit/provider/group/dscl_spec.rb +331 -331
- data/spec/unit/provider/group/gpasswd_spec.rb +116 -116
- data/spec/unit/provider/group/groupadd_spec.rb +174 -174
- data/spec/unit/provider/group/groupmod_spec.rb +133 -133
- data/spec/unit/provider/group/pw_spec.rb +138 -138
- data/spec/unit/provider/group/usermod_spec.rb +115 -115
- data/spec/unit/provider/group/windows_spec.rb +101 -101
- data/spec/unit/provider/group_spec.rb +286 -286
- data/spec/unit/provider/http_request_spec.rb +159 -159
- data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
- data/spec/unit/provider/ifconfig/debian_spec.rb +344 -344
- data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -73
- data/spec/unit/provider/ifconfig_spec.rb +200 -200
- data/spec/unit/provider/launchd_spec.rb +189 -0
- data/spec/unit/provider/link_spec.rb +252 -252
- data/spec/unit/provider/log_spec.rb +75 -75
- data/spec/unit/provider/mdadm_spec.rb +131 -131
- data/spec/unit/provider/mount/aix_spec.rb +238 -238
- data/spec/unit/provider/mount/mount_spec.rb +480 -480
- data/spec/unit/provider/mount/solaris_spec.rb +822 -822
- data/spec/unit/provider/mount/windows_spec.rb +151 -151
- data/spec/unit/provider/mount_spec.rb +203 -203
- data/spec/unit/provider/ohai_spec.rb +84 -84
- data/spec/unit/provider/osx_profile_spec.rb +249 -249
- data/spec/unit/provider/package/aix_spec.rb +172 -172
- data/spec/unit/provider/package/apt_spec.rb +386 -386
- data/spec/unit/provider/package/chocolatey_spec.rb +501 -504
- data/spec/unit/provider/package/dpkg_spec.rb +287 -287
- data/spec/unit/provider/package/easy_install_spec.rb +108 -108
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
- data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
- data/spec/unit/provider/package/homebrew_spec.rb +292 -292
- data/spec/unit/provider/package/ips_spec.rb +227 -227
- data/spec/unit/provider/package/macports_spec.rb +203 -203
- data/spec/unit/provider/package/openbsd_spec.rb +132 -132
- data/spec/unit/provider/package/pacman_spec.rb +194 -194
- data/spec/unit/provider/package/paludis_spec.rb +134 -134
- data/spec/unit/provider/package/portage_spec.rb +310 -310
- data/spec/unit/provider/package/rpm_spec.rb +429 -429
- data/spec/unit/provider/package/rubygems_spec.rb +782 -782
- data/spec/unit/provider/package/smartos_spec.rb +110 -110
- data/spec/unit/provider/package/solaris_spec.rb +167 -167
- data/spec/unit/provider/package/windows/exe_spec.rb +187 -187
- data/spec/unit/provider/package/windows/msi_spec.rb +159 -159
- data/spec/unit/provider/package/windows_spec.rb +397 -376
- data/spec/unit/provider/package/yum_spec.rb +2267 -2267
- data/spec/unit/provider/package/zypper_spec.rb +268 -268
- data/spec/unit/provider/package_spec.rb +870 -870
- data/spec/unit/provider/powershell_script_spec.rb +106 -106
- data/spec/unit/provider/registry_key_spec.rb +295 -295
- data/spec/unit/provider/remote_directory_spec.rb +221 -221
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
- data/spec/unit/provider/remote_file/content_spec.rb +252 -252
- data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -94
- data/spec/unit/provider/remote_file/ftp_spec.rb +219 -219
- data/spec/unit/provider/remote_file/http_spec.rb +301 -301
- data/spec/unit/provider/remote_file/local_file_spec.rb +103 -103
- data/spec/unit/provider/remote_file/network_file_spec.rb +45 -45
- data/spec/unit/provider/remote_file_spec.rb +61 -61
- data/spec/unit/provider/route_spec.rb +242 -242
- data/spec/unit/provider/ruby_block_spec.rb +45 -45
- data/spec/unit/provider/script_spec.rb +114 -114
- data/spec/unit/provider/service/aix_service_spec.rb +195 -195
- data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
- data/spec/unit/provider/service/arch_service_spec.rb +324 -324
- data/spec/unit/provider/service/debian_service_spec.rb +375 -375
- data/spec/unit/provider/service/freebsd_service_spec.rb +613 -613
- data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
- data/spec/unit/provider/service/init_service_spec.rb +235 -235
- data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
- data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
- data/spec/unit/provider/service/macosx_spec.rb +335 -335
- data/spec/unit/provider/service/openbsd_service_spec.rb +545 -545
- data/spec/unit/provider/service/redhat_spec.rb +236 -236
- data/spec/unit/provider/service/simple_service_spec.rb +169 -169
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +255 -255
- data/spec/unit/provider/service/systemd_service_spec.rb +344 -279
- data/spec/unit/provider/service/upstart_service_spec.rb +342 -342
- data/spec/unit/provider/service/windows_spec.rb +463 -463
- data/spec/unit/provider/service_spec.rb +168 -168
- data/spec/unit/provider/subversion_spec.rb +298 -298
- data/spec/unit/provider/template/content_spec.rb +169 -169
- data/spec/unit/provider/template_spec.rb +89 -89
- data/spec/unit/provider/user/dscl_spec.rb +901 -900
- data/spec/unit/provider/user/pw_spec.rb +252 -252
- data/spec/unit/provider/user/solaris_spec.rb +139 -137
- data/spec/unit/provider/user/useradd_spec.rb +51 -51
- data/spec/unit/provider/user/windows_spec.rb +185 -185
- data/spec/unit/provider/user_spec.rb +474 -474
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
- data/spec/unit/provider_resolver_spec.rb +893 -893
- data/spec/unit/provider_spec.rb +198 -198
- data/spec/unit/pure_application_spec.rb +32 -32
- data/spec/unit/recipe_spec.rb +699 -699
- data/spec/unit/resource/apt_package_spec.rb +38 -38
- data/spec/unit/resource/apt_update_spec.rb +38 -38
- data/spec/unit/resource/bash_spec.rb +40 -40
- data/spec/unit/resource/batch_spec.rb +49 -49
- data/spec/unit/resource/breakpoint_spec.rb +47 -47
- data/spec/unit/resource/chef_gem_spec.rb +157 -157
- data/spec/unit/resource/chocolatey_package_spec.rb +67 -67
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
- data/spec/unit/resource/conditional_spec.rb +208 -208
- data/spec/unit/resource/cookbook_file_spec.rb +88 -88
- data/spec/unit/resource/cron_spec.rb +186 -186
- data/spec/unit/resource/csh_spec.rb +40 -40
- data/spec/unit/resource/deploy_revision_spec.rb +42 -42
- data/spec/unit/resource/deploy_spec.rb +283 -283
- data/spec/unit/resource/directory_spec.rb +82 -82
- data/spec/unit/resource/dpkg_package_spec.rb +32 -32
- data/spec/unit/resource/dsc_resource_spec.rb +96 -96
- data/spec/unit/resource/dsc_script_spec.rb +134 -134
- data/spec/unit/resource/easy_install_package_spec.rb +39 -39
- data/spec/unit/resource/env_spec.rb +85 -85
- data/spec/unit/resource/erl_call_spec.rb +81 -81
- data/spec/unit/resource/execute_spec.rb +35 -35
- data/spec/unit/resource/file/verification_spec.rb +139 -139
- data/spec/unit/resource/file_spec.rb +130 -130
- data/spec/unit/resource/freebsd_package_spec.rb +87 -87
- data/spec/unit/resource/gem_package_spec.rb +42 -42
- data/spec/unit/resource/git_spec.rb +50 -50
- data/spec/unit/resource/group_spec.rb +162 -157
- data/spec/unit/resource/homebrew_package_spec.rb +50 -50
- data/spec/unit/resource/http_request_spec.rb +59 -59
- data/spec/unit/resource/ifconfig_spec.rb +109 -109
- data/spec/unit/resource/ips_package_spec.rb +40 -40
- data/spec/unit/resource/ksh_spec.rb +40 -40
- data/spec/unit/resource/launchd_spec.rb +31 -0
- data/spec/unit/resource/link_spec.rb +134 -134
- data/spec/unit/resource/log_spec.rb +73 -73
- data/spec/unit/resource/macports_package_spec.rb +32 -32
- data/spec/unit/resource/mdadm_spec.rb +102 -102
- data/spec/unit/resource/mount_spec.rb +214 -214
- data/spec/unit/resource/ohai_spec.rb +61 -61
- data/spec/unit/resource/openbsd_package_spec.rb +48 -48
- data/spec/unit/resource/osx_profile_spec.rb +61 -61
- data/spec/unit/resource/package_spec.rb +93 -93
- data/spec/unit/resource/pacman_package_spec.rb +32 -32
- data/spec/unit/resource/perl_spec.rb +40 -40
- data/spec/unit/resource/portage_package_spec.rb +38 -38
- data/spec/unit/resource/powershell_script_spec.rb +136 -136
- data/spec/unit/resource/python_spec.rb +40 -40
- data/spec/unit/resource/registry_key_spec.rb +199 -199
- data/spec/unit/resource/remote_directory_spec.rb +97 -97
- data/spec/unit/resource/remote_file_spec.rb +207 -207
- data/spec/unit/resource/resource_notification_spec.rb +169 -169
- data/spec/unit/resource/route_spec.rb +107 -107
- data/spec/unit/resource/rpm_package_spec.rb +46 -46
- data/spec/unit/resource/ruby_block_spec.rb +61 -61
- data/spec/unit/resource/ruby_spec.rb +40 -40
- data/spec/unit/resource/scm_spec.rb +193 -193
- data/spec/unit/resource/script_spec.rb +44 -44
- data/spec/unit/resource/service_spec.rb +179 -179
- data/spec/unit/resource/smartos_package_spec.rb +33 -33
- data/spec/unit/resource/solaris_package_spec.rb +42 -42
- data/spec/unit/resource/subversion_spec.rb +71 -71
- data/spec/unit/resource/template_spec.rb +210 -210
- data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
- data/spec/unit/resource/user_spec.rb +133 -133
- data/spec/unit/resource/windows_package_spec.rb +95 -95
- data/spec/unit/resource/windows_service_spec.rb +49 -49
- data/spec/unit/resource/yum_package_spec.rb +89 -89
- data/spec/unit/resource_builder_spec.rb +1 -1
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -199
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
- data/spec/unit/resource_collection_spec.rb +299 -299
- data/spec/unit/resource_definition_spec.rb +117 -117
- data/spec/unit/resource_reporter_spec.rb +758 -758
- data/spec/unit/resource_resolver_spec.rb +52 -52
- data/spec/unit/resource_spec.rb +1101 -1101
- data/spec/unit/rest/auth_credentials_spec.rb +296 -296
- data/spec/unit/rest_spec.rb +753 -753
- data/spec/unit/role_spec.rb +358 -358
- data/spec/unit/run_context/child_run_context_spec.rb +133 -133
- data/spec/unit/run_context/cookbook_compiler_spec.rb +184 -184
- data/spec/unit/run_context_spec.rb +241 -241
- data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
- data/spec/unit/run_list/run_list_item_spec.rb +117 -117
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +194 -194
- data/spec/unit/run_list_spec.rb +312 -312
- data/spec/unit/run_lock_spec.rb +140 -140
- data/spec/unit/run_status_spec.rb +144 -144
- data/spec/unit/runner_spec.rb +411 -411
- data/spec/unit/scan_access_control_spec.rb +183 -183
- data/spec/unit/search/query_spec.rb +289 -289
- data/spec/unit/shell/model_wrapper_spec.rb +96 -96
- data/spec/unit/shell/shell_ext_spec.rb +153 -153
- data/spec/unit/shell/shell_session_spec.rb +195 -195
- data/spec/unit/shell_out_spec.rb +18 -18
- data/spec/unit/shell_spec.rb +162 -162
- data/spec/unit/user_spec.rb +275 -275
- data/spec/unit/user_v1_spec.rb +583 -583
- data/spec/unit/util/backup_spec.rb +141 -141
- data/spec/unit/util/diff_spec.rb +576 -576
- data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +164 -164
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +138 -138
- data/spec/unit/util/dsc/resource_store.rb +76 -76
- data/spec/unit/util/editor_spec.rb +152 -152
- data/spec/unit/util/file_edit_spec.rb +224 -224
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
- data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
- data/spec/unit/util/selinux_spec.rb +171 -171
- data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
- data/spec/unit/version/platform_spec.rb +60 -60
- data/spec/unit/version_class_spec.rb +171 -171
- data/spec/unit/version_constraint/platform_spec.rb +45 -45
- data/spec/unit/version_constraint_spec.rb +179 -179
- data/spec/unit/win32/registry_spec.rb +394 -394
- data/spec/unit/windows_service_spec.rb +116 -116
- data/tasks/cbgb.rb +84 -84
- data/tasks/external_tests.rb +64 -64
- data/tasks/maintainers.rb +210 -210
- data/tasks/rspec.rb +89 -89
- metadata +428 -12
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbooks_dir.rb +0 -84
@@ -1,1519 +1,1519 @@
|
|
1
|
-
require "support/shared/integration/integration_helper"
|
2
|
-
|
3
|
-
describe "Recipe DSL methods" do
|
4
|
-
include IntegrationSupport
|
5
|
-
|
6
|
-
module Namer
|
7
|
-
extend self
|
8
|
-
attr_accessor :current_index
|
9
|
-
end
|
10
|
-
|
11
|
-
before(:all) { Namer.current_index = 1 }
|
12
|
-
before { Namer.current_index += 1 }
|
13
|
-
|
14
|
-
context "with resource 'base_thingy' declared as BaseThingy" do
|
15
|
-
before(:context) {
|
16
|
-
|
17
|
-
class BaseThingy < Chef::Resource
|
18
|
-
resource_name "base_thingy"
|
19
|
-
default_action :create
|
20
|
-
|
21
|
-
class<<self
|
22
|
-
attr_accessor :created_name
|
23
|
-
attr_accessor :created_resource
|
24
|
-
attr_accessor :created_provider
|
25
|
-
end
|
26
|
-
|
27
|
-
def provider
|
28
|
-
Provider
|
29
|
-
end
|
30
|
-
class Provider < Chef::Provider
|
31
|
-
def load_current_resource
|
32
|
-
end
|
33
|
-
|
34
|
-
def action_create
|
35
|
-
BaseThingy.created_name = new_resource.name
|
36
|
-
BaseThingy.created_resource = new_resource.class
|
37
|
-
BaseThingy.created_provider = self.class
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# Modules to put stuff in
|
43
|
-
module RecipeDSLSpecNamespace; end
|
44
|
-
module RecipeDSLSpecNamespace::Bar; end
|
45
|
-
|
46
|
-
}
|
47
|
-
|
48
|
-
before :each do
|
49
|
-
BaseThingy.created_resource = nil
|
50
|
-
BaseThingy.created_provider = nil
|
51
|
-
end
|
52
|
-
|
53
|
-
it "creates base_thingy when you call base_thingy in a recipe" do
|
54
|
-
recipe = converge {
|
55
|
-
base_thingy "blah" do; end
|
56
|
-
}
|
57
|
-
expect(recipe.logged_warnings).to eq ""
|
58
|
-
expect(BaseThingy.created_name).to eq "blah"
|
59
|
-
expect(BaseThingy.created_resource).to eq BaseThingy
|
60
|
-
end
|
61
|
-
|
62
|
-
it "errors out when you call base_thingy do ... end in a recipe" do
|
63
|
-
expect_converge {
|
64
|
-
base_thingy do; end
|
65
|
-
}.to raise_error(ArgumentError, "You must supply a name when declaring a base_thingy resource")
|
66
|
-
end
|
67
|
-
|
68
|
-
it "emits a warning when you call base_thingy 'foo', 'bar' do ... end in a recipe" do
|
69
|
-
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
70
|
-
recipe = converge {
|
71
|
-
base_thingy "foo", "bar" do
|
72
|
-
end
|
73
|
-
}
|
74
|
-
expect(recipe.logged_warnings).to match(/Cannot create resource base_thingy with more than one argument. All arguments except the name \("foo"\) will be ignored. This will cause an error in Chef 13. Arguments: \["foo", "bar"\]/)
|
75
|
-
expect(BaseThingy.created_name).to eq "foo"
|
76
|
-
expect(BaseThingy.created_resource).to eq BaseThingy
|
77
|
-
end
|
78
|
-
|
79
|
-
context "Deprecated automatic resource DSL" do
|
80
|
-
before do
|
81
|
-
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
82
|
-
end
|
83
|
-
|
84
|
-
context "with a resource 'backcompat_thingy' declared in Chef::Resource and Chef::Provider" do
|
85
|
-
before(:context) {
|
86
|
-
|
87
|
-
class Chef::Resource::BackcompatThingy < Chef::Resource
|
88
|
-
default_action :create
|
89
|
-
end
|
90
|
-
class Chef::Provider::BackcompatThingy < Chef::Provider
|
91
|
-
def load_current_resource
|
92
|
-
end
|
93
|
-
|
94
|
-
def action_create
|
95
|
-
BaseThingy.created_resource = new_resource.class
|
96
|
-
BaseThingy.created_provider = self.class
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
}
|
101
|
-
|
102
|
-
it "backcompat_thingy creates a Chef::Resource::BackcompatThingy" do
|
103
|
-
recipe = converge {
|
104
|
-
backcompat_thingy "blah" do; end
|
105
|
-
}
|
106
|
-
expect(BaseThingy.created_resource).to eq Chef::Resource::BackcompatThingy
|
107
|
-
expect(BaseThingy.created_provider).to eq Chef::Provider::BackcompatThingy
|
108
|
-
end
|
109
|
-
|
110
|
-
context "and another resource 'backcompat_thingy' in BackcompatThingy with 'provides'" do
|
111
|
-
before(:context) {
|
112
|
-
|
113
|
-
class RecipeDSLSpecNamespace::BackcompatThingy < BaseThingy
|
114
|
-
provides :backcompat_thingy
|
115
|
-
resource_name :backcompat_thingy
|
116
|
-
end
|
117
|
-
|
118
|
-
}
|
119
|
-
|
120
|
-
it "backcompat_thingy creates a BackcompatThingy" do
|
121
|
-
recipe = converge {
|
122
|
-
backcompat_thingy "blah" do; end
|
123
|
-
}
|
124
|
-
expect(recipe.logged_warnings).to match(/Class Chef::Provider::BackcompatThingy does not declare 'provides :backcompat_thingy'./)
|
125
|
-
expect(BaseThingy.created_resource).not_to be_nil
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context "with a resource named RecipeDSLSpecNamespace::Bar::BarThingy" do
|
131
|
-
before(:context) {
|
132
|
-
|
133
|
-
class RecipeDSLSpecNamespace::Bar::BarThingy < BaseThingy
|
134
|
-
end
|
135
|
-
|
136
|
-
}
|
137
|
-
|
138
|
-
it "bar_thingy does not work" do
|
139
|
-
expect_converge {
|
140
|
-
bar_thingy "blah" do; end
|
141
|
-
}.to raise_error(NoMethodError)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
context "with a resource named Chef::Resource::NoNameThingy with resource_name nil" do
|
146
|
-
before(:context) {
|
147
|
-
|
148
|
-
class Chef::Resource::NoNameThingy < BaseThingy
|
149
|
-
resource_name nil
|
150
|
-
end
|
151
|
-
|
152
|
-
}
|
153
|
-
|
154
|
-
it "no_name_thingy does not work" do
|
155
|
-
expect_converge {
|
156
|
-
no_name_thingy "blah" do; end
|
157
|
-
}.to raise_error(NoMethodError)
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
context "with a resource named AnotherNoNameThingy with resource_name :another_thingy_name" do
|
162
|
-
before(:context) {
|
163
|
-
|
164
|
-
class AnotherNoNameThingy < BaseThingy
|
165
|
-
resource_name :another_thingy_name
|
166
|
-
end
|
167
|
-
|
168
|
-
}
|
169
|
-
|
170
|
-
it "another_no_name_thingy does not work" do
|
171
|
-
expect_converge {
|
172
|
-
another_no_name_thingy "blah" do; end
|
173
|
-
}.to raise_error(NoMethodError)
|
174
|
-
end
|
175
|
-
|
176
|
-
it "another_thingy_name works" do
|
177
|
-
recipe = converge {
|
178
|
-
another_thingy_name "blah" do; end
|
179
|
-
}
|
180
|
-
expect(recipe.logged_warnings).to eq ""
|
181
|
-
expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "with a resource named AnotherNoNameThingy2 with resource_name :another_thingy_name2; resource_name :another_thingy_name3" do
|
186
|
-
before(:context) {
|
187
|
-
|
188
|
-
class AnotherNoNameThingy2 < BaseThingy
|
189
|
-
resource_name :another_thingy_name2
|
190
|
-
resource_name :another_thingy_name3
|
191
|
-
end
|
192
|
-
|
193
|
-
}
|
194
|
-
|
195
|
-
it "another_no_name_thingy does not work" do
|
196
|
-
expect_converge {
|
197
|
-
another_no_name_thingy2 "blah" do; end
|
198
|
-
}.to raise_error(NoMethodError)
|
199
|
-
end
|
200
|
-
|
201
|
-
it "another_thingy_name2 does not work" do
|
202
|
-
expect_converge {
|
203
|
-
another_thingy_name2 "blah" do; end
|
204
|
-
}.to raise_error(NoMethodError)
|
205
|
-
end
|
206
|
-
|
207
|
-
it "yet_another_thingy_name3 works" do
|
208
|
-
recipe = converge {
|
209
|
-
another_thingy_name3 "blah" do; end
|
210
|
-
}
|
211
|
-
expect(recipe.logged_warnings).to eq ""
|
212
|
-
expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy2)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
context "provides overriding resource_name" do
|
217
|
-
context "with a resource named AnotherNoNameThingy3 with provides :another_no_name_thingy3, os: 'blarghle'" do
|
218
|
-
before(:context) {
|
219
|
-
|
220
|
-
class AnotherNoNameThingy3 < BaseThingy
|
221
|
-
resource_name :another_no_name_thingy_3
|
222
|
-
provides :another_no_name_thingy3, os: "blarghle"
|
223
|
-
end
|
224
|
-
|
225
|
-
}
|
226
|
-
|
227
|
-
it "and os = linux, another_no_name_thingy3 does not work" do
|
228
|
-
expect_converge {
|
229
|
-
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
230
|
-
run_context.node.automatic[:os] = "linux"
|
231
|
-
another_no_name_thingy3 "blah" do; end
|
232
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
233
|
-
end
|
234
|
-
|
235
|
-
it "and os = blarghle, another_no_name_thingy3 works" do
|
236
|
-
recipe = converge {
|
237
|
-
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
238
|
-
run_context.node.automatic[:os] = "blarghle"
|
239
|
-
another_no_name_thingy3 "blah" do; end
|
240
|
-
}
|
241
|
-
expect(recipe.logged_warnings).to eq ""
|
242
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy3)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
context "with a resource named AnotherNoNameThingy4 with two provides" do
|
247
|
-
before(:context) {
|
248
|
-
|
249
|
-
class AnotherNoNameThingy4 < BaseThingy
|
250
|
-
resource_name :another_no_name_thingy_4
|
251
|
-
provides :another_no_name_thingy4, os: "blarghle"
|
252
|
-
provides :another_no_name_thingy4, platform_family: "foo"
|
253
|
-
end
|
254
|
-
|
255
|
-
}
|
256
|
-
|
257
|
-
it "and os = linux, another_no_name_thingy4 does not work" do
|
258
|
-
expect_converge {
|
259
|
-
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
260
|
-
run_context.node.automatic[:os] = "linux"
|
261
|
-
another_no_name_thingy4 "blah" do; end
|
262
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
263
|
-
end
|
264
|
-
|
265
|
-
it "and os = blarghle, another_no_name_thingy4 works" do
|
266
|
-
recipe = converge {
|
267
|
-
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
268
|
-
run_context.node.automatic[:os] = "blarghle"
|
269
|
-
another_no_name_thingy4 "blah" do; end
|
270
|
-
}
|
271
|
-
expect(recipe.logged_warnings).to eq ""
|
272
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
|
273
|
-
end
|
274
|
-
|
275
|
-
it "and platform_family = foo, another_no_name_thingy4 works" do
|
276
|
-
recipe = converge {
|
277
|
-
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
278
|
-
run_context.node.automatic[:platform_family] = "foo"
|
279
|
-
another_no_name_thingy4 "blah" do; end
|
280
|
-
}
|
281
|
-
expect(recipe.logged_warnings).to eq ""
|
282
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
context "with a resource named AnotherNoNameThingy5, a different resource_name, and a provides with the original resource_name" do
|
287
|
-
before(:context) {
|
288
|
-
|
289
|
-
class AnotherNoNameThingy5 < BaseThingy
|
290
|
-
resource_name :another_thingy_name_for_another_no_name_thingy5
|
291
|
-
provides :another_no_name_thingy5, os: "blarghle"
|
292
|
-
end
|
293
|
-
|
294
|
-
}
|
295
|
-
|
296
|
-
it "and os = linux, another_no_name_thingy5 does not work" do
|
297
|
-
expect_converge {
|
298
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
299
|
-
run_context.node.automatic[:os] = "linux"
|
300
|
-
another_no_name_thingy5 "blah" do; end
|
301
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
302
|
-
end
|
303
|
-
|
304
|
-
it "and os = blarghle, another_no_name_thingy5 works" do
|
305
|
-
recipe = converge {
|
306
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
307
|
-
run_context.node.automatic[:os] = "blarghle"
|
308
|
-
another_no_name_thingy5 "blah" do; end
|
309
|
-
}
|
310
|
-
expect(recipe.logged_warnings).to eq ""
|
311
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
|
312
|
-
end
|
313
|
-
|
314
|
-
it "the new resource name can be used in a recipe" do
|
315
|
-
recipe = converge {
|
316
|
-
another_thingy_name_for_another_no_name_thingy5 "blah" do; end
|
317
|
-
}
|
318
|
-
expect(recipe.logged_warnings).to eq ""
|
319
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
context "with a resource named AnotherNoNameThingy6, a provides with the original resource name, and a different resource_name" do
|
324
|
-
before(:context) {
|
325
|
-
|
326
|
-
class AnotherNoNameThingy6 < BaseThingy
|
327
|
-
provides :another_no_name_thingy6, os: "blarghle"
|
328
|
-
resource_name :another_thingy_name_for_another_no_name_thingy6
|
329
|
-
end
|
330
|
-
|
331
|
-
}
|
332
|
-
|
333
|
-
it "and os = linux, another_no_name_thingy6 does not work" do
|
334
|
-
expect_converge {
|
335
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
336
|
-
run_context.node.automatic[:os] = "linux"
|
337
|
-
another_no_name_thingy6 "blah" do; end
|
338
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
339
|
-
end
|
340
|
-
|
341
|
-
it "and os = blarghle, another_no_name_thingy6 works" do
|
342
|
-
recipe = converge {
|
343
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
344
|
-
run_context.node.automatic[:os] = "blarghle"
|
345
|
-
another_no_name_thingy6 "blah" do; end
|
346
|
-
}
|
347
|
-
expect(recipe.logged_warnings).to eq ""
|
348
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
|
349
|
-
end
|
350
|
-
|
351
|
-
it "the new resource name can be used in a recipe" do
|
352
|
-
recipe = converge {
|
353
|
-
another_thingy_name_for_another_no_name_thingy6 "blah" do; end
|
354
|
-
}
|
355
|
-
expect(recipe.logged_warnings).to eq ""
|
356
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
context "with a resource named AnotherNoNameThingy7, a new resource_name, and provides with that new resource name" do
|
361
|
-
before(:context) {
|
362
|
-
|
363
|
-
class AnotherNoNameThingy7 < BaseThingy
|
364
|
-
resource_name :another_thingy_name_for_another_no_name_thingy7
|
365
|
-
provides :another_thingy_name_for_another_no_name_thingy7, os: "blarghle"
|
366
|
-
end
|
367
|
-
|
368
|
-
}
|
369
|
-
|
370
|
-
it "and os = linux, another_thingy_name_for_another_no_name_thingy7 does not work" do
|
371
|
-
expect_converge {
|
372
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
373
|
-
run_context.node.automatic[:os] = "linux"
|
374
|
-
another_thingy_name_for_another_no_name_thingy7 "blah" do; end
|
375
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
376
|
-
end
|
377
|
-
|
378
|
-
it "and os = blarghle, another_thingy_name_for_another_no_name_thingy7 works" do
|
379
|
-
recipe = converge {
|
380
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
381
|
-
run_context.node.automatic[:os] = "blarghle"
|
382
|
-
another_thingy_name_for_another_no_name_thingy7 "blah" do; end
|
383
|
-
}
|
384
|
-
expect(recipe.logged_warnings).to eq ""
|
385
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy7)
|
386
|
-
end
|
387
|
-
|
388
|
-
it "the old resource name does not work" do
|
389
|
-
expect_converge {
|
390
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
391
|
-
run_context.node.automatic[:os] = "linux"
|
392
|
-
another_no_name_thingy_7 "blah" do; end
|
393
|
-
}.to raise_error(NoMethodError)
|
394
|
-
end
|
395
|
-
end
|
396
|
-
|
397
|
-
# opposite order from the previous test (provides, then resource_name)
|
398
|
-
context "with a resource named AnotherNoNameThingy8, a provides with a new resource name, and resource_name with that new resource name" do
|
399
|
-
before(:context) {
|
400
|
-
|
401
|
-
class AnotherNoNameThingy8 < BaseThingy
|
402
|
-
provides :another_thingy_name_for_another_no_name_thingy8, os: "blarghle"
|
403
|
-
resource_name :another_thingy_name_for_another_no_name_thingy8
|
404
|
-
end
|
405
|
-
|
406
|
-
}
|
407
|
-
|
408
|
-
it "and os = linux, another_thingy_name_for_another_no_name_thingy8 does not work" do
|
409
|
-
expect_converge {
|
410
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
411
|
-
run_context.node.automatic[:os] = "linux"
|
412
|
-
another_thingy_name_for_another_no_name_thingy8 "blah" do; end
|
413
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
414
|
-
end
|
415
|
-
|
416
|
-
it "and os = blarghle, another_thingy_name_for_another_no_name_thingy8 works" do
|
417
|
-
recipe = converge {
|
418
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
419
|
-
run_context.node.automatic[:os] = "blarghle"
|
420
|
-
another_thingy_name_for_another_no_name_thingy8 "blah" do; end
|
421
|
-
}
|
422
|
-
expect(recipe.logged_warnings).to eq ""
|
423
|
-
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy8)
|
424
|
-
end
|
425
|
-
|
426
|
-
it "the old resource name does not work" do
|
427
|
-
expect_converge {
|
428
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
429
|
-
run_context.node.automatic[:os] = "linux"
|
430
|
-
another_thingy_name8 "blah" do; end
|
431
|
-
}.to raise_error(NoMethodError)
|
432
|
-
end
|
433
|
-
end
|
434
|
-
end
|
435
|
-
end
|
436
|
-
|
437
|
-
context "provides" do
|
438
|
-
context "when MySupplier provides :hemlock" do
|
439
|
-
before(:context) {
|
440
|
-
|
441
|
-
class RecipeDSLSpecNamespace::MySupplier < BaseThingy
|
442
|
-
resource_name :hemlock
|
443
|
-
end
|
444
|
-
|
445
|
-
}
|
446
|
-
|
447
|
-
it "my_supplier does not work in a recipe" do
|
448
|
-
expect_converge {
|
449
|
-
my_supplier "blah" do; end
|
450
|
-
}.to raise_error(NoMethodError)
|
451
|
-
end
|
452
|
-
|
453
|
-
it "hemlock works in a recipe" do
|
454
|
-
expect_recipe {
|
455
|
-
hemlock "blah" do; end
|
456
|
-
}.to emit_no_warnings_or_errors
|
457
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::MySupplier
|
458
|
-
end
|
459
|
-
end
|
460
|
-
|
461
|
-
context "when Thingy3 has resource_name :thingy3" do
|
462
|
-
before(:context) {
|
463
|
-
|
464
|
-
class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
|
465
|
-
resource_name :thingy3
|
466
|
-
end
|
467
|
-
|
468
|
-
}
|
469
|
-
|
470
|
-
it "thingy3 works in a recipe" do
|
471
|
-
expect_recipe {
|
472
|
-
thingy3 "blah" do; end
|
473
|
-
}.to emit_no_warnings_or_errors
|
474
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
475
|
-
end
|
476
|
-
|
477
|
-
context "and Thingy4 has resource_name :thingy3" do
|
478
|
-
before(:context) {
|
479
|
-
|
480
|
-
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
481
|
-
resource_name :thingy3
|
482
|
-
end
|
483
|
-
|
484
|
-
}
|
485
|
-
|
486
|
-
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
487
|
-
recipe = converge {
|
488
|
-
thingy3 "blah" do; end
|
489
|
-
}
|
490
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
491
|
-
end
|
492
|
-
|
493
|
-
it "thingy4 does not work in a recipe" do
|
494
|
-
expect_converge {
|
495
|
-
thingy4 "blah" do; end
|
496
|
-
}.to raise_error(NoMethodError)
|
497
|
-
end
|
498
|
-
|
499
|
-
it "resource_matching_short_name returns Thingy4" do
|
500
|
-
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
501
|
-
end
|
502
|
-
end
|
503
|
-
end
|
504
|
-
|
505
|
-
context "when Thingy5 has resource_name :thingy5 and provides :thingy5reverse, :thingy5_2 and :thingy5_2reverse" do
|
506
|
-
before(:context) {
|
507
|
-
|
508
|
-
class RecipeDSLSpecNamespace::Thingy5 < BaseThingy
|
509
|
-
resource_name :thingy5
|
510
|
-
provides :thingy5reverse
|
511
|
-
provides :thingy5_2
|
512
|
-
provides :thingy5_2reverse
|
513
|
-
end
|
514
|
-
|
515
|
-
}
|
516
|
-
|
517
|
-
it "thingy5 works in a recipe" do
|
518
|
-
expect_recipe {
|
519
|
-
thingy5 "blah" do; end
|
520
|
-
}.to emit_no_warnings_or_errors
|
521
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
522
|
-
end
|
523
|
-
|
524
|
-
context "and Thingy6 provides :thingy5" do
|
525
|
-
before(:context) {
|
526
|
-
|
527
|
-
class RecipeDSLSpecNamespace::Thingy6 < BaseThingy
|
528
|
-
resource_name :thingy6
|
529
|
-
provides :thingy5
|
530
|
-
end
|
531
|
-
|
532
|
-
}
|
533
|
-
|
534
|
-
it "thingy6 works in a recipe and yields Thingy6" do
|
535
|
-
recipe = converge {
|
536
|
-
thingy6 "blah" do; end
|
537
|
-
}
|
538
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy6
|
539
|
-
end
|
540
|
-
|
541
|
-
it "thingy5 works in a recipe and yields Foo::Thingy5 (the alphabetical one)" do
|
542
|
-
recipe = converge {
|
543
|
-
thingy5 "blah" do; end
|
544
|
-
}
|
545
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
546
|
-
end
|
547
|
-
|
548
|
-
it "resource_matching_short_name returns Thingy5" do
|
549
|
-
expect(Chef::Resource.resource_matching_short_name(:thingy5)).to eq RecipeDSLSpecNamespace::Thingy5
|
550
|
-
end
|
551
|
-
|
552
|
-
context "and AThingy5 provides :thingy5reverse" do
|
553
|
-
before(:context) {
|
554
|
-
|
555
|
-
class RecipeDSLSpecNamespace::AThingy5 < BaseThingy
|
556
|
-
resource_name :thingy5reverse
|
557
|
-
end
|
558
|
-
|
559
|
-
}
|
560
|
-
|
561
|
-
it "thingy5reverse works in a recipe and yields AThingy5 (the alphabetical one)" do
|
562
|
-
recipe = converge {
|
563
|
-
thingy5reverse "blah" do; end
|
564
|
-
}
|
565
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::AThingy5
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
context "and ZRecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
|
570
|
-
before(:context) {
|
571
|
-
|
572
|
-
module ZRecipeDSLSpecNamespace
|
573
|
-
class Thingy5 < BaseThingy
|
574
|
-
resource_name :thingy5_2
|
575
|
-
end
|
576
|
-
end
|
577
|
-
|
578
|
-
}
|
579
|
-
|
580
|
-
it "thingy5_2 works in a recipe and yields the RecipeDSLSpaceNamespace one (the alphabetical one)" do
|
581
|
-
recipe = converge {
|
582
|
-
thingy5_2 "blah" do; end
|
583
|
-
}
|
584
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
585
|
-
end
|
586
|
-
end
|
587
|
-
|
588
|
-
context "and ARecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
|
589
|
-
before(:context) {
|
590
|
-
|
591
|
-
module ARecipeDSLSpecNamespace
|
592
|
-
class Thingy5 < BaseThingy
|
593
|
-
resource_name :thingy5_2reverse
|
594
|
-
end
|
595
|
-
end
|
596
|
-
|
597
|
-
}
|
598
|
-
|
599
|
-
it "thingy5_2reverse works in a recipe and yields the ARecipeDSLSpaceNamespace one (the alphabetical one)" do
|
600
|
-
recipe = converge {
|
601
|
-
thingy5_2reverse "blah" do; end
|
602
|
-
}
|
603
|
-
expect(BaseThingy.created_resource).to eq ARecipeDSLSpecNamespace::Thingy5
|
604
|
-
end
|
605
|
-
end
|
606
|
-
end
|
607
|
-
|
608
|
-
context "when Thingy3 has resource_name :thingy3" do
|
609
|
-
before(:context) {
|
610
|
-
|
611
|
-
class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
|
612
|
-
resource_name :thingy3
|
613
|
-
end
|
614
|
-
|
615
|
-
}
|
616
|
-
|
617
|
-
it "thingy3 works in a recipe" do
|
618
|
-
expect_recipe {
|
619
|
-
thingy3 "blah" do; end
|
620
|
-
}.to emit_no_warnings_or_errors
|
621
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
622
|
-
end
|
623
|
-
|
624
|
-
context "and Thingy4 has resource_name :thingy3" do
|
625
|
-
before(:context) {
|
626
|
-
|
627
|
-
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
628
|
-
resource_name :thingy3
|
629
|
-
end
|
630
|
-
|
631
|
-
}
|
632
|
-
|
633
|
-
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
634
|
-
recipe = converge {
|
635
|
-
thingy3 "blah" do; end
|
636
|
-
}
|
637
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
638
|
-
end
|
639
|
-
|
640
|
-
it "thingy4 does not work in a recipe" do
|
641
|
-
expect_converge {
|
642
|
-
thingy4 "blah" do; end
|
643
|
-
}.to raise_error(NoMethodError)
|
644
|
-
end
|
645
|
-
|
646
|
-
it "resource_matching_short_name returns Thingy4" do
|
647
|
-
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
648
|
-
end
|
649
|
-
end
|
650
|
-
|
651
|
-
context "and Thingy4 has resource_name :thingy3" do
|
652
|
-
before(:context) {
|
653
|
-
|
654
|
-
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
655
|
-
resource_name :thingy3
|
656
|
-
end
|
657
|
-
|
658
|
-
}
|
659
|
-
|
660
|
-
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
661
|
-
recipe = converge {
|
662
|
-
thingy3 "blah" do; end
|
663
|
-
}
|
664
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
665
|
-
end
|
666
|
-
|
667
|
-
it "thingy4 does not work in a recipe" do
|
668
|
-
expect_converge {
|
669
|
-
thingy4 "blah" do; end
|
670
|
-
}.to raise_error(NoMethodError)
|
671
|
-
end
|
672
|
-
|
673
|
-
it "resource_matching_short_name returns Thingy4" do
|
674
|
-
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
675
|
-
end
|
676
|
-
end
|
677
|
-
end
|
678
|
-
|
679
|
-
end
|
680
|
-
|
681
|
-
context "when Thingy7 provides :thingy8" do
|
682
|
-
before(:context) {
|
683
|
-
|
684
|
-
class RecipeDSLSpecNamespace::Thingy7 < BaseThingy
|
685
|
-
resource_name :thingy7
|
686
|
-
provides :thingy8
|
687
|
-
end
|
688
|
-
|
689
|
-
}
|
690
|
-
|
691
|
-
context "and Thingy8 has resource_name :thingy8" do
|
692
|
-
before(:context) {
|
693
|
-
|
694
|
-
class RecipeDSLSpecNamespace::Thingy8 < BaseThingy
|
695
|
-
resource_name :thingy8
|
696
|
-
end
|
697
|
-
|
698
|
-
}
|
699
|
-
|
700
|
-
it "thingy7 works in a recipe and yields Thingy7" do
|
701
|
-
recipe = converge {
|
702
|
-
thingy7 "blah" do; end
|
703
|
-
}
|
704
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
|
705
|
-
end
|
706
|
-
|
707
|
-
it "thingy8 works in a recipe and yields Thingy7 (alphabetical)" do
|
708
|
-
recipe = converge {
|
709
|
-
thingy8 "blah" do; end
|
710
|
-
}
|
711
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
|
712
|
-
end
|
713
|
-
|
714
|
-
it "resource_matching_short_name returns Thingy8" do
|
715
|
-
expect(Chef::Resource.resource_matching_short_name(:thingy8)).to eq RecipeDSLSpecNamespace::Thingy8
|
716
|
-
end
|
717
|
-
end
|
718
|
-
end
|
719
|
-
|
720
|
-
context "when Thingy12 provides :thingy12, :twizzle and :twizzle2" do
|
721
|
-
before(:context) {
|
722
|
-
|
723
|
-
class RecipeDSLSpecNamespace::Thingy12 < BaseThingy
|
724
|
-
resource_name :thingy12
|
725
|
-
provides :twizzle
|
726
|
-
provides :twizzle2
|
727
|
-
end
|
728
|
-
|
729
|
-
}
|
730
|
-
|
731
|
-
it "thingy12 works in a recipe and yields Thingy12" do
|
732
|
-
expect_recipe {
|
733
|
-
thingy12 "blah" do; end
|
734
|
-
}.to emit_no_warnings_or_errors
|
735
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
736
|
-
end
|
737
|
-
|
738
|
-
it "twizzle works in a recipe and yields Thingy12" do
|
739
|
-
expect_recipe {
|
740
|
-
twizzle "blah" do; end
|
741
|
-
}.to emit_no_warnings_or_errors
|
742
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
743
|
-
end
|
744
|
-
|
745
|
-
it "twizzle2 works in a recipe and yields Thingy12" do
|
746
|
-
expect_recipe {
|
747
|
-
twizzle2 "blah" do; end
|
748
|
-
}.to emit_no_warnings_or_errors
|
749
|
-
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
750
|
-
end
|
751
|
-
end
|
752
|
-
|
753
|
-
context "with platform-specific resources 'my_super_thingy_foo' and 'my_super_thingy_bar'" do
|
754
|
-
before(:context) {
|
755
|
-
class MySuperThingyFoo < BaseThingy
|
756
|
-
resource_name :my_super_thingy_foo
|
757
|
-
provides :my_super_thingy, platform: "foo"
|
758
|
-
end
|
759
|
-
|
760
|
-
class MySuperThingyBar < BaseThingy
|
761
|
-
resource_name :my_super_thingy_bar
|
762
|
-
provides :my_super_thingy, platform: "bar"
|
763
|
-
end
|
764
|
-
}
|
765
|
-
|
766
|
-
it "A run with platform 'foo' uses MySuperThingyFoo" do
|
767
|
-
r = Cheffish::ChefRun.new(chef_config)
|
768
|
-
r.client.run_context.node.automatic["platform"] = "foo"
|
769
|
-
r.compile_recipe {
|
770
|
-
my_super_thingy "blah" do; end
|
771
|
-
}
|
772
|
-
r.converge
|
773
|
-
expect(r).to emit_no_warnings_or_errors
|
774
|
-
expect(BaseThingy.created_resource).to eq MySuperThingyFoo
|
775
|
-
end
|
776
|
-
|
777
|
-
it "A run with platform 'bar' uses MySuperThingyBar" do
|
778
|
-
r = Cheffish::ChefRun.new(chef_config)
|
779
|
-
r.client.run_context.node.automatic["platform"] = "bar"
|
780
|
-
r.compile_recipe {
|
781
|
-
my_super_thingy "blah" do; end
|
782
|
-
}
|
783
|
-
r.converge
|
784
|
-
expect(r).to emit_no_warnings_or_errors
|
785
|
-
expect(BaseThingy.created_resource).to eq MySuperThingyBar
|
786
|
-
end
|
787
|
-
|
788
|
-
it "A run with platform 'x' reports that my_super_thingy is not supported" do
|
789
|
-
r = Cheffish::ChefRun.new(chef_config)
|
790
|
-
r.client.run_context.node.automatic["platform"] = "x"
|
791
|
-
expect {
|
792
|
-
r.compile_recipe {
|
793
|
-
my_super_thingy "blah" do; end
|
794
|
-
}
|
795
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
796
|
-
end
|
797
|
-
end
|
798
|
-
|
799
|
-
context "when Thingy10 provides :thingy10" do
|
800
|
-
before(:context) {
|
801
|
-
class RecipeDSLSpecNamespace::Thingy10 < BaseThingy
|
802
|
-
resource_name :thingy10
|
803
|
-
end
|
804
|
-
}
|
805
|
-
|
806
|
-
it "declaring a resource providing the same :thingy10 with override: true does not produce a warning" do
|
807
|
-
expect(Chef::Log).not_to receive(:warn)
|
808
|
-
class RecipeDSLSpecNamespace::Thingy10AlternateProvider < BaseThingy
|
809
|
-
provides :thingy10, override: true
|
810
|
-
end
|
811
|
-
end
|
812
|
-
end
|
813
|
-
|
814
|
-
context "when Thingy11 provides :thingy11" do
|
815
|
-
before(:context) {
|
816
|
-
class RecipeDSLSpecNamespace::Thingy11 < BaseThingy
|
817
|
-
resource_name :thingy10
|
818
|
-
end
|
819
|
-
}
|
820
|
-
|
821
|
-
it "declaring a resource providing the same :thingy11 with os: 'linux' does not produce a warning" do
|
822
|
-
expect(Chef::Log).not_to receive(:warn)
|
823
|
-
class RecipeDSLSpecNamespace::Thingy11AlternateProvider < BaseThingy
|
824
|
-
provides :thingy11, os: "linux"
|
825
|
-
end
|
826
|
-
end
|
827
|
-
end
|
828
|
-
end
|
829
|
-
|
830
|
-
context "with a resource named 'B' with resource name :two_classes_one_dsl" do
|
831
|
-
let(:two_classes_one_dsl) { :"two_classes_one_dsl#{Namer.current_index}" }
|
832
|
-
let(:resource_class) {
|
833
|
-
result = Class.new(BaseThingy) do
|
834
|
-
def self.name
|
835
|
-
"B"
|
836
|
-
end
|
837
|
-
|
838
|
-
def self.to_s; name; end
|
839
|
-
|
840
|
-
def self.inspect; name.inspect; end
|
841
|
-
end
|
842
|
-
result.resource_name two_classes_one_dsl
|
843
|
-
result
|
844
|
-
}
|
845
|
-
before { resource_class } # pull on it so it gets defined before the recipe runs
|
846
|
-
|
847
|
-
context "and another resource named 'A' with resource_name :two_classes_one_dsl" do
|
848
|
-
let(:resource_class_a) {
|
849
|
-
result = Class.new(BaseThingy) do
|
850
|
-
def self.name
|
851
|
-
"A"
|
852
|
-
end
|
853
|
-
|
854
|
-
def self.to_s; name; end
|
855
|
-
|
856
|
-
def self.inspect; name.inspect; end
|
857
|
-
end
|
858
|
-
result.resource_name two_classes_one_dsl
|
859
|
-
result
|
860
|
-
}
|
861
|
-
before { resource_class_a } # pull on it so it gets defined before the recipe runs
|
862
|
-
|
863
|
-
it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
|
864
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
865
|
-
recipe = converge {
|
866
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
867
|
-
}
|
868
|
-
expect(recipe.logged_warnings).to eq ""
|
869
|
-
expect(BaseThingy.created_resource).to eq resource_class_a
|
870
|
-
end
|
871
|
-
|
872
|
-
it "resource_matching_short_name returns B" do
|
873
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class_a
|
874
|
-
end
|
875
|
-
end
|
876
|
-
|
877
|
-
context "and another resource named 'Z' with resource_name :two_classes_one_dsl" do
|
878
|
-
let(:resource_class_z) {
|
879
|
-
result = Class.new(BaseThingy) do
|
880
|
-
def self.name
|
881
|
-
"Z"
|
882
|
-
end
|
883
|
-
|
884
|
-
def self.to_s; name; end
|
885
|
-
|
886
|
-
def self.inspect; name.inspect; end
|
887
|
-
end
|
888
|
-
result.resource_name two_classes_one_dsl
|
889
|
-
result
|
890
|
-
}
|
891
|
-
before { resource_class_z } # pull on it so it gets defined before the recipe runs
|
892
|
-
|
893
|
-
it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
|
894
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
895
|
-
recipe = converge {
|
896
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
897
|
-
}
|
898
|
-
expect(recipe.logged_warnings).to eq ""
|
899
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
900
|
-
end
|
901
|
-
|
902
|
-
it "resource_matching_short_name returns B" do
|
903
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
904
|
-
end
|
905
|
-
|
906
|
-
context "and a priority array [ Z, B ]" do
|
907
|
-
before do
|
908
|
-
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z, resource_class ])
|
909
|
-
end
|
910
|
-
|
911
|
-
it "two_classes_one_dsl resolves to Z (respects the priority array)" do
|
912
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
913
|
-
recipe = converge {
|
914
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
915
|
-
}
|
916
|
-
expect(recipe.logged_warnings).to eq ""
|
917
|
-
expect(BaseThingy.created_resource).to eq resource_class_z
|
918
|
-
end
|
919
|
-
|
920
|
-
it "resource_matching_short_name returns B" do
|
921
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
922
|
-
end
|
923
|
-
|
924
|
-
context "when Z provides(:two_classes_one_dsl) { false }" do
|
925
|
-
before do
|
926
|
-
resource_class_z.provides(two_classes_one_dsl) { false }
|
927
|
-
end
|
928
|
-
|
929
|
-
it "two_classes_one_dsl resolves to B (picks the next thing in the priority array)" do
|
930
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
931
|
-
recipe = converge {
|
932
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
933
|
-
}
|
934
|
-
expect(recipe.logged_warnings).to eq ""
|
935
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
936
|
-
end
|
937
|
-
|
938
|
-
it "resource_matching_short_name returns B" do
|
939
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
940
|
-
end
|
941
|
-
end
|
942
|
-
end
|
943
|
-
|
944
|
-
context "and priority arrays [ B ] and [ Z ]" do
|
945
|
-
before do
|
946
|
-
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class ])
|
947
|
-
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
|
948
|
-
end
|
949
|
-
|
950
|
-
it "two_classes_one_dsl resolves to Z (respects the most recent priority array)" do
|
951
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
952
|
-
recipe = converge {
|
953
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
954
|
-
}
|
955
|
-
expect(recipe.logged_warnings).to eq ""
|
956
|
-
expect(BaseThingy.created_resource).to eq resource_class_z
|
957
|
-
end
|
958
|
-
|
959
|
-
it "resource_matching_short_name returns B" do
|
960
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
961
|
-
end
|
962
|
-
|
963
|
-
context "when Z provides(:two_classes_one_dsl) { false }" do
|
964
|
-
before do
|
965
|
-
resource_class_z.provides(two_classes_one_dsl) { false }
|
966
|
-
end
|
967
|
-
|
968
|
-
it "two_classes_one_dsl resolves to B (picks the first match from the other priority array)" do
|
969
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
970
|
-
recipe = converge {
|
971
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
972
|
-
}
|
973
|
-
expect(recipe.logged_warnings).to eq ""
|
974
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
975
|
-
end
|
976
|
-
|
977
|
-
it "resource_matching_short_name returns B" do
|
978
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
979
|
-
end
|
980
|
-
end
|
981
|
-
end
|
982
|
-
|
983
|
-
context "and a priority array [ Z ]" do
|
984
|
-
before do
|
985
|
-
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
|
986
|
-
end
|
987
|
-
|
988
|
-
context "when Z provides(:two_classes_one_dsl) { false }" do
|
989
|
-
before do
|
990
|
-
resource_class_z.provides(two_classes_one_dsl) { false }
|
991
|
-
end
|
992
|
-
|
993
|
-
it "two_classes_one_dsl resolves to B (picks the first match outside the priority array)" do
|
994
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
995
|
-
recipe = converge {
|
996
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
997
|
-
}
|
998
|
-
expect(recipe.logged_warnings).to eq ""
|
999
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
1000
|
-
end
|
1001
|
-
|
1002
|
-
it "resource_matching_short_name returns B" do
|
1003
|
-
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
1004
|
-
end
|
1005
|
-
end
|
1006
|
-
end
|
1007
|
-
|
1008
|
-
end
|
1009
|
-
|
1010
|
-
context "and a provider named 'B' which provides :two_classes_one_dsl" do
|
1011
|
-
before do
|
1012
|
-
resource_class.send(:define_method, :provider) { nil }
|
1013
|
-
end
|
1014
|
-
|
1015
|
-
let(:provider_class) {
|
1016
|
-
result = Class.new(BaseThingy::Provider) do
|
1017
|
-
def self.name
|
1018
|
-
"B"
|
1019
|
-
end
|
1020
|
-
|
1021
|
-
def self.to_s; name; end
|
1022
|
-
|
1023
|
-
def self.inspect; name.inspect; end
|
1024
|
-
end
|
1025
|
-
result.provides two_classes_one_dsl
|
1026
|
-
result
|
1027
|
-
}
|
1028
|
-
before { provider_class } # pull on it so it gets defined before the recipe runs
|
1029
|
-
|
1030
|
-
context "and another provider named 'A'" do
|
1031
|
-
let(:provider_class_a) {
|
1032
|
-
result = Class.new(BaseThingy::Provider) do
|
1033
|
-
def self.name
|
1034
|
-
"A"
|
1035
|
-
end
|
1036
|
-
|
1037
|
-
def self.to_s; name; end
|
1038
|
-
|
1039
|
-
def self.inspect; name.inspect; end
|
1040
|
-
end
|
1041
|
-
result
|
1042
|
-
}
|
1043
|
-
context "which provides :two_classes_one_dsl" do
|
1044
|
-
before { provider_class_a.provides two_classes_one_dsl }
|
1045
|
-
|
1046
|
-
it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
|
1047
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1048
|
-
recipe = converge {
|
1049
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1050
|
-
}
|
1051
|
-
expect(recipe.logged_warnings).to eq ""
|
1052
|
-
expect(BaseThingy.created_provider).to eq provider_class_a
|
1053
|
-
end
|
1054
|
-
end
|
1055
|
-
context "which provides(:two_classes_one_dsl) { false }" do
|
1056
|
-
before { provider_class_a.provides(two_classes_one_dsl) { false } }
|
1057
|
-
|
1058
|
-
it "two_classes_one_dsl resolves to B (since A declined)" do
|
1059
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1060
|
-
recipe = converge {
|
1061
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1062
|
-
}
|
1063
|
-
expect(recipe.logged_warnings).to eq ""
|
1064
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1065
|
-
end
|
1066
|
-
end
|
1067
|
-
end
|
1068
|
-
|
1069
|
-
context "and another provider named 'Z'" do
|
1070
|
-
let(:provider_class_z) {
|
1071
|
-
result = Class.new(BaseThingy::Provider) do
|
1072
|
-
def self.name
|
1073
|
-
"Z"
|
1074
|
-
end
|
1075
|
-
|
1076
|
-
def self.to_s; name; end
|
1077
|
-
|
1078
|
-
def self.inspect; name.inspect; end
|
1079
|
-
end
|
1080
|
-
result
|
1081
|
-
}
|
1082
|
-
before { provider_class_z } # pull on it so it gets defined before the recipe runs
|
1083
|
-
|
1084
|
-
context "which provides :two_classes_one_dsl" do
|
1085
|
-
before { provider_class_z.provides two_classes_one_dsl }
|
1086
|
-
|
1087
|
-
it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
|
1088
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1089
|
-
recipe = converge {
|
1090
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1091
|
-
}
|
1092
|
-
expect(recipe.logged_warnings).to eq ""
|
1093
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1094
|
-
end
|
1095
|
-
|
1096
|
-
context "with a priority array [ Z, B ]" do
|
1097
|
-
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
|
1098
|
-
|
1099
|
-
it "two_classes_one_dsl resolves to Z (respects the priority map)" do
|
1100
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1101
|
-
recipe = converge {
|
1102
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1103
|
-
}
|
1104
|
-
expect(recipe.logged_warnings).to eq ""
|
1105
|
-
expect(BaseThingy.created_provider).to eq provider_class_z
|
1106
|
-
end
|
1107
|
-
end
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
context "which provides(:two_classes_one_dsl) { false }" do
|
1111
|
-
before { provider_class_z.provides(two_classes_one_dsl) { false } }
|
1112
|
-
|
1113
|
-
context "with a priority array [ Z, B ]" do
|
1114
|
-
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
|
1115
|
-
|
1116
|
-
it "two_classes_one_dsl resolves to B (the next one in the priority map)" do
|
1117
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1118
|
-
recipe = converge {
|
1119
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1120
|
-
}
|
1121
|
-
expect(recipe.logged_warnings).to eq ""
|
1122
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1123
|
-
end
|
1124
|
-
end
|
1125
|
-
|
1126
|
-
context "with priority arrays [ B ] and [ Z ]" do
|
1127
|
-
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z ] }
|
1128
|
-
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class ] }
|
1129
|
-
|
1130
|
-
it "two_classes_one_dsl resolves to B (the one in the next priority map)" do
|
1131
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1132
|
-
recipe = converge {
|
1133
|
-
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1134
|
-
}
|
1135
|
-
expect(recipe.logged_warnings).to eq ""
|
1136
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1137
|
-
end
|
1138
|
-
end
|
1139
|
-
end
|
1140
|
-
end
|
1141
|
-
end
|
1142
|
-
|
1143
|
-
context "and another resource Blarghle with provides :two_classes_one_dsl, os: 'blarghle'" do
|
1144
|
-
let(:resource_class_blarghle) {
|
1145
|
-
result = Class.new(BaseThingy) do
|
1146
|
-
def self.name
|
1147
|
-
"Blarghle"
|
1148
|
-
end
|
1149
|
-
|
1150
|
-
def self.to_s; name; end
|
1151
|
-
|
1152
|
-
def self.inspect; name.inspect; end
|
1153
|
-
end
|
1154
|
-
result.resource_name two_classes_one_dsl
|
1155
|
-
result.provides two_classes_one_dsl, os: "blarghle"
|
1156
|
-
result
|
1157
|
-
}
|
1158
|
-
before { resource_class_blarghle } # pull on it so it gets defined before the recipe runs
|
1159
|
-
|
1160
|
-
it "on os = blarghle, two_classes_one_dsl resolves to Blarghle" do
|
1161
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1162
|
-
recipe = converge {
|
1163
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
1164
|
-
run_context.node.automatic[:os] = "blarghle"
|
1165
|
-
instance_eval("#{two_classes_one_dsl} 'blah' do; end")
|
1166
|
-
}
|
1167
|
-
expect(recipe.logged_warnings).to eq ""
|
1168
|
-
expect(BaseThingy.created_resource).to eq resource_class_blarghle
|
1169
|
-
end
|
1170
|
-
|
1171
|
-
it "on os = linux, two_classes_one_dsl resolves to B" do
|
1172
|
-
two_classes_one_dsl = self.two_classes_one_dsl
|
1173
|
-
recipe = converge {
|
1174
|
-
# this is an ugly way to test, make Cheffish expose node attrs
|
1175
|
-
run_context.node.automatic[:os] = "linux"
|
1176
|
-
instance_eval("#{two_classes_one_dsl} 'blah' do; end")
|
1177
|
-
}
|
1178
|
-
expect(recipe.logged_warnings).to eq ""
|
1179
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
1180
|
-
end
|
1181
|
-
end
|
1182
|
-
end
|
1183
|
-
|
1184
|
-
context "with a resource MyResource" do
|
1185
|
-
let(:resource_class) { Class.new(BaseThingy) do
|
1186
|
-
def self.called_provides
|
1187
|
-
@called_provides
|
1188
|
-
end
|
1189
|
-
|
1190
|
-
def to_s
|
1191
|
-
"MyResource"
|
1192
|
-
end
|
1193
|
-
end }
|
1194
|
-
let(:my_resource) { :"my_resource#{Namer.current_index}" }
|
1195
|
-
let(:blarghle_blarghle_little_star) { :"blarghle_blarghle_little_star#{Namer.current_index}" }
|
1196
|
-
|
1197
|
-
context "with resource_name :my_resource" do
|
1198
|
-
before {
|
1199
|
-
resource_class.resource_name my_resource
|
1200
|
-
}
|
1201
|
-
|
1202
|
-
context "with provides? returning true to my_resource" do
|
1203
|
-
before {
|
1204
|
-
my_resource = self.my_resource
|
1205
|
-
resource_class.define_singleton_method(:provides?) do |node, resource_name|
|
1206
|
-
@called_provides = true
|
1207
|
-
resource_name == my_resource
|
1208
|
-
end
|
1209
|
-
}
|
1210
|
-
|
1211
|
-
it "my_resource returns the resource and calls provides?, but does not emit a warning" do
|
1212
|
-
dsl_name = self.my_resource
|
1213
|
-
recipe = converge {
|
1214
|
-
instance_eval("#{dsl_name} 'foo'")
|
1215
|
-
}
|
1216
|
-
expect(recipe.logged_warnings).to eq ""
|
1217
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
1218
|
-
expect(resource_class.called_provides).to be_truthy
|
1219
|
-
end
|
1220
|
-
end
|
1221
|
-
|
1222
|
-
context "with provides? returning true to blarghle_blarghle_little_star and not resource_name" do
|
1223
|
-
before do
|
1224
|
-
blarghle_blarghle_little_star = self.blarghle_blarghle_little_star
|
1225
|
-
resource_class.define_singleton_method(:provides?) do |node, resource_name|
|
1226
|
-
@called_provides = true
|
1227
|
-
resource_name == blarghle_blarghle_little_star
|
1228
|
-
end
|
1229
|
-
end
|
1230
|
-
|
1231
|
-
it "my_resource does not return the resource" do
|
1232
|
-
dsl_name = self.my_resource
|
1233
|
-
expect_converge {
|
1234
|
-
instance_eval("#{dsl_name} 'foo'")
|
1235
|
-
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
1236
|
-
expect(resource_class.called_provides).to be_truthy
|
1237
|
-
end
|
1238
|
-
|
1239
|
-
it "blarghle_blarghle_little_star 'foo' returns the resource and emits a warning" do
|
1240
|
-
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1241
|
-
dsl_name = self.blarghle_blarghle_little_star
|
1242
|
-
recipe = converge {
|
1243
|
-
instance_eval("#{dsl_name} 'foo'")
|
1244
|
-
}
|
1245
|
-
expect(recipe.logged_warnings).to include "WARN: #{resource_class}.provides? returned true when asked if it provides DSL #{dsl_name}, but provides :#{dsl_name} was never called!"
|
1246
|
-
expect(BaseThingy.created_resource).to eq resource_class
|
1247
|
-
expect(resource_class.called_provides).to be_truthy
|
1248
|
-
end
|
1249
|
-
end
|
1250
|
-
|
1251
|
-
context "and a provider" do
|
1252
|
-
let(:provider_class) do
|
1253
|
-
Class.new(BaseThingy::Provider) do
|
1254
|
-
def self.name
|
1255
|
-
"MyProvider"
|
1256
|
-
end
|
1257
|
-
|
1258
|
-
def self.to_s; name; end
|
1259
|
-
|
1260
|
-
def self.inspect; name.inspect; end
|
1261
|
-
|
1262
|
-
def self.called_provides
|
1263
|
-
@called_provides
|
1264
|
-
end
|
1265
|
-
end
|
1266
|
-
end
|
1267
|
-
|
1268
|
-
before do
|
1269
|
-
resource_class.send(:define_method, :provider) { nil }
|
1270
|
-
end
|
1271
|
-
|
1272
|
-
context "that provides :my_resource" do
|
1273
|
-
before do
|
1274
|
-
provider_class.provides my_resource
|
1275
|
-
end
|
1276
|
-
|
1277
|
-
context "with supports? returning true" do
|
1278
|
-
before do
|
1279
|
-
provider_class.define_singleton_method(:supports?) { |resource, action| true }
|
1280
|
-
end
|
1281
|
-
|
1282
|
-
it "my_resource runs the provider and does not emit a warning" do
|
1283
|
-
my_resource = self.my_resource
|
1284
|
-
recipe = converge {
|
1285
|
-
instance_eval("#{my_resource} 'foo'")
|
1286
|
-
}
|
1287
|
-
expect(recipe.logged_warnings).to eq ""
|
1288
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1289
|
-
end
|
1290
|
-
|
1291
|
-
context "and another provider supporting :my_resource with supports? false" do
|
1292
|
-
let(:provider_class2) do
|
1293
|
-
Class.new(BaseThingy::Provider) do
|
1294
|
-
def self.name
|
1295
|
-
"MyProvider2"
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
def self.to_s; name; end
|
1299
|
-
|
1300
|
-
def self.inspect; name.inspect; end
|
1301
|
-
|
1302
|
-
def self.called_provides
|
1303
|
-
@called_provides
|
1304
|
-
end
|
1305
|
-
provides my_resource
|
1306
|
-
def self.supports?(resource, action)
|
1307
|
-
false
|
1308
|
-
end
|
1309
|
-
end
|
1310
|
-
end
|
1311
|
-
|
1312
|
-
it "my_resource runs the first provider" do
|
1313
|
-
my_resource = self.my_resource
|
1314
|
-
recipe = converge {
|
1315
|
-
instance_eval("#{my_resource} 'foo'")
|
1316
|
-
}
|
1317
|
-
expect(recipe.logged_warnings).to eq ""
|
1318
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1319
|
-
end
|
1320
|
-
end
|
1321
|
-
end
|
1322
|
-
|
1323
|
-
context "with supports? returning false" do
|
1324
|
-
before do
|
1325
|
-
provider_class.define_singleton_method(:supports?) { |resource, action| false }
|
1326
|
-
end
|
1327
|
-
|
1328
|
-
# TODO no warning? ick
|
1329
|
-
it "my_resource runs the provider anyway" do
|
1330
|
-
my_resource = self.my_resource
|
1331
|
-
recipe = converge {
|
1332
|
-
instance_eval("#{my_resource} 'foo'")
|
1333
|
-
}
|
1334
|
-
expect(recipe.logged_warnings).to eq ""
|
1335
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1336
|
-
end
|
1337
|
-
|
1338
|
-
context "and another provider supporting :my_resource with supports? true" do
|
1339
|
-
let(:provider_class2) do
|
1340
|
-
my_resource = self.my_resource
|
1341
|
-
Class.new(BaseThingy::Provider) do
|
1342
|
-
def self.name
|
1343
|
-
"MyProvider2"
|
1344
|
-
end
|
1345
|
-
|
1346
|
-
def self.to_s; name; end
|
1347
|
-
|
1348
|
-
def self.inspect; name.inspect; end
|
1349
|
-
|
1350
|
-
def self.called_provides
|
1351
|
-
@called_provides
|
1352
|
-
end
|
1353
|
-
provides my_resource
|
1354
|
-
def self.supports?(resource, action)
|
1355
|
-
true
|
1356
|
-
end
|
1357
|
-
end
|
1358
|
-
end
|
1359
|
-
before { provider_class2 } # make sure the provider class shows up
|
1360
|
-
|
1361
|
-
it "my_resource runs the other provider" do
|
1362
|
-
my_resource = self.my_resource
|
1363
|
-
recipe = converge {
|
1364
|
-
instance_eval("#{my_resource} 'foo'")
|
1365
|
-
}
|
1366
|
-
expect(recipe.logged_warnings).to eq ""
|
1367
|
-
expect(BaseThingy.created_provider).to eq provider_class2
|
1368
|
-
end
|
1369
|
-
end
|
1370
|
-
end
|
1371
|
-
end
|
1372
|
-
|
1373
|
-
context "with provides? returning true" do
|
1374
|
-
before {
|
1375
|
-
my_resource = self.my_resource
|
1376
|
-
provider_class.define_singleton_method(:provides?) do |node, resource|
|
1377
|
-
@called_provides = true
|
1378
|
-
resource.declared_type == my_resource
|
1379
|
-
end
|
1380
|
-
}
|
1381
|
-
|
1382
|
-
context "that provides :my_resource" do
|
1383
|
-
before {
|
1384
|
-
provider_class.provides my_resource
|
1385
|
-
}
|
1386
|
-
|
1387
|
-
it "my_resource calls the provider (and calls provides?), but does not emit a warning" do
|
1388
|
-
my_resource = self.my_resource
|
1389
|
-
recipe = converge {
|
1390
|
-
instance_eval("#{my_resource} 'foo'")
|
1391
|
-
}
|
1392
|
-
expect(recipe.logged_warnings).to eq ""
|
1393
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1394
|
-
expect(provider_class.called_provides).to be_truthy
|
1395
|
-
end
|
1396
|
-
end
|
1397
|
-
|
1398
|
-
context "that does not call provides :my_resource" do
|
1399
|
-
it "my_resource calls the provider (and calls provides?), and emits a warning" do
|
1400
|
-
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1401
|
-
my_resource = self.my_resource
|
1402
|
-
recipe = converge {
|
1403
|
-
instance_eval("#{my_resource} 'foo'")
|
1404
|
-
}
|
1405
|
-
expect(recipe.logged_warnings).to include("WARN: #{provider_class}.provides? returned true when asked if it provides DSL #{my_resource}, but provides :#{my_resource} was never called!")
|
1406
|
-
expect(BaseThingy.created_provider).to eq provider_class
|
1407
|
-
expect(provider_class.called_provides).to be_truthy
|
1408
|
-
end
|
1409
|
-
end
|
1410
|
-
end
|
1411
|
-
|
1412
|
-
context "with provides? returning false to my_resource" do
|
1413
|
-
before {
|
1414
|
-
my_resource = self.my_resource
|
1415
|
-
provider_class.define_singleton_method(:provides?) do |node, resource|
|
1416
|
-
@called_provides = true
|
1417
|
-
false
|
1418
|
-
end
|
1419
|
-
}
|
1420
|
-
|
1421
|
-
context "that provides :my_resource" do
|
1422
|
-
before {
|
1423
|
-
provider_class.provides my_resource
|
1424
|
-
}
|
1425
|
-
|
1426
|
-
it "my_resource fails to find a provider (and calls provides)" do
|
1427
|
-
my_resource = self.my_resource
|
1428
|
-
expect_converge {
|
1429
|
-
instance_eval("#{my_resource} 'foo'")
|
1430
|
-
}.to raise_error(Chef::Exceptions::ProviderNotFound)
|
1431
|
-
expect(provider_class.called_provides).to be_truthy
|
1432
|
-
end
|
1433
|
-
end
|
1434
|
-
|
1435
|
-
context "that does not provide :my_resource" do
|
1436
|
-
it "my_resource fails to find a provider (and calls provides)" do
|
1437
|
-
my_resource = self.my_resource
|
1438
|
-
expect_converge {
|
1439
|
-
instance_eval("#{my_resource} 'foo'")
|
1440
|
-
}.to raise_error(Chef::Exceptions::ProviderNotFound)
|
1441
|
-
expect(provider_class.called_provides).to be_truthy
|
1442
|
-
end
|
1443
|
-
end
|
1444
|
-
end
|
1445
|
-
end
|
1446
|
-
end
|
1447
|
-
end
|
1448
|
-
end
|
1449
|
-
|
1450
|
-
before(:all) { Namer.current_index = 0 }
|
1451
|
-
before { Namer.current_index += 1 }
|
1452
|
-
|
1453
|
-
context "with an LWRP that declares actions" do
|
1454
|
-
let(:resource_class) {
|
1455
|
-
Class.new(Chef::Resource::LWRPBase) do
|
1456
|
-
provides :"recipe_dsl_spec#{Namer.current_index}"
|
1457
|
-
actions :create
|
1458
|
-
end
|
1459
|
-
}
|
1460
|
-
let(:resource) {
|
1461
|
-
resource_class.new("blah", run_context)
|
1462
|
-
}
|
1463
|
-
it "The actions are part of actions along with :nothing" do
|
1464
|
-
expect(resource_class.actions).to eq [ :nothing, :create ]
|
1465
|
-
end
|
1466
|
-
it "The actions are part of allowed_actions along with :nothing" do
|
1467
|
-
expect(resource.allowed_actions).to eq [ :nothing, :create ]
|
1468
|
-
end
|
1469
|
-
|
1470
|
-
context "and a subclass that declares more actions" do
|
1471
|
-
let(:subresource_class) {
|
1472
|
-
Class.new(Chef::Resource::LWRPBase) do
|
1473
|
-
provides :"recipe_dsl_spec_sub#{Namer.current_index}"
|
1474
|
-
actions :delete
|
1475
|
-
end
|
1476
|
-
}
|
1477
|
-
let(:subresource) {
|
1478
|
-
subresource_class.new("subblah", run_context)
|
1479
|
-
}
|
1480
|
-
|
1481
|
-
it "The parent class actions are not part of actions" do
|
1482
|
-
expect(subresource_class.actions).to eq [ :nothing, :delete ]
|
1483
|
-
end
|
1484
|
-
it "The parent class actions are not part of allowed_actions" do
|
1485
|
-
expect(subresource.allowed_actions).to eq [ :nothing, :delete ]
|
1486
|
-
end
|
1487
|
-
it "The parent class actions do not change" do
|
1488
|
-
expect(resource_class.actions).to eq [ :nothing, :create ]
|
1489
|
-
expect(resource.allowed_actions).to eq [ :nothing, :create ]
|
1490
|
-
end
|
1491
|
-
end
|
1492
|
-
end
|
1493
|
-
|
1494
|
-
context "with a dynamically defined resource and regular provider" do
|
1495
|
-
before(:context) do
|
1496
|
-
Class.new(Chef::Resource) do
|
1497
|
-
resource_name :lw_resource_with_hw_provider_test_case
|
1498
|
-
default_action :create
|
1499
|
-
attr_accessor :created_provider
|
1500
|
-
end
|
1501
|
-
class Chef::Provider::LwResourceWithHwProviderTestCase < Chef::Provider
|
1502
|
-
def load_current_resource
|
1503
|
-
end
|
1504
|
-
|
1505
|
-
def action_create
|
1506
|
-
new_resource.created_provider = self.class
|
1507
|
-
end
|
1508
|
-
end
|
1509
|
-
end
|
1510
|
-
|
1511
|
-
it "looks up the provider in Chef::Provider converting the resource name from snake case to camel case" do
|
1512
|
-
resource = nil
|
1513
|
-
recipe = converge {
|
1514
|
-
resource = lw_resource_with_hw_provider_test_case "blah" do; end
|
1515
|
-
}
|
1516
|
-
expect(resource.created_provider).to eq(Chef::Provider::LwResourceWithHwProviderTestCase)
|
1517
|
-
end
|
1518
|
-
end
|
1519
|
-
end
|
1
|
+
require "support/shared/integration/integration_helper"
|
2
|
+
|
3
|
+
describe "Recipe DSL methods" do
|
4
|
+
include IntegrationSupport
|
5
|
+
|
6
|
+
module Namer
|
7
|
+
extend self
|
8
|
+
attr_accessor :current_index
|
9
|
+
end
|
10
|
+
|
11
|
+
before(:all) { Namer.current_index = 1 }
|
12
|
+
before { Namer.current_index += 1 }
|
13
|
+
|
14
|
+
context "with resource 'base_thingy' declared as BaseThingy" do
|
15
|
+
before(:context) {
|
16
|
+
|
17
|
+
class BaseThingy < Chef::Resource
|
18
|
+
resource_name "base_thingy"
|
19
|
+
default_action :create
|
20
|
+
|
21
|
+
class<<self
|
22
|
+
attr_accessor :created_name
|
23
|
+
attr_accessor :created_resource
|
24
|
+
attr_accessor :created_provider
|
25
|
+
end
|
26
|
+
|
27
|
+
def provider
|
28
|
+
Provider
|
29
|
+
end
|
30
|
+
class Provider < Chef::Provider
|
31
|
+
def load_current_resource
|
32
|
+
end
|
33
|
+
|
34
|
+
def action_create
|
35
|
+
BaseThingy.created_name = new_resource.name
|
36
|
+
BaseThingy.created_resource = new_resource.class
|
37
|
+
BaseThingy.created_provider = self.class
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Modules to put stuff in
|
43
|
+
module RecipeDSLSpecNamespace; end
|
44
|
+
module RecipeDSLSpecNamespace::Bar; end
|
45
|
+
|
46
|
+
}
|
47
|
+
|
48
|
+
before :each do
|
49
|
+
BaseThingy.created_resource = nil
|
50
|
+
BaseThingy.created_provider = nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "creates base_thingy when you call base_thingy in a recipe" do
|
54
|
+
recipe = converge {
|
55
|
+
base_thingy "blah" do; end
|
56
|
+
}
|
57
|
+
expect(recipe.logged_warnings).to eq ""
|
58
|
+
expect(BaseThingy.created_name).to eq "blah"
|
59
|
+
expect(BaseThingy.created_resource).to eq BaseThingy
|
60
|
+
end
|
61
|
+
|
62
|
+
it "errors out when you call base_thingy do ... end in a recipe" do
|
63
|
+
expect_converge {
|
64
|
+
base_thingy do; end
|
65
|
+
}.to raise_error(ArgumentError, "You must supply a name when declaring a base_thingy resource")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "emits a warning when you call base_thingy 'foo', 'bar' do ... end in a recipe" do
|
69
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
70
|
+
recipe = converge {
|
71
|
+
base_thingy "foo", "bar" do
|
72
|
+
end
|
73
|
+
}
|
74
|
+
expect(recipe.logged_warnings).to match(/Cannot create resource base_thingy with more than one argument. All arguments except the name \("foo"\) will be ignored. This will cause an error in Chef 13. Arguments: \["foo", "bar"\]/)
|
75
|
+
expect(BaseThingy.created_name).to eq "foo"
|
76
|
+
expect(BaseThingy.created_resource).to eq BaseThingy
|
77
|
+
end
|
78
|
+
|
79
|
+
context "Deprecated automatic resource DSL" do
|
80
|
+
before do
|
81
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with a resource 'backcompat_thingy' declared in Chef::Resource and Chef::Provider" do
|
85
|
+
before(:context) {
|
86
|
+
|
87
|
+
class Chef::Resource::BackcompatThingy < Chef::Resource
|
88
|
+
default_action :create
|
89
|
+
end
|
90
|
+
class Chef::Provider::BackcompatThingy < Chef::Provider
|
91
|
+
def load_current_resource
|
92
|
+
end
|
93
|
+
|
94
|
+
def action_create
|
95
|
+
BaseThingy.created_resource = new_resource.class
|
96
|
+
BaseThingy.created_provider = self.class
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
}
|
101
|
+
|
102
|
+
it "backcompat_thingy creates a Chef::Resource::BackcompatThingy" do
|
103
|
+
recipe = converge {
|
104
|
+
backcompat_thingy "blah" do; end
|
105
|
+
}
|
106
|
+
expect(BaseThingy.created_resource).to eq Chef::Resource::BackcompatThingy
|
107
|
+
expect(BaseThingy.created_provider).to eq Chef::Provider::BackcompatThingy
|
108
|
+
end
|
109
|
+
|
110
|
+
context "and another resource 'backcompat_thingy' in BackcompatThingy with 'provides'" do
|
111
|
+
before(:context) {
|
112
|
+
|
113
|
+
class RecipeDSLSpecNamespace::BackcompatThingy < BaseThingy
|
114
|
+
provides :backcompat_thingy
|
115
|
+
resource_name :backcompat_thingy
|
116
|
+
end
|
117
|
+
|
118
|
+
}
|
119
|
+
|
120
|
+
it "backcompat_thingy creates a BackcompatThingy" do
|
121
|
+
recipe = converge {
|
122
|
+
backcompat_thingy "blah" do; end
|
123
|
+
}
|
124
|
+
expect(recipe.logged_warnings).to match(/Class Chef::Provider::BackcompatThingy does not declare 'provides :backcompat_thingy'./)
|
125
|
+
expect(BaseThingy.created_resource).not_to be_nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "with a resource named RecipeDSLSpecNamespace::Bar::BarThingy" do
|
131
|
+
before(:context) {
|
132
|
+
|
133
|
+
class RecipeDSLSpecNamespace::Bar::BarThingy < BaseThingy
|
134
|
+
end
|
135
|
+
|
136
|
+
}
|
137
|
+
|
138
|
+
it "bar_thingy does not work" do
|
139
|
+
expect_converge {
|
140
|
+
bar_thingy "blah" do; end
|
141
|
+
}.to raise_error(NoMethodError)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context "with a resource named Chef::Resource::NoNameThingy with resource_name nil" do
|
146
|
+
before(:context) {
|
147
|
+
|
148
|
+
class Chef::Resource::NoNameThingy < BaseThingy
|
149
|
+
resource_name nil
|
150
|
+
end
|
151
|
+
|
152
|
+
}
|
153
|
+
|
154
|
+
it "no_name_thingy does not work" do
|
155
|
+
expect_converge {
|
156
|
+
no_name_thingy "blah" do; end
|
157
|
+
}.to raise_error(NoMethodError)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "with a resource named AnotherNoNameThingy with resource_name :another_thingy_name" do
|
162
|
+
before(:context) {
|
163
|
+
|
164
|
+
class AnotherNoNameThingy < BaseThingy
|
165
|
+
resource_name :another_thingy_name
|
166
|
+
end
|
167
|
+
|
168
|
+
}
|
169
|
+
|
170
|
+
it "another_no_name_thingy does not work" do
|
171
|
+
expect_converge {
|
172
|
+
another_no_name_thingy "blah" do; end
|
173
|
+
}.to raise_error(NoMethodError)
|
174
|
+
end
|
175
|
+
|
176
|
+
it "another_thingy_name works" do
|
177
|
+
recipe = converge {
|
178
|
+
another_thingy_name "blah" do; end
|
179
|
+
}
|
180
|
+
expect(recipe.logged_warnings).to eq ""
|
181
|
+
expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context "with a resource named AnotherNoNameThingy2 with resource_name :another_thingy_name2; resource_name :another_thingy_name3" do
|
186
|
+
before(:context) {
|
187
|
+
|
188
|
+
class AnotherNoNameThingy2 < BaseThingy
|
189
|
+
resource_name :another_thingy_name2
|
190
|
+
resource_name :another_thingy_name3
|
191
|
+
end
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
it "another_no_name_thingy does not work" do
|
196
|
+
expect_converge {
|
197
|
+
another_no_name_thingy2 "blah" do; end
|
198
|
+
}.to raise_error(NoMethodError)
|
199
|
+
end
|
200
|
+
|
201
|
+
it "another_thingy_name2 does not work" do
|
202
|
+
expect_converge {
|
203
|
+
another_thingy_name2 "blah" do; end
|
204
|
+
}.to raise_error(NoMethodError)
|
205
|
+
end
|
206
|
+
|
207
|
+
it "yet_another_thingy_name3 works" do
|
208
|
+
recipe = converge {
|
209
|
+
another_thingy_name3 "blah" do; end
|
210
|
+
}
|
211
|
+
expect(recipe.logged_warnings).to eq ""
|
212
|
+
expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy2)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
context "provides overriding resource_name" do
|
217
|
+
context "with a resource named AnotherNoNameThingy3 with provides :another_no_name_thingy3, os: 'blarghle'" do
|
218
|
+
before(:context) {
|
219
|
+
|
220
|
+
class AnotherNoNameThingy3 < BaseThingy
|
221
|
+
resource_name :another_no_name_thingy_3
|
222
|
+
provides :another_no_name_thingy3, os: "blarghle"
|
223
|
+
end
|
224
|
+
|
225
|
+
}
|
226
|
+
|
227
|
+
it "and os = linux, another_no_name_thingy3 does not work" do
|
228
|
+
expect_converge {
|
229
|
+
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
230
|
+
run_context.node.automatic[:os] = "linux"
|
231
|
+
another_no_name_thingy3 "blah" do; end
|
232
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
233
|
+
end
|
234
|
+
|
235
|
+
it "and os = blarghle, another_no_name_thingy3 works" do
|
236
|
+
recipe = converge {
|
237
|
+
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
238
|
+
run_context.node.automatic[:os] = "blarghle"
|
239
|
+
another_no_name_thingy3 "blah" do; end
|
240
|
+
}
|
241
|
+
expect(recipe.logged_warnings).to eq ""
|
242
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy3)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "with a resource named AnotherNoNameThingy4 with two provides" do
|
247
|
+
before(:context) {
|
248
|
+
|
249
|
+
class AnotherNoNameThingy4 < BaseThingy
|
250
|
+
resource_name :another_no_name_thingy_4
|
251
|
+
provides :another_no_name_thingy4, os: "blarghle"
|
252
|
+
provides :another_no_name_thingy4, platform_family: "foo"
|
253
|
+
end
|
254
|
+
|
255
|
+
}
|
256
|
+
|
257
|
+
it "and os = linux, another_no_name_thingy4 does not work" do
|
258
|
+
expect_converge {
|
259
|
+
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
260
|
+
run_context.node.automatic[:os] = "linux"
|
261
|
+
another_no_name_thingy4 "blah" do; end
|
262
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
263
|
+
end
|
264
|
+
|
265
|
+
it "and os = blarghle, another_no_name_thingy4 works" do
|
266
|
+
recipe = converge {
|
267
|
+
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
268
|
+
run_context.node.automatic[:os] = "blarghle"
|
269
|
+
another_no_name_thingy4 "blah" do; end
|
270
|
+
}
|
271
|
+
expect(recipe.logged_warnings).to eq ""
|
272
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
|
273
|
+
end
|
274
|
+
|
275
|
+
it "and platform_family = foo, another_no_name_thingy4 works" do
|
276
|
+
recipe = converge {
|
277
|
+
# TODO this is an ugly way to test, make Cheffish expose node attrs
|
278
|
+
run_context.node.automatic[:platform_family] = "foo"
|
279
|
+
another_no_name_thingy4 "blah" do; end
|
280
|
+
}
|
281
|
+
expect(recipe.logged_warnings).to eq ""
|
282
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
context "with a resource named AnotherNoNameThingy5, a different resource_name, and a provides with the original resource_name" do
|
287
|
+
before(:context) {
|
288
|
+
|
289
|
+
class AnotherNoNameThingy5 < BaseThingy
|
290
|
+
resource_name :another_thingy_name_for_another_no_name_thingy5
|
291
|
+
provides :another_no_name_thingy5, os: "blarghle"
|
292
|
+
end
|
293
|
+
|
294
|
+
}
|
295
|
+
|
296
|
+
it "and os = linux, another_no_name_thingy5 does not work" do
|
297
|
+
expect_converge {
|
298
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
299
|
+
run_context.node.automatic[:os] = "linux"
|
300
|
+
another_no_name_thingy5 "blah" do; end
|
301
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
302
|
+
end
|
303
|
+
|
304
|
+
it "and os = blarghle, another_no_name_thingy5 works" do
|
305
|
+
recipe = converge {
|
306
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
307
|
+
run_context.node.automatic[:os] = "blarghle"
|
308
|
+
another_no_name_thingy5 "blah" do; end
|
309
|
+
}
|
310
|
+
expect(recipe.logged_warnings).to eq ""
|
311
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
|
312
|
+
end
|
313
|
+
|
314
|
+
it "the new resource name can be used in a recipe" do
|
315
|
+
recipe = converge {
|
316
|
+
another_thingy_name_for_another_no_name_thingy5 "blah" do; end
|
317
|
+
}
|
318
|
+
expect(recipe.logged_warnings).to eq ""
|
319
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
context "with a resource named AnotherNoNameThingy6, a provides with the original resource name, and a different resource_name" do
|
324
|
+
before(:context) {
|
325
|
+
|
326
|
+
class AnotherNoNameThingy6 < BaseThingy
|
327
|
+
provides :another_no_name_thingy6, os: "blarghle"
|
328
|
+
resource_name :another_thingy_name_for_another_no_name_thingy6
|
329
|
+
end
|
330
|
+
|
331
|
+
}
|
332
|
+
|
333
|
+
it "and os = linux, another_no_name_thingy6 does not work" do
|
334
|
+
expect_converge {
|
335
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
336
|
+
run_context.node.automatic[:os] = "linux"
|
337
|
+
another_no_name_thingy6 "blah" do; end
|
338
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
339
|
+
end
|
340
|
+
|
341
|
+
it "and os = blarghle, another_no_name_thingy6 works" do
|
342
|
+
recipe = converge {
|
343
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
344
|
+
run_context.node.automatic[:os] = "blarghle"
|
345
|
+
another_no_name_thingy6 "blah" do; end
|
346
|
+
}
|
347
|
+
expect(recipe.logged_warnings).to eq ""
|
348
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
|
349
|
+
end
|
350
|
+
|
351
|
+
it "the new resource name can be used in a recipe" do
|
352
|
+
recipe = converge {
|
353
|
+
another_thingy_name_for_another_no_name_thingy6 "blah" do; end
|
354
|
+
}
|
355
|
+
expect(recipe.logged_warnings).to eq ""
|
356
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
context "with a resource named AnotherNoNameThingy7, a new resource_name, and provides with that new resource name" do
|
361
|
+
before(:context) {
|
362
|
+
|
363
|
+
class AnotherNoNameThingy7 < BaseThingy
|
364
|
+
resource_name :another_thingy_name_for_another_no_name_thingy7
|
365
|
+
provides :another_thingy_name_for_another_no_name_thingy7, os: "blarghle"
|
366
|
+
end
|
367
|
+
|
368
|
+
}
|
369
|
+
|
370
|
+
it "and os = linux, another_thingy_name_for_another_no_name_thingy7 does not work" do
|
371
|
+
expect_converge {
|
372
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
373
|
+
run_context.node.automatic[:os] = "linux"
|
374
|
+
another_thingy_name_for_another_no_name_thingy7 "blah" do; end
|
375
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
376
|
+
end
|
377
|
+
|
378
|
+
it "and os = blarghle, another_thingy_name_for_another_no_name_thingy7 works" do
|
379
|
+
recipe = converge {
|
380
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
381
|
+
run_context.node.automatic[:os] = "blarghle"
|
382
|
+
another_thingy_name_for_another_no_name_thingy7 "blah" do; end
|
383
|
+
}
|
384
|
+
expect(recipe.logged_warnings).to eq ""
|
385
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy7)
|
386
|
+
end
|
387
|
+
|
388
|
+
it "the old resource name does not work" do
|
389
|
+
expect_converge {
|
390
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
391
|
+
run_context.node.automatic[:os] = "linux"
|
392
|
+
another_no_name_thingy_7 "blah" do; end
|
393
|
+
}.to raise_error(NoMethodError)
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
# opposite order from the previous test (provides, then resource_name)
|
398
|
+
context "with a resource named AnotherNoNameThingy8, a provides with a new resource name, and resource_name with that new resource name" do
|
399
|
+
before(:context) {
|
400
|
+
|
401
|
+
class AnotherNoNameThingy8 < BaseThingy
|
402
|
+
provides :another_thingy_name_for_another_no_name_thingy8, os: "blarghle"
|
403
|
+
resource_name :another_thingy_name_for_another_no_name_thingy8
|
404
|
+
end
|
405
|
+
|
406
|
+
}
|
407
|
+
|
408
|
+
it "and os = linux, another_thingy_name_for_another_no_name_thingy8 does not work" do
|
409
|
+
expect_converge {
|
410
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
411
|
+
run_context.node.automatic[:os] = "linux"
|
412
|
+
another_thingy_name_for_another_no_name_thingy8 "blah" do; end
|
413
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
414
|
+
end
|
415
|
+
|
416
|
+
it "and os = blarghle, another_thingy_name_for_another_no_name_thingy8 works" do
|
417
|
+
recipe = converge {
|
418
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
419
|
+
run_context.node.automatic[:os] = "blarghle"
|
420
|
+
another_thingy_name_for_another_no_name_thingy8 "blah" do; end
|
421
|
+
}
|
422
|
+
expect(recipe.logged_warnings).to eq ""
|
423
|
+
expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy8)
|
424
|
+
end
|
425
|
+
|
426
|
+
it "the old resource name does not work" do
|
427
|
+
expect_converge {
|
428
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
429
|
+
run_context.node.automatic[:os] = "linux"
|
430
|
+
another_thingy_name8 "blah" do; end
|
431
|
+
}.to raise_error(NoMethodError)
|
432
|
+
end
|
433
|
+
end
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
437
|
+
context "provides" do
|
438
|
+
context "when MySupplier provides :hemlock" do
|
439
|
+
before(:context) {
|
440
|
+
|
441
|
+
class RecipeDSLSpecNamespace::MySupplier < BaseThingy
|
442
|
+
resource_name :hemlock
|
443
|
+
end
|
444
|
+
|
445
|
+
}
|
446
|
+
|
447
|
+
it "my_supplier does not work in a recipe" do
|
448
|
+
expect_converge {
|
449
|
+
my_supplier "blah" do; end
|
450
|
+
}.to raise_error(NoMethodError)
|
451
|
+
end
|
452
|
+
|
453
|
+
it "hemlock works in a recipe" do
|
454
|
+
expect_recipe {
|
455
|
+
hemlock "blah" do; end
|
456
|
+
}.to emit_no_warnings_or_errors
|
457
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::MySupplier
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
context "when Thingy3 has resource_name :thingy3" do
|
462
|
+
before(:context) {
|
463
|
+
|
464
|
+
class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
|
465
|
+
resource_name :thingy3
|
466
|
+
end
|
467
|
+
|
468
|
+
}
|
469
|
+
|
470
|
+
it "thingy3 works in a recipe" do
|
471
|
+
expect_recipe {
|
472
|
+
thingy3 "blah" do; end
|
473
|
+
}.to emit_no_warnings_or_errors
|
474
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
475
|
+
end
|
476
|
+
|
477
|
+
context "and Thingy4 has resource_name :thingy3" do
|
478
|
+
before(:context) {
|
479
|
+
|
480
|
+
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
481
|
+
resource_name :thingy3
|
482
|
+
end
|
483
|
+
|
484
|
+
}
|
485
|
+
|
486
|
+
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
487
|
+
recipe = converge {
|
488
|
+
thingy3 "blah" do; end
|
489
|
+
}
|
490
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
491
|
+
end
|
492
|
+
|
493
|
+
it "thingy4 does not work in a recipe" do
|
494
|
+
expect_converge {
|
495
|
+
thingy4 "blah" do; end
|
496
|
+
}.to raise_error(NoMethodError)
|
497
|
+
end
|
498
|
+
|
499
|
+
it "resource_matching_short_name returns Thingy4" do
|
500
|
+
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
501
|
+
end
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
context "when Thingy5 has resource_name :thingy5 and provides :thingy5reverse, :thingy5_2 and :thingy5_2reverse" do
|
506
|
+
before(:context) {
|
507
|
+
|
508
|
+
class RecipeDSLSpecNamespace::Thingy5 < BaseThingy
|
509
|
+
resource_name :thingy5
|
510
|
+
provides :thingy5reverse
|
511
|
+
provides :thingy5_2
|
512
|
+
provides :thingy5_2reverse
|
513
|
+
end
|
514
|
+
|
515
|
+
}
|
516
|
+
|
517
|
+
it "thingy5 works in a recipe" do
|
518
|
+
expect_recipe {
|
519
|
+
thingy5 "blah" do; end
|
520
|
+
}.to emit_no_warnings_or_errors
|
521
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
522
|
+
end
|
523
|
+
|
524
|
+
context "and Thingy6 provides :thingy5" do
|
525
|
+
before(:context) {
|
526
|
+
|
527
|
+
class RecipeDSLSpecNamespace::Thingy6 < BaseThingy
|
528
|
+
resource_name :thingy6
|
529
|
+
provides :thingy5
|
530
|
+
end
|
531
|
+
|
532
|
+
}
|
533
|
+
|
534
|
+
it "thingy6 works in a recipe and yields Thingy6" do
|
535
|
+
recipe = converge {
|
536
|
+
thingy6 "blah" do; end
|
537
|
+
}
|
538
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy6
|
539
|
+
end
|
540
|
+
|
541
|
+
it "thingy5 works in a recipe and yields Foo::Thingy5 (the alphabetical one)" do
|
542
|
+
recipe = converge {
|
543
|
+
thingy5 "blah" do; end
|
544
|
+
}
|
545
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
546
|
+
end
|
547
|
+
|
548
|
+
it "resource_matching_short_name returns Thingy5" do
|
549
|
+
expect(Chef::Resource.resource_matching_short_name(:thingy5)).to eq RecipeDSLSpecNamespace::Thingy5
|
550
|
+
end
|
551
|
+
|
552
|
+
context "and AThingy5 provides :thingy5reverse" do
|
553
|
+
before(:context) {
|
554
|
+
|
555
|
+
class RecipeDSLSpecNamespace::AThingy5 < BaseThingy
|
556
|
+
resource_name :thingy5reverse
|
557
|
+
end
|
558
|
+
|
559
|
+
}
|
560
|
+
|
561
|
+
it "thingy5reverse works in a recipe and yields AThingy5 (the alphabetical one)" do
|
562
|
+
recipe = converge {
|
563
|
+
thingy5reverse "blah" do; end
|
564
|
+
}
|
565
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::AThingy5
|
566
|
+
end
|
567
|
+
end
|
568
|
+
|
569
|
+
context "and ZRecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
|
570
|
+
before(:context) {
|
571
|
+
|
572
|
+
module ZRecipeDSLSpecNamespace
|
573
|
+
class Thingy5 < BaseThingy
|
574
|
+
resource_name :thingy5_2
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
}
|
579
|
+
|
580
|
+
it "thingy5_2 works in a recipe and yields the RecipeDSLSpaceNamespace one (the alphabetical one)" do
|
581
|
+
recipe = converge {
|
582
|
+
thingy5_2 "blah" do; end
|
583
|
+
}
|
584
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
|
585
|
+
end
|
586
|
+
end
|
587
|
+
|
588
|
+
context "and ARecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
|
589
|
+
before(:context) {
|
590
|
+
|
591
|
+
module ARecipeDSLSpecNamespace
|
592
|
+
class Thingy5 < BaseThingy
|
593
|
+
resource_name :thingy5_2reverse
|
594
|
+
end
|
595
|
+
end
|
596
|
+
|
597
|
+
}
|
598
|
+
|
599
|
+
it "thingy5_2reverse works in a recipe and yields the ARecipeDSLSpaceNamespace one (the alphabetical one)" do
|
600
|
+
recipe = converge {
|
601
|
+
thingy5_2reverse "blah" do; end
|
602
|
+
}
|
603
|
+
expect(BaseThingy.created_resource).to eq ARecipeDSLSpecNamespace::Thingy5
|
604
|
+
end
|
605
|
+
end
|
606
|
+
end
|
607
|
+
|
608
|
+
context "when Thingy3 has resource_name :thingy3" do
|
609
|
+
before(:context) {
|
610
|
+
|
611
|
+
class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
|
612
|
+
resource_name :thingy3
|
613
|
+
end
|
614
|
+
|
615
|
+
}
|
616
|
+
|
617
|
+
it "thingy3 works in a recipe" do
|
618
|
+
expect_recipe {
|
619
|
+
thingy3 "blah" do; end
|
620
|
+
}.to emit_no_warnings_or_errors
|
621
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
622
|
+
end
|
623
|
+
|
624
|
+
context "and Thingy4 has resource_name :thingy3" do
|
625
|
+
before(:context) {
|
626
|
+
|
627
|
+
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
628
|
+
resource_name :thingy3
|
629
|
+
end
|
630
|
+
|
631
|
+
}
|
632
|
+
|
633
|
+
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
634
|
+
recipe = converge {
|
635
|
+
thingy3 "blah" do; end
|
636
|
+
}
|
637
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
638
|
+
end
|
639
|
+
|
640
|
+
it "thingy4 does not work in a recipe" do
|
641
|
+
expect_converge {
|
642
|
+
thingy4 "blah" do; end
|
643
|
+
}.to raise_error(NoMethodError)
|
644
|
+
end
|
645
|
+
|
646
|
+
it "resource_matching_short_name returns Thingy4" do
|
647
|
+
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
context "and Thingy4 has resource_name :thingy3" do
|
652
|
+
before(:context) {
|
653
|
+
|
654
|
+
class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
|
655
|
+
resource_name :thingy3
|
656
|
+
end
|
657
|
+
|
658
|
+
}
|
659
|
+
|
660
|
+
it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
|
661
|
+
recipe = converge {
|
662
|
+
thingy3 "blah" do; end
|
663
|
+
}
|
664
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
|
665
|
+
end
|
666
|
+
|
667
|
+
it "thingy4 does not work in a recipe" do
|
668
|
+
expect_converge {
|
669
|
+
thingy4 "blah" do; end
|
670
|
+
}.to raise_error(NoMethodError)
|
671
|
+
end
|
672
|
+
|
673
|
+
it "resource_matching_short_name returns Thingy4" do
|
674
|
+
expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
|
675
|
+
end
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
679
|
+
end
|
680
|
+
|
681
|
+
context "when Thingy7 provides :thingy8" do
|
682
|
+
before(:context) {
|
683
|
+
|
684
|
+
class RecipeDSLSpecNamespace::Thingy7 < BaseThingy
|
685
|
+
resource_name :thingy7
|
686
|
+
provides :thingy8
|
687
|
+
end
|
688
|
+
|
689
|
+
}
|
690
|
+
|
691
|
+
context "and Thingy8 has resource_name :thingy8" do
|
692
|
+
before(:context) {
|
693
|
+
|
694
|
+
class RecipeDSLSpecNamespace::Thingy8 < BaseThingy
|
695
|
+
resource_name :thingy8
|
696
|
+
end
|
697
|
+
|
698
|
+
}
|
699
|
+
|
700
|
+
it "thingy7 works in a recipe and yields Thingy7" do
|
701
|
+
recipe = converge {
|
702
|
+
thingy7 "blah" do; end
|
703
|
+
}
|
704
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
|
705
|
+
end
|
706
|
+
|
707
|
+
it "thingy8 works in a recipe and yields Thingy7 (alphabetical)" do
|
708
|
+
recipe = converge {
|
709
|
+
thingy8 "blah" do; end
|
710
|
+
}
|
711
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
|
712
|
+
end
|
713
|
+
|
714
|
+
it "resource_matching_short_name returns Thingy8" do
|
715
|
+
expect(Chef::Resource.resource_matching_short_name(:thingy8)).to eq RecipeDSLSpecNamespace::Thingy8
|
716
|
+
end
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
context "when Thingy12 provides :thingy12, :twizzle and :twizzle2" do
|
721
|
+
before(:context) {
|
722
|
+
|
723
|
+
class RecipeDSLSpecNamespace::Thingy12 < BaseThingy
|
724
|
+
resource_name :thingy12
|
725
|
+
provides :twizzle
|
726
|
+
provides :twizzle2
|
727
|
+
end
|
728
|
+
|
729
|
+
}
|
730
|
+
|
731
|
+
it "thingy12 works in a recipe and yields Thingy12" do
|
732
|
+
expect_recipe {
|
733
|
+
thingy12 "blah" do; end
|
734
|
+
}.to emit_no_warnings_or_errors
|
735
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
736
|
+
end
|
737
|
+
|
738
|
+
it "twizzle works in a recipe and yields Thingy12" do
|
739
|
+
expect_recipe {
|
740
|
+
twizzle "blah" do; end
|
741
|
+
}.to emit_no_warnings_or_errors
|
742
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
743
|
+
end
|
744
|
+
|
745
|
+
it "twizzle2 works in a recipe and yields Thingy12" do
|
746
|
+
expect_recipe {
|
747
|
+
twizzle2 "blah" do; end
|
748
|
+
}.to emit_no_warnings_or_errors
|
749
|
+
expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
|
750
|
+
end
|
751
|
+
end
|
752
|
+
|
753
|
+
context "with platform-specific resources 'my_super_thingy_foo' and 'my_super_thingy_bar'" do
|
754
|
+
before(:context) {
|
755
|
+
class MySuperThingyFoo < BaseThingy
|
756
|
+
resource_name :my_super_thingy_foo
|
757
|
+
provides :my_super_thingy, platform: "foo"
|
758
|
+
end
|
759
|
+
|
760
|
+
class MySuperThingyBar < BaseThingy
|
761
|
+
resource_name :my_super_thingy_bar
|
762
|
+
provides :my_super_thingy, platform: "bar"
|
763
|
+
end
|
764
|
+
}
|
765
|
+
|
766
|
+
it "A run with platform 'foo' uses MySuperThingyFoo" do
|
767
|
+
r = Cheffish::ChefRun.new(chef_config)
|
768
|
+
r.client.run_context.node.automatic["platform"] = "foo"
|
769
|
+
r.compile_recipe {
|
770
|
+
my_super_thingy "blah" do; end
|
771
|
+
}
|
772
|
+
r.converge
|
773
|
+
expect(r).to emit_no_warnings_or_errors
|
774
|
+
expect(BaseThingy.created_resource).to eq MySuperThingyFoo
|
775
|
+
end
|
776
|
+
|
777
|
+
it "A run with platform 'bar' uses MySuperThingyBar" do
|
778
|
+
r = Cheffish::ChefRun.new(chef_config)
|
779
|
+
r.client.run_context.node.automatic["platform"] = "bar"
|
780
|
+
r.compile_recipe {
|
781
|
+
my_super_thingy "blah" do; end
|
782
|
+
}
|
783
|
+
r.converge
|
784
|
+
expect(r).to emit_no_warnings_or_errors
|
785
|
+
expect(BaseThingy.created_resource).to eq MySuperThingyBar
|
786
|
+
end
|
787
|
+
|
788
|
+
it "A run with platform 'x' reports that my_super_thingy is not supported" do
|
789
|
+
r = Cheffish::ChefRun.new(chef_config)
|
790
|
+
r.client.run_context.node.automatic["platform"] = "x"
|
791
|
+
expect {
|
792
|
+
r.compile_recipe {
|
793
|
+
my_super_thingy "blah" do; end
|
794
|
+
}
|
795
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
context "when Thingy10 provides :thingy10" do
|
800
|
+
before(:context) {
|
801
|
+
class RecipeDSLSpecNamespace::Thingy10 < BaseThingy
|
802
|
+
resource_name :thingy10
|
803
|
+
end
|
804
|
+
}
|
805
|
+
|
806
|
+
it "declaring a resource providing the same :thingy10 with override: true does not produce a warning" do
|
807
|
+
expect(Chef::Log).not_to receive(:warn)
|
808
|
+
class RecipeDSLSpecNamespace::Thingy10AlternateProvider < BaseThingy
|
809
|
+
provides :thingy10, override: true
|
810
|
+
end
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
814
|
+
context "when Thingy11 provides :thingy11" do
|
815
|
+
before(:context) {
|
816
|
+
class RecipeDSLSpecNamespace::Thingy11 < BaseThingy
|
817
|
+
resource_name :thingy10
|
818
|
+
end
|
819
|
+
}
|
820
|
+
|
821
|
+
it "declaring a resource providing the same :thingy11 with os: 'linux' does not produce a warning" do
|
822
|
+
expect(Chef::Log).not_to receive(:warn)
|
823
|
+
class RecipeDSLSpecNamespace::Thingy11AlternateProvider < BaseThingy
|
824
|
+
provides :thingy11, os: "linux"
|
825
|
+
end
|
826
|
+
end
|
827
|
+
end
|
828
|
+
end
|
829
|
+
|
830
|
+
context "with a resource named 'B' with resource name :two_classes_one_dsl" do
|
831
|
+
let(:two_classes_one_dsl) { :"two_classes_one_dsl#{Namer.current_index}" }
|
832
|
+
let(:resource_class) {
|
833
|
+
result = Class.new(BaseThingy) do
|
834
|
+
def self.name
|
835
|
+
"B"
|
836
|
+
end
|
837
|
+
|
838
|
+
def self.to_s; name; end
|
839
|
+
|
840
|
+
def self.inspect; name.inspect; end
|
841
|
+
end
|
842
|
+
result.resource_name two_classes_one_dsl
|
843
|
+
result
|
844
|
+
}
|
845
|
+
before { resource_class } # pull on it so it gets defined before the recipe runs
|
846
|
+
|
847
|
+
context "and another resource named 'A' with resource_name :two_classes_one_dsl" do
|
848
|
+
let(:resource_class_a) {
|
849
|
+
result = Class.new(BaseThingy) do
|
850
|
+
def self.name
|
851
|
+
"A"
|
852
|
+
end
|
853
|
+
|
854
|
+
def self.to_s; name; end
|
855
|
+
|
856
|
+
def self.inspect; name.inspect; end
|
857
|
+
end
|
858
|
+
result.resource_name two_classes_one_dsl
|
859
|
+
result
|
860
|
+
}
|
861
|
+
before { resource_class_a } # pull on it so it gets defined before the recipe runs
|
862
|
+
|
863
|
+
it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
|
864
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
865
|
+
recipe = converge {
|
866
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
867
|
+
}
|
868
|
+
expect(recipe.logged_warnings).to eq ""
|
869
|
+
expect(BaseThingy.created_resource).to eq resource_class_a
|
870
|
+
end
|
871
|
+
|
872
|
+
it "resource_matching_short_name returns B" do
|
873
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class_a
|
874
|
+
end
|
875
|
+
end
|
876
|
+
|
877
|
+
context "and another resource named 'Z' with resource_name :two_classes_one_dsl" do
|
878
|
+
let(:resource_class_z) {
|
879
|
+
result = Class.new(BaseThingy) do
|
880
|
+
def self.name
|
881
|
+
"Z"
|
882
|
+
end
|
883
|
+
|
884
|
+
def self.to_s; name; end
|
885
|
+
|
886
|
+
def self.inspect; name.inspect; end
|
887
|
+
end
|
888
|
+
result.resource_name two_classes_one_dsl
|
889
|
+
result
|
890
|
+
}
|
891
|
+
before { resource_class_z } # pull on it so it gets defined before the recipe runs
|
892
|
+
|
893
|
+
it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
|
894
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
895
|
+
recipe = converge {
|
896
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
897
|
+
}
|
898
|
+
expect(recipe.logged_warnings).to eq ""
|
899
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
900
|
+
end
|
901
|
+
|
902
|
+
it "resource_matching_short_name returns B" do
|
903
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
904
|
+
end
|
905
|
+
|
906
|
+
context "and a priority array [ Z, B ]" do
|
907
|
+
before do
|
908
|
+
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z, resource_class ])
|
909
|
+
end
|
910
|
+
|
911
|
+
it "two_classes_one_dsl resolves to Z (respects the priority array)" do
|
912
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
913
|
+
recipe = converge {
|
914
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
915
|
+
}
|
916
|
+
expect(recipe.logged_warnings).to eq ""
|
917
|
+
expect(BaseThingy.created_resource).to eq resource_class_z
|
918
|
+
end
|
919
|
+
|
920
|
+
it "resource_matching_short_name returns B" do
|
921
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
922
|
+
end
|
923
|
+
|
924
|
+
context "when Z provides(:two_classes_one_dsl) { false }" do
|
925
|
+
before do
|
926
|
+
resource_class_z.provides(two_classes_one_dsl) { false }
|
927
|
+
end
|
928
|
+
|
929
|
+
it "two_classes_one_dsl resolves to B (picks the next thing in the priority array)" do
|
930
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
931
|
+
recipe = converge {
|
932
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
933
|
+
}
|
934
|
+
expect(recipe.logged_warnings).to eq ""
|
935
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
936
|
+
end
|
937
|
+
|
938
|
+
it "resource_matching_short_name returns B" do
|
939
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
940
|
+
end
|
941
|
+
end
|
942
|
+
end
|
943
|
+
|
944
|
+
context "and priority arrays [ B ] and [ Z ]" do
|
945
|
+
before do
|
946
|
+
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class ])
|
947
|
+
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
|
948
|
+
end
|
949
|
+
|
950
|
+
it "two_classes_one_dsl resolves to Z (respects the most recent priority array)" do
|
951
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
952
|
+
recipe = converge {
|
953
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
954
|
+
}
|
955
|
+
expect(recipe.logged_warnings).to eq ""
|
956
|
+
expect(BaseThingy.created_resource).to eq resource_class_z
|
957
|
+
end
|
958
|
+
|
959
|
+
it "resource_matching_short_name returns B" do
|
960
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
961
|
+
end
|
962
|
+
|
963
|
+
context "when Z provides(:two_classes_one_dsl) { false }" do
|
964
|
+
before do
|
965
|
+
resource_class_z.provides(two_classes_one_dsl) { false }
|
966
|
+
end
|
967
|
+
|
968
|
+
it "two_classes_one_dsl resolves to B (picks the first match from the other priority array)" do
|
969
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
970
|
+
recipe = converge {
|
971
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
972
|
+
}
|
973
|
+
expect(recipe.logged_warnings).to eq ""
|
974
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
975
|
+
end
|
976
|
+
|
977
|
+
it "resource_matching_short_name returns B" do
|
978
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
979
|
+
end
|
980
|
+
end
|
981
|
+
end
|
982
|
+
|
983
|
+
context "and a priority array [ Z ]" do
|
984
|
+
before do
|
985
|
+
Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
|
986
|
+
end
|
987
|
+
|
988
|
+
context "when Z provides(:two_classes_one_dsl) { false }" do
|
989
|
+
before do
|
990
|
+
resource_class_z.provides(two_classes_one_dsl) { false }
|
991
|
+
end
|
992
|
+
|
993
|
+
it "two_classes_one_dsl resolves to B (picks the first match outside the priority array)" do
|
994
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
995
|
+
recipe = converge {
|
996
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
997
|
+
}
|
998
|
+
expect(recipe.logged_warnings).to eq ""
|
999
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
1000
|
+
end
|
1001
|
+
|
1002
|
+
it "resource_matching_short_name returns B" do
|
1003
|
+
expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
|
1004
|
+
end
|
1005
|
+
end
|
1006
|
+
end
|
1007
|
+
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
context "and a provider named 'B' which provides :two_classes_one_dsl" do
|
1011
|
+
before do
|
1012
|
+
resource_class.send(:define_method, :provider) { nil }
|
1013
|
+
end
|
1014
|
+
|
1015
|
+
let(:provider_class) {
|
1016
|
+
result = Class.new(BaseThingy::Provider) do
|
1017
|
+
def self.name
|
1018
|
+
"B"
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
def self.to_s; name; end
|
1022
|
+
|
1023
|
+
def self.inspect; name.inspect; end
|
1024
|
+
end
|
1025
|
+
result.provides two_classes_one_dsl
|
1026
|
+
result
|
1027
|
+
}
|
1028
|
+
before { provider_class } # pull on it so it gets defined before the recipe runs
|
1029
|
+
|
1030
|
+
context "and another provider named 'A'" do
|
1031
|
+
let(:provider_class_a) {
|
1032
|
+
result = Class.new(BaseThingy::Provider) do
|
1033
|
+
def self.name
|
1034
|
+
"A"
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
def self.to_s; name; end
|
1038
|
+
|
1039
|
+
def self.inspect; name.inspect; end
|
1040
|
+
end
|
1041
|
+
result
|
1042
|
+
}
|
1043
|
+
context "which provides :two_classes_one_dsl" do
|
1044
|
+
before { provider_class_a.provides two_classes_one_dsl }
|
1045
|
+
|
1046
|
+
it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
|
1047
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1048
|
+
recipe = converge {
|
1049
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1050
|
+
}
|
1051
|
+
expect(recipe.logged_warnings).to eq ""
|
1052
|
+
expect(BaseThingy.created_provider).to eq provider_class_a
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
context "which provides(:two_classes_one_dsl) { false }" do
|
1056
|
+
before { provider_class_a.provides(two_classes_one_dsl) { false } }
|
1057
|
+
|
1058
|
+
it "two_classes_one_dsl resolves to B (since A declined)" do
|
1059
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1060
|
+
recipe = converge {
|
1061
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1062
|
+
}
|
1063
|
+
expect(recipe.logged_warnings).to eq ""
|
1064
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1065
|
+
end
|
1066
|
+
end
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
context "and another provider named 'Z'" do
|
1070
|
+
let(:provider_class_z) {
|
1071
|
+
result = Class.new(BaseThingy::Provider) do
|
1072
|
+
def self.name
|
1073
|
+
"Z"
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
def self.to_s; name; end
|
1077
|
+
|
1078
|
+
def self.inspect; name.inspect; end
|
1079
|
+
end
|
1080
|
+
result
|
1081
|
+
}
|
1082
|
+
before { provider_class_z } # pull on it so it gets defined before the recipe runs
|
1083
|
+
|
1084
|
+
context "which provides :two_classes_one_dsl" do
|
1085
|
+
before { provider_class_z.provides two_classes_one_dsl }
|
1086
|
+
|
1087
|
+
it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
|
1088
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1089
|
+
recipe = converge {
|
1090
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1091
|
+
}
|
1092
|
+
expect(recipe.logged_warnings).to eq ""
|
1093
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
context "with a priority array [ Z, B ]" do
|
1097
|
+
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
|
1098
|
+
|
1099
|
+
it "two_classes_one_dsl resolves to Z (respects the priority map)" do
|
1100
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1101
|
+
recipe = converge {
|
1102
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1103
|
+
}
|
1104
|
+
expect(recipe.logged_warnings).to eq ""
|
1105
|
+
expect(BaseThingy.created_provider).to eq provider_class_z
|
1106
|
+
end
|
1107
|
+
end
|
1108
|
+
end
|
1109
|
+
|
1110
|
+
context "which provides(:two_classes_one_dsl) { false }" do
|
1111
|
+
before { provider_class_z.provides(two_classes_one_dsl) { false } }
|
1112
|
+
|
1113
|
+
context "with a priority array [ Z, B ]" do
|
1114
|
+
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
|
1115
|
+
|
1116
|
+
it "two_classes_one_dsl resolves to B (the next one in the priority map)" do
|
1117
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1118
|
+
recipe = converge {
|
1119
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1120
|
+
}
|
1121
|
+
expect(recipe.logged_warnings).to eq ""
|
1122
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1123
|
+
end
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
context "with priority arrays [ B ] and [ Z ]" do
|
1127
|
+
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z ] }
|
1128
|
+
before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class ] }
|
1129
|
+
|
1130
|
+
it "two_classes_one_dsl resolves to B (the one in the next priority map)" do
|
1131
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1132
|
+
recipe = converge {
|
1133
|
+
instance_eval("#{two_classes_one_dsl} 'blah'")
|
1134
|
+
}
|
1135
|
+
expect(recipe.logged_warnings).to eq ""
|
1136
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1137
|
+
end
|
1138
|
+
end
|
1139
|
+
end
|
1140
|
+
end
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
context "and another resource Blarghle with provides :two_classes_one_dsl, os: 'blarghle'" do
|
1144
|
+
let(:resource_class_blarghle) {
|
1145
|
+
result = Class.new(BaseThingy) do
|
1146
|
+
def self.name
|
1147
|
+
"Blarghle"
|
1148
|
+
end
|
1149
|
+
|
1150
|
+
def self.to_s; name; end
|
1151
|
+
|
1152
|
+
def self.inspect; name.inspect; end
|
1153
|
+
end
|
1154
|
+
result.resource_name two_classes_one_dsl
|
1155
|
+
result.provides two_classes_one_dsl, os: "blarghle"
|
1156
|
+
result
|
1157
|
+
}
|
1158
|
+
before { resource_class_blarghle } # pull on it so it gets defined before the recipe runs
|
1159
|
+
|
1160
|
+
it "on os = blarghle, two_classes_one_dsl resolves to Blarghle" do
|
1161
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1162
|
+
recipe = converge {
|
1163
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
1164
|
+
run_context.node.automatic[:os] = "blarghle"
|
1165
|
+
instance_eval("#{two_classes_one_dsl} 'blah' do; end")
|
1166
|
+
}
|
1167
|
+
expect(recipe.logged_warnings).to eq ""
|
1168
|
+
expect(BaseThingy.created_resource).to eq resource_class_blarghle
|
1169
|
+
end
|
1170
|
+
|
1171
|
+
it "on os = linux, two_classes_one_dsl resolves to B" do
|
1172
|
+
two_classes_one_dsl = self.two_classes_one_dsl
|
1173
|
+
recipe = converge {
|
1174
|
+
# this is an ugly way to test, make Cheffish expose node attrs
|
1175
|
+
run_context.node.automatic[:os] = "linux"
|
1176
|
+
instance_eval("#{two_classes_one_dsl} 'blah' do; end")
|
1177
|
+
}
|
1178
|
+
expect(recipe.logged_warnings).to eq ""
|
1179
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
1180
|
+
end
|
1181
|
+
end
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
context "with a resource MyResource" do
|
1185
|
+
let(:resource_class) { Class.new(BaseThingy) do
|
1186
|
+
def self.called_provides
|
1187
|
+
@called_provides
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
def to_s
|
1191
|
+
"MyResource"
|
1192
|
+
end
|
1193
|
+
end }
|
1194
|
+
let(:my_resource) { :"my_resource#{Namer.current_index}" }
|
1195
|
+
let(:blarghle_blarghle_little_star) { :"blarghle_blarghle_little_star#{Namer.current_index}" }
|
1196
|
+
|
1197
|
+
context "with resource_name :my_resource" do
|
1198
|
+
before {
|
1199
|
+
resource_class.resource_name my_resource
|
1200
|
+
}
|
1201
|
+
|
1202
|
+
context "with provides? returning true to my_resource" do
|
1203
|
+
before {
|
1204
|
+
my_resource = self.my_resource
|
1205
|
+
resource_class.define_singleton_method(:provides?) do |node, resource_name|
|
1206
|
+
@called_provides = true
|
1207
|
+
resource_name == my_resource
|
1208
|
+
end
|
1209
|
+
}
|
1210
|
+
|
1211
|
+
it "my_resource returns the resource and calls provides?, but does not emit a warning" do
|
1212
|
+
dsl_name = self.my_resource
|
1213
|
+
recipe = converge {
|
1214
|
+
instance_eval("#{dsl_name} 'foo'")
|
1215
|
+
}
|
1216
|
+
expect(recipe.logged_warnings).to eq ""
|
1217
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
1218
|
+
expect(resource_class.called_provides).to be_truthy
|
1219
|
+
end
|
1220
|
+
end
|
1221
|
+
|
1222
|
+
context "with provides? returning true to blarghle_blarghle_little_star and not resource_name" do
|
1223
|
+
before do
|
1224
|
+
blarghle_blarghle_little_star = self.blarghle_blarghle_little_star
|
1225
|
+
resource_class.define_singleton_method(:provides?) do |node, resource_name|
|
1226
|
+
@called_provides = true
|
1227
|
+
resource_name == blarghle_blarghle_little_star
|
1228
|
+
end
|
1229
|
+
end
|
1230
|
+
|
1231
|
+
it "my_resource does not return the resource" do
|
1232
|
+
dsl_name = self.my_resource
|
1233
|
+
expect_converge {
|
1234
|
+
instance_eval("#{dsl_name} 'foo'")
|
1235
|
+
}.to raise_error(Chef::Exceptions::NoSuchResourceType)
|
1236
|
+
expect(resource_class.called_provides).to be_truthy
|
1237
|
+
end
|
1238
|
+
|
1239
|
+
it "blarghle_blarghle_little_star 'foo' returns the resource and emits a warning" do
|
1240
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1241
|
+
dsl_name = self.blarghle_blarghle_little_star
|
1242
|
+
recipe = converge {
|
1243
|
+
instance_eval("#{dsl_name} 'foo'")
|
1244
|
+
}
|
1245
|
+
expect(recipe.logged_warnings).to include "WARN: #{resource_class}.provides? returned true when asked if it provides DSL #{dsl_name}, but provides :#{dsl_name} was never called!"
|
1246
|
+
expect(BaseThingy.created_resource).to eq resource_class
|
1247
|
+
expect(resource_class.called_provides).to be_truthy
|
1248
|
+
end
|
1249
|
+
end
|
1250
|
+
|
1251
|
+
context "and a provider" do
|
1252
|
+
let(:provider_class) do
|
1253
|
+
Class.new(BaseThingy::Provider) do
|
1254
|
+
def self.name
|
1255
|
+
"MyProvider"
|
1256
|
+
end
|
1257
|
+
|
1258
|
+
def self.to_s; name; end
|
1259
|
+
|
1260
|
+
def self.inspect; name.inspect; end
|
1261
|
+
|
1262
|
+
def self.called_provides
|
1263
|
+
@called_provides
|
1264
|
+
end
|
1265
|
+
end
|
1266
|
+
end
|
1267
|
+
|
1268
|
+
before do
|
1269
|
+
resource_class.send(:define_method, :provider) { nil }
|
1270
|
+
end
|
1271
|
+
|
1272
|
+
context "that provides :my_resource" do
|
1273
|
+
before do
|
1274
|
+
provider_class.provides my_resource
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
context "with supports? returning true" do
|
1278
|
+
before do
|
1279
|
+
provider_class.define_singleton_method(:supports?) { |resource, action| true }
|
1280
|
+
end
|
1281
|
+
|
1282
|
+
it "my_resource runs the provider and does not emit a warning" do
|
1283
|
+
my_resource = self.my_resource
|
1284
|
+
recipe = converge {
|
1285
|
+
instance_eval("#{my_resource} 'foo'")
|
1286
|
+
}
|
1287
|
+
expect(recipe.logged_warnings).to eq ""
|
1288
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1289
|
+
end
|
1290
|
+
|
1291
|
+
context "and another provider supporting :my_resource with supports? false" do
|
1292
|
+
let(:provider_class2) do
|
1293
|
+
Class.new(BaseThingy::Provider) do
|
1294
|
+
def self.name
|
1295
|
+
"MyProvider2"
|
1296
|
+
end
|
1297
|
+
|
1298
|
+
def self.to_s; name; end
|
1299
|
+
|
1300
|
+
def self.inspect; name.inspect; end
|
1301
|
+
|
1302
|
+
def self.called_provides
|
1303
|
+
@called_provides
|
1304
|
+
end
|
1305
|
+
provides my_resource
|
1306
|
+
def self.supports?(resource, action)
|
1307
|
+
false
|
1308
|
+
end
|
1309
|
+
end
|
1310
|
+
end
|
1311
|
+
|
1312
|
+
it "my_resource runs the first provider" do
|
1313
|
+
my_resource = self.my_resource
|
1314
|
+
recipe = converge {
|
1315
|
+
instance_eval("#{my_resource} 'foo'")
|
1316
|
+
}
|
1317
|
+
expect(recipe.logged_warnings).to eq ""
|
1318
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1319
|
+
end
|
1320
|
+
end
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
context "with supports? returning false" do
|
1324
|
+
before do
|
1325
|
+
provider_class.define_singleton_method(:supports?) { |resource, action| false }
|
1326
|
+
end
|
1327
|
+
|
1328
|
+
# TODO no warning? ick
|
1329
|
+
it "my_resource runs the provider anyway" do
|
1330
|
+
my_resource = self.my_resource
|
1331
|
+
recipe = converge {
|
1332
|
+
instance_eval("#{my_resource} 'foo'")
|
1333
|
+
}
|
1334
|
+
expect(recipe.logged_warnings).to eq ""
|
1335
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1336
|
+
end
|
1337
|
+
|
1338
|
+
context "and another provider supporting :my_resource with supports? true" do
|
1339
|
+
let(:provider_class2) do
|
1340
|
+
my_resource = self.my_resource
|
1341
|
+
Class.new(BaseThingy::Provider) do
|
1342
|
+
def self.name
|
1343
|
+
"MyProvider2"
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
def self.to_s; name; end
|
1347
|
+
|
1348
|
+
def self.inspect; name.inspect; end
|
1349
|
+
|
1350
|
+
def self.called_provides
|
1351
|
+
@called_provides
|
1352
|
+
end
|
1353
|
+
provides my_resource
|
1354
|
+
def self.supports?(resource, action)
|
1355
|
+
true
|
1356
|
+
end
|
1357
|
+
end
|
1358
|
+
end
|
1359
|
+
before { provider_class2 } # make sure the provider class shows up
|
1360
|
+
|
1361
|
+
it "my_resource runs the other provider" do
|
1362
|
+
my_resource = self.my_resource
|
1363
|
+
recipe = converge {
|
1364
|
+
instance_eval("#{my_resource} 'foo'")
|
1365
|
+
}
|
1366
|
+
expect(recipe.logged_warnings).to eq ""
|
1367
|
+
expect(BaseThingy.created_provider).to eq provider_class2
|
1368
|
+
end
|
1369
|
+
end
|
1370
|
+
end
|
1371
|
+
end
|
1372
|
+
|
1373
|
+
context "with provides? returning true" do
|
1374
|
+
before {
|
1375
|
+
my_resource = self.my_resource
|
1376
|
+
provider_class.define_singleton_method(:provides?) do |node, resource|
|
1377
|
+
@called_provides = true
|
1378
|
+
resource.declared_type == my_resource
|
1379
|
+
end
|
1380
|
+
}
|
1381
|
+
|
1382
|
+
context "that provides :my_resource" do
|
1383
|
+
before {
|
1384
|
+
provider_class.provides my_resource
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
it "my_resource calls the provider (and calls provides?), but does not emit a warning" do
|
1388
|
+
my_resource = self.my_resource
|
1389
|
+
recipe = converge {
|
1390
|
+
instance_eval("#{my_resource} 'foo'")
|
1391
|
+
}
|
1392
|
+
expect(recipe.logged_warnings).to eq ""
|
1393
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1394
|
+
expect(provider_class.called_provides).to be_truthy
|
1395
|
+
end
|
1396
|
+
end
|
1397
|
+
|
1398
|
+
context "that does not call provides :my_resource" do
|
1399
|
+
it "my_resource calls the provider (and calls provides?), and emits a warning" do
|
1400
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1401
|
+
my_resource = self.my_resource
|
1402
|
+
recipe = converge {
|
1403
|
+
instance_eval("#{my_resource} 'foo'")
|
1404
|
+
}
|
1405
|
+
expect(recipe.logged_warnings).to include("WARN: #{provider_class}.provides? returned true when asked if it provides DSL #{my_resource}, but provides :#{my_resource} was never called!")
|
1406
|
+
expect(BaseThingy.created_provider).to eq provider_class
|
1407
|
+
expect(provider_class.called_provides).to be_truthy
|
1408
|
+
end
|
1409
|
+
end
|
1410
|
+
end
|
1411
|
+
|
1412
|
+
context "with provides? returning false to my_resource" do
|
1413
|
+
before {
|
1414
|
+
my_resource = self.my_resource
|
1415
|
+
provider_class.define_singleton_method(:provides?) do |node, resource|
|
1416
|
+
@called_provides = true
|
1417
|
+
false
|
1418
|
+
end
|
1419
|
+
}
|
1420
|
+
|
1421
|
+
context "that provides :my_resource" do
|
1422
|
+
before {
|
1423
|
+
provider_class.provides my_resource
|
1424
|
+
}
|
1425
|
+
|
1426
|
+
it "my_resource fails to find a provider (and calls provides)" do
|
1427
|
+
my_resource = self.my_resource
|
1428
|
+
expect_converge {
|
1429
|
+
instance_eval("#{my_resource} 'foo'")
|
1430
|
+
}.to raise_error(Chef::Exceptions::ProviderNotFound)
|
1431
|
+
expect(provider_class.called_provides).to be_truthy
|
1432
|
+
end
|
1433
|
+
end
|
1434
|
+
|
1435
|
+
context "that does not provide :my_resource" do
|
1436
|
+
it "my_resource fails to find a provider (and calls provides)" do
|
1437
|
+
my_resource = self.my_resource
|
1438
|
+
expect_converge {
|
1439
|
+
instance_eval("#{my_resource} 'foo'")
|
1440
|
+
}.to raise_error(Chef::Exceptions::ProviderNotFound)
|
1441
|
+
expect(provider_class.called_provides).to be_truthy
|
1442
|
+
end
|
1443
|
+
end
|
1444
|
+
end
|
1445
|
+
end
|
1446
|
+
end
|
1447
|
+
end
|
1448
|
+
end
|
1449
|
+
|
1450
|
+
before(:all) { Namer.current_index = 0 }
|
1451
|
+
before { Namer.current_index += 1 }
|
1452
|
+
|
1453
|
+
context "with an LWRP that declares actions" do
|
1454
|
+
let(:resource_class) {
|
1455
|
+
Class.new(Chef::Resource::LWRPBase) do
|
1456
|
+
provides :"recipe_dsl_spec#{Namer.current_index}"
|
1457
|
+
actions :create
|
1458
|
+
end
|
1459
|
+
}
|
1460
|
+
let(:resource) {
|
1461
|
+
resource_class.new("blah", run_context)
|
1462
|
+
}
|
1463
|
+
it "The actions are part of actions along with :nothing" do
|
1464
|
+
expect(resource_class.actions).to eq [ :nothing, :create ]
|
1465
|
+
end
|
1466
|
+
it "The actions are part of allowed_actions along with :nothing" do
|
1467
|
+
expect(resource.allowed_actions).to eq [ :nothing, :create ]
|
1468
|
+
end
|
1469
|
+
|
1470
|
+
context "and a subclass that declares more actions" do
|
1471
|
+
let(:subresource_class) {
|
1472
|
+
Class.new(Chef::Resource::LWRPBase) do
|
1473
|
+
provides :"recipe_dsl_spec_sub#{Namer.current_index}"
|
1474
|
+
actions :delete
|
1475
|
+
end
|
1476
|
+
}
|
1477
|
+
let(:subresource) {
|
1478
|
+
subresource_class.new("subblah", run_context)
|
1479
|
+
}
|
1480
|
+
|
1481
|
+
it "The parent class actions are not part of actions" do
|
1482
|
+
expect(subresource_class.actions).to eq [ :nothing, :delete ]
|
1483
|
+
end
|
1484
|
+
it "The parent class actions are not part of allowed_actions" do
|
1485
|
+
expect(subresource.allowed_actions).to eq [ :nothing, :delete ]
|
1486
|
+
end
|
1487
|
+
it "The parent class actions do not change" do
|
1488
|
+
expect(resource_class.actions).to eq [ :nothing, :create ]
|
1489
|
+
expect(resource.allowed_actions).to eq [ :nothing, :create ]
|
1490
|
+
end
|
1491
|
+
end
|
1492
|
+
end
|
1493
|
+
|
1494
|
+
context "with a dynamically defined resource and regular provider" do
|
1495
|
+
before(:context) do
|
1496
|
+
Class.new(Chef::Resource) do
|
1497
|
+
resource_name :lw_resource_with_hw_provider_test_case
|
1498
|
+
default_action :create
|
1499
|
+
attr_accessor :created_provider
|
1500
|
+
end
|
1501
|
+
class Chef::Provider::LwResourceWithHwProviderTestCase < Chef::Provider
|
1502
|
+
def load_current_resource
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
def action_create
|
1506
|
+
new_resource.created_provider = self.class
|
1507
|
+
end
|
1508
|
+
end
|
1509
|
+
end
|
1510
|
+
|
1511
|
+
it "looks up the provider in Chef::Provider converting the resource name from snake case to camel case" do
|
1512
|
+
resource = nil
|
1513
|
+
recipe = converge {
|
1514
|
+
resource = lw_resource_with_hw_provider_test_case "blah" do; end
|
1515
|
+
}
|
1516
|
+
expect(resource.created_provider).to eq(Chef::Provider::LwResourceWithHwProviderTestCase)
|
1517
|
+
end
|
1518
|
+
end
|
1519
|
+
end
|