chef 14.13.11-universal-mingw32 → 14.14.14-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/Gemfile +72 -72
- data/LICENSE +201 -201
- data/README.md +240 -240
- data/Rakefile +72 -72
- data/bin/chef-apply +24 -24
- data/bin/chef-client +25 -25
- data/bin/chef-resource-inspector +26 -26
- data/bin/chef-service-manager +37 -37
- data/bin/chef-shell +31 -31
- data/bin/chef-solo +24 -24
- data/bin/chef-windows-service +34 -34
- data/bin/knife +24 -24
- data/chef-universal-mingw32.gemspec +24 -24
- data/chef.gemspec +62 -62
- data/distro/powershell/chef/chef.psm1 +459 -459
- data/ext/win32-eventlog/Rakefile +53 -53
- data/ext/win32-eventlog/chef-log.man +56 -56
- data/lib/.DS_Store +0 -0
- data/lib/chef.rb +34 -34
- data/lib/chef/.DS_Store +0 -0
- data/lib/chef/api_client.rb +228 -228
- data/lib/chef/api_client/registration.rb +200 -200
- data/lib/chef/api_client_v1.rb +326 -326
- data/lib/chef/application.rb +398 -398
- data/lib/chef/application/apply.rb +226 -226
- data/lib/chef/application/client.rb +559 -559
- data/lib/chef/application/exit_code.rb +164 -164
- data/lib/chef/application/knife.rb +221 -221
- data/lib/chef/application/solo.rb +381 -381
- data/lib/chef/application/windows_service.rb +337 -337
- data/lib/chef/application/windows_service_manager.rb +204 -204
- data/lib/chef/applications.rb +4 -4
- data/lib/chef/audit/audit_event_proxy.rb +93 -93
- data/lib/chef/audit/audit_reporter.rb +176 -176
- data/lib/chef/audit/control_group_data.rb +145 -145
- 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/blacklist.rb +81 -81
- data/lib/chef/chef_class.rb +248 -248
- data/lib/chef/chef_fs.rb +59 -59
- data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
- data/lib/chef/chef_fs/command_line.rb +291 -291
- data/lib/chef/chef_fs/config.rb +284 -284
- 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 -11
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
- 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 +67 -67
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +207 -207
- 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 -36
- 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 -48
- data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
- 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 +431 -431
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
- 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 +67 -67
- 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 +106 -106
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +208 -208
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
- 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 +105 -105
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
- data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
- data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
- 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 +158 -158
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
- 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 +38 -38
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +207 -207
- 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 +111 -111
- data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
- 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 +62 -62
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
- data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
- data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
- data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
- 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 +143 -143
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +232 -232
- 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/client.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
- data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
- data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
- data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
- data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
- data/lib/chef/chef_fs/file_system_cache.rb +80 -80
- data/lib/chef/chef_fs/knife.rb +161 -161
- data/lib/chef/chef_fs/parallelizer.rb +103 -103
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
- data/lib/chef/chef_fs/path_utils.rb +127 -127
- data/lib/chef/client.rb +1037 -1037
- data/lib/chef/config.rb +84 -84
- data/lib/chef/config_fetcher.rb +72 -72
- data/lib/chef/constants.rb +28 -28
- data/lib/chef/cookbook/chefignore.rb +78 -78
- data/lib/chef/cookbook/cookbook_collection.rb +63 -63
- data/lib/chef/cookbook/cookbook_version_loader.rb +267 -267
- data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
- data/lib/chef/cookbook/file_vendor.rb +71 -71
- data/lib/chef/cookbook/gem_installer.rb +100 -95
- data/lib/chef/cookbook/manifest_v0.rb +73 -73
- data/lib/chef/cookbook/manifest_v2.rb +45 -45
- data/lib/chef/cookbook/metadata.rb +804 -804
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
- data/lib/chef/cookbook/synchronizer.rb +312 -312
- data/lib/chef/cookbook/syntax_check.rb +260 -260
- data/lib/chef/cookbook_loader.rb +208 -208
- data/lib/chef/cookbook_manifest.rb +328 -328
- data/lib/chef/cookbook_site_streaming_uploader.rb +241 -241
- data/lib/chef/cookbook_uploader.rb +156 -156
- data/lib/chef/cookbook_version.rb +544 -544
- data/lib/chef/daemon.rb +131 -131
- data/lib/chef/data_bag.rb +174 -174
- data/lib/chef/data_bag_item.rb +209 -209
- data/lib/chef/data_collector.rb +565 -565
- data/lib/chef/data_collector/messages.rb +100 -100
- data/lib/chef/data_collector/messages/helpers.rb +159 -159
- data/lib/chef/data_collector/resource_report.rb +123 -123
- data/lib/chef/decorator.rb +81 -81
- data/lib/chef/decorator/lazy.rb +60 -60
- data/lib/chef/decorator/lazy_array.rb +59 -59
- data/lib/chef/decorator/unchain.rb +43 -43
- data/lib/chef/delayed_evaluator.rb +21 -21
- data/lib/chef/deprecated.rb +248 -248
- 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/.DS_Store +0 -0
- data/lib/chef/dsl/audit.rb +51 -51
- data/lib/chef/dsl/chef_provisioning.rb +57 -57
- data/lib/chef/dsl/cheffish.rb +65 -65
- data/lib/chef/dsl/core.rb +52 -52
- data/lib/chef/dsl/data_query.rb +103 -103
- data/lib/chef/dsl/declare_resource.rb +319 -319
- data/lib/chef/dsl/definitions.rb +43 -43
- data/lib/chef/dsl/include_attribute.rb +57 -57
- data/lib/chef/dsl/include_recipe.rb +40 -40
- data/lib/chef/dsl/platform_introspection.rb +269 -269
- data/lib/chef/dsl/powershell.rb +29 -29
- data/lib/chef/dsl/reboot_pending.rb +57 -57
- data/lib/chef/dsl/recipe.rb +76 -76
- data/lib/chef/dsl/registry_helper.rb +63 -63
- data/lib/chef/dsl/resources.rb +49 -49
- data/lib/chef/dsl/universal.rb +60 -60
- data/lib/chef/encrypted_data_bag_item.rb +157 -157
- 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 +319 -319
- data/lib/chef/event_dispatch/base.rb +445 -445
- 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 +543 -531
- 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 +337 -337
- data/lib/chef/file_cache.rb +223 -223
- data/lib/chef/file_content_management/content_base.rb +58 -58
- 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 +77 -77
- data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
- data/lib/chef/file_content_management/tempfile.rb +107 -107
- data/lib/chef/formatters/base.rb +246 -246
- data/lib/chef/formatters/doc.rb +443 -443
- data/lib/chef/formatters/error_description.rb +86 -86
- data/lib/chef/formatters/error_inspectors.rb +19 -19
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
- 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 +182 -182
- 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 +47 -47
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
- data/lib/chef/handler.rb +266 -266
- data/lib/chef/handler/error_report.rb +33 -33
- data/lib/chef/handler/json_file.rb +62 -62
- data/lib/chef/http.rb +539 -539
- data/lib/chef/http/api_versions.rb +56 -56
- data/lib/chef/http/auth_credentials.rb +59 -59
- data/lib/chef/http/authenticator.rb +118 -118
- data/lib/chef/http/basic_client.rb +157 -157
- 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 +189 -189
- data/lib/chef/http/json_input.rb +73 -73
- data/lib/chef/http/json_output.rb +81 -81
- 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 +209 -209
- data/lib/chef/http/ssl_policies.rb +130 -130
- data/lib/chef/http/validate_content_length.rb +114 -114
- data/lib/chef/json_compat.rb +68 -68
- data/lib/chef/key.rb +269 -269
- data/lib/chef/knife.rb +620 -620
- data/lib/chef/knife/.DS_Store +0 -0
- data/lib/chef/knife/bootstrap.rb +525 -501
- 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 +243 -243
- data/lib/chef/knife/client_bulk_delete.rb +103 -103
- data/lib/chef/knife/client_create.rb +110 -110
- data/lib/chef/knife/client_delete.rb +62 -62
- data/lib/chef/knife/client_edit.rb +52 -52
- data/lib/chef/knife/client_key_create.rb +70 -70
- data/lib/chef/knife/client_key_delete.rb +77 -77
- data/lib/chef/knife/client_key_edit.rb +80 -80
- data/lib/chef/knife/client_key_list.rb +70 -70
- data/lib/chef/knife/client_key_show.rb +77 -77
- data/lib/chef/knife/client_list.rb +41 -41
- data/lib/chef/knife/client_reregister.rb +58 -58
- data/lib/chef/knife/client_show.rb +48 -48
- data/lib/chef/knife/config_get.rb +126 -126
- data/lib/chef/knife/config_get_profile.rb +37 -37
- data/lib/chef/knife/config_list_profiles.rb +121 -121
- data/lib/chef/knife/config_use_profile.rb +50 -50
- data/lib/chef/knife/configure.rb +147 -147
- data/lib/chef/knife/configure_client.rb +48 -48
- data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
- data/lib/chef/knife/cookbook_create.rb +29 -29
- data/lib/chef/knife/cookbook_delete.rb +151 -151
- data/lib/chef/knife/cookbook_download.rb +142 -142
- data/lib/chef/knife/cookbook_list.rb +47 -47
- data/lib/chef/knife/cookbook_metadata.rb +106 -106
- data/lib/chef/knife/cookbook_metadata_from_file.rb +43 -43
- data/lib/chef/knife/cookbook_show.rb +98 -98
- data/lib/chef/knife/cookbook_site_download.rb +40 -40
- data/lib/chef/knife/cookbook_site_install.rb +40 -40
- data/lib/chef/knife/cookbook_site_list.rb +40 -40
- data/lib/chef/knife/cookbook_site_search.rb +40 -40
- data/lib/chef/knife/cookbook_site_share.rb +41 -41
- data/lib/chef/knife/cookbook_site_show.rb +40 -40
- data/lib/chef/knife/cookbook_site_unshare.rb +41 -41
- data/lib/chef/knife/cookbook_test.rb +95 -95
- data/lib/chef/knife/cookbook_upload.rb +308 -308
- data/lib/chef/knife/core/bootstrap_context.rb +273 -273
- data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
- data/lib/chef/knife/core/generic_presenter.rb +231 -231
- data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
- data/lib/chef/knife/core/node_editor.rb +130 -130
- data/lib/chef/knife/core/node_presenter.rb +158 -158
- data/lib/chef/knife/core/object_loader.rb +115 -115
- data/lib/chef/knife/core/status_presenter.rb +172 -172
- data/lib/chef/knife/core/subcommand_loader.rb +183 -183
- data/lib/chef/knife/core/text_formatter.rb +85 -85
- data/lib/chef/knife/core/ui.rb +286 -286
- data/lib/chef/knife/data_bag_create.rb +80 -80
- data/lib/chef/knife/data_bag_delete.rb +49 -49
- data/lib/chef/knife/data_bag_edit.rb +74 -74
- data/lib/chef/knife/data_bag_from_file.rb +113 -113
- data/lib/chef/knife/data_bag_list.rb +42 -42
- data/lib/chef/knife/data_bag_secret_options.rb +142 -142
- data/lib/chef/knife/data_bag_show.rb +69 -69
- data/lib/chef/knife/delete.rb +125 -125
- data/lib/chef/knife/deps.rb +154 -154
- data/lib/chef/knife/diff.rb +84 -84
- data/lib/chef/knife/download.rb +84 -84
- data/lib/chef/knife/edit.rb +88 -88
- data/lib/chef/knife/environment_compare.rb +127 -127
- data/lib/chef/knife/environment_create.rb +52 -52
- data/lib/chef/knife/environment_delete.rb +44 -44
- data/lib/chef/knife/environment_edit.rb +44 -44
- data/lib/chef/knife/environment_from_file.rb +84 -84
- data/lib/chef/knife/environment_list.rb +41 -41
- data/lib/chef/knife/environment_show.rb +47 -47
- data/lib/chef/knife/exec.rb +87 -87
- data/lib/chef/knife/key_create.rb +112 -112
- data/lib/chef/knife/key_create_base.rb +50 -50
- data/lib/chef/knife/key_delete.rb +55 -55
- data/lib/chef/knife/key_edit.rb +118 -118
- data/lib/chef/knife/key_edit_base.rb +55 -55
- data/lib/chef/knife/key_list.rb +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 +172 -172
- 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_policy_set.rb +79 -79
- data/lib/chef/knife/node_run_list_add.rb +104 -104
- data/lib/chef/knife/node_run_list_remove.rb +67 -67
- data/lib/chef/knife/node_run_list_set.rb +66 -66
- data/lib/chef/knife/node_show.rb +61 -61
- 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 +53 -53
- data/lib/chef/knife/raw.rb +124 -124
- data/lib/chef/knife/recipe_list.rb +32 -32
- data/lib/chef/knife/rehash.rb +65 -65
- 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 +87 -87
- data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_env_run_list_set.rb +70 -70
- data/lib/chef/knife/role_from_file.rb +51 -51
- data/lib/chef/knife/role_list.rb +42 -42
- data/lib/chef/knife/role_run_list_add.rb +87 -87
- data/lib/chef/knife/role_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_run_list_remove.rb +56 -56
- data/lib/chef/knife/role_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_run_list_set.rb +69 -69
- data/lib/chef/knife/role_show.rb +48 -48
- data/lib/chef/knife/search.rb +194 -194
- data/lib/chef/knife/serve.rb +64 -64
- data/lib/chef/knife/show.rb +72 -72
- data/lib/chef/knife/ssh.rb +634 -634
- data/lib/chef/knife/ssl_check.rb +283 -283
- data/lib/chef/knife/ssl_fetch.rb +161 -161
- data/lib/chef/knife/status.rb +110 -110
- data/lib/chef/knife/supermarket_download.rb +122 -122
- data/lib/chef/knife/supermarket_install.rb +193 -193
- data/lib/chef/knife/supermarket_list.rb +65 -65
- data/lib/chef/knife/supermarket_search.rb +53 -53
- data/lib/chef/knife/supermarket_share.rb +166 -166
- data/lib/chef/knife/supermarket_show.rb +67 -67
- data/lib/chef/knife/supermarket_unshare.rb +61 -61
- 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 +86 -86
- data/lib/chef/knife/user_create.rb +151 -151
- data/lib/chef/knife/user_delete.rb +96 -96
- data/lib/chef/knife/user_edit.rb +82 -82
- data/lib/chef/knife/user_key_create.rb +70 -70
- data/lib/chef/knife/user_key_delete.rb +77 -77
- data/lib/chef/knife/user_key_edit.rb +80 -80
- data/lib/chef/knife/user_key_list.rb +70 -70
- data/lib/chef/knife/user_key_show.rb +77 -77
- data/lib/chef/knife/user_list.rb +44 -44
- data/lib/chef/knife/user_reregister.rb +90 -90
- data/lib/chef/knife/user_show.rb +79 -79
- data/lib/chef/knife/xargs.rb +282 -282
- data/lib/chef/local_mode.rb +129 -129
- data/lib/chef/log.rb +70 -70
- data/lib/chef/log/syslog.rb +45 -45
- data/lib/chef/log/winevt.rb +99 -99
- data/lib/chef/mash.rb +232 -232
- data/lib/chef/mixin/.DS_Store +0 -0
- data/lib/chef/mixin/api_version_request_handling.rb +64 -64
- data/lib/chef/mixin/checksum.rb +37 -37
- data/lib/chef/mixin/convert_to_class_name.rb +126 -126
- data/lib/chef/mixin/create_path.rb +71 -71
- data/lib/chef/mixin/deep_merge.rb +140 -140
- data/lib/chef/mixin/deprecation.rb +117 -117
- 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 +55 -55
- data/lib/chef/mixin/get_source_from_package.rb +47 -47
- data/lib/chef/mixin/homebrew_user.rb +79 -79
- data/lib/chef/mixin/lazy_module_include.rb +77 -77
- data/lib/chef/mixin/notifying_block.rb +51 -51
- data/lib/chef/mixin/openssl_helper.rb +402 -402
- data/lib/chef/mixin/params_validate.rb +498 -498
- data/lib/chef/mixin/path_sanity.rb +66 -66
- data/lib/chef/mixin/powershell_exec.rb +105 -105
- 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 +323 -323
- data/lib/chef/mixin/provides.rb +29 -29
- data/lib/chef/mixin/proxified_socket.rb +42 -42
- data/lib/chef/mixin/securable.rb +192 -192
- data/lib/chef/mixin/shell_out.rb +258 -258
- data/lib/chef/mixin/subclass_directive.rb +37 -37
- data/lib/chef/mixin/template.rb +265 -265
- data/lib/chef/mixin/unformatter.rb +32 -32
- data/lib/chef/mixin/uris.rb +42 -42
- data/lib/chef/mixin/user_context.rb +55 -55
- data/lib/chef/mixin/versioned_api.rb +84 -84
- data/lib/chef/mixin/which.rb +52 -52
- data/lib/chef/mixin/why_run.rb +326 -326
- data/lib/chef/mixin/wide_string.rb +54 -54
- data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
- data/lib/chef/mixin/windows_env_helper.rb +67 -67
- data/lib/chef/mixin/xml_escape.rb +138 -138
- data/lib/chef/mixins.rb +12 -12
- data/lib/chef/monkey_patches/net_http.rb +64 -64
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
- data/lib/chef/monkey_patches/win32/registry.rb +86 -86
- data/lib/chef/monologger.rb +4 -4
- data/lib/chef/nil_argument.rb +3 -3
- data/lib/chef/node.rb +688 -688
- data/lib/chef/node/attribute.rb +649 -649
- data/lib/chef/node/attribute_collections.rb +213 -213
- data/lib/chef/node/common_api.rb +121 -121
- data/lib/chef/node/immutable_collections.rb +182 -182
- data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
- data/lib/chef/node/mixin/immutablize_array.rb +180 -180
- data/lib/chef/node/mixin/immutablize_hash.rb +165 -165
- data/lib/chef/node/mixin/state_tracking.rb +96 -96
- data/lib/chef/node_map.rb +315 -315
- data/lib/chef/null_logger.rb +79 -79
- data/lib/chef/org.rb +144 -144
- data/lib/chef/platform.rb +30 -30
- 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 +55 -55
- data/lib/chef/platform/provider_priority_map.rb +11 -11
- data/lib/chef/platform/query_helpers.rb +100 -100
- data/lib/chef/platform/rebooter.rb +71 -71
- 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 +252 -252
- data/lib/chef/policy_builder/policyfile.rb +569 -569
- data/lib/chef/powershell.rb +57 -57
- data/lib/chef/property.rb +731 -731
- data/lib/chef/provider.rb +410 -408
- data/lib/chef/provider/.DS_Store +0 -0
- data/lib/chef/provider/apt_preference.rb +94 -94
- data/lib/chef/provider/apt_repository.rb +360 -360
- data/lib/chef/provider/apt_update.rb +80 -80
- data/lib/chef/provider/batch.rb +45 -45
- data/lib/chef/provider/cookbook_file.rb +47 -47
- data/lib/chef/provider/cookbook_file/content.rb +49 -49
- data/lib/chef/provider/cron.rb +256 -256
- 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/directory.rb +164 -164
- data/lib/chef/provider/dsc_resource.rb +209 -209
- data/lib/chef/provider/dsc_script.rb +185 -185
- data/lib/chef/provider/execute.rb +130 -130
- data/lib/chef/provider/file.rb +478 -478
- data/lib/chef/provider/file/content.rb +39 -39
- data/lib/chef/provider/git.rb +357 -357
- data/lib/chef/provider/group.rb +179 -179
- data/lib/chef/provider/group/aix.rb +79 -79
- data/lib/chef/provider/group/dscl.rb +177 -177
- data/lib/chef/provider/group/gpasswd.rb +58 -58
- data/lib/chef/provider/group/groupadd.rb +133 -133
- data/lib/chef/provider/group/groupmod.rb +123 -123
- data/lib/chef/provider/group/pw.rb +137 -137
- data/lib/chef/provider/group/suse.rb +83 -83
- data/lib/chef/provider/group/usermod.rb +90 -90
- data/lib/chef/provider/group/windows.rb +110 -110
- data/lib/chef/provider/http_request.rb +132 -132
- data/lib/chef/provider/ifconfig.rb +271 -271
- data/lib/chef/provider/ifconfig/aix.rb +94 -94
- data/lib/chef/provider/ifconfig/debian.rb +88 -88
- data/lib/chef/provider/ifconfig/redhat.rb +54 -54
- data/lib/chef/provider/launchd.rb +231 -231
- data/lib/chef/provider/link.rb +168 -168
- data/lib/chef/provider/log.rb +43 -43
- data/lib/chef/provider/lwrp_base.rb +89 -89
- data/lib/chef/provider/mdadm.rb +85 -85
- data/lib/chef/provider/mount.rb +175 -175
- data/lib/chef/provider/mount/aix.rb +221 -221
- data/lib/chef/provider/mount/mount.rb +283 -283
- data/lib/chef/provider/mount/solaris.rb +275 -275
- data/lib/chef/provider/mount/windows.rb +92 -92
- data/lib/chef/provider/noop.rb +37 -37
- data/lib/chef/provider/ohai.rb +45 -45
- data/lib/chef/provider/osx_profile.rb +251 -251
- data/lib/chef/provider/package.rb +687 -687
- data/lib/chef/provider/package/.DS_Store +0 -0
- data/lib/chef/provider/package/apt.rb +249 -249
- data/lib/chef/provider/package/bff.rb +142 -142
- data/lib/chef/provider/package/cab.rb +187 -187
- data/lib/chef/provider/package/chocolatey.rb +285 -285
- data/lib/chef/provider/package/dnf.rb +196 -196
- data/lib/chef/provider/package/dnf/dnf_helper.py +114 -100
- data/lib/chef/provider/package/dnf/python_helper.rb +173 -173
- data/lib/chef/provider/package/dnf/version.rb +56 -56
- data/lib/chef/provider/package/dpkg.rb +241 -241
- data/lib/chef/provider/package/freebsd/.DS_Store +0 -0
- 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 +76 -76
- data/lib/chef/provider/package/freebsd/port.rb +60 -60
- data/lib/chef/provider/package/homebrew.rb +138 -138
- data/lib/chef/provider/package/ips.rb +85 -85
- data/lib/chef/provider/package/macports.rb +101 -101
- data/lib/chef/provider/package/msu.rb +161 -161
- data/lib/chef/provider/package/openbsd.rb +139 -139
- data/lib/chef/provider/package/pacman.rb +103 -103
- data/lib/chef/provider/package/paludis.rb +85 -85
- data/lib/chef/provider/package/portage.rb +133 -133
- data/lib/chef/provider/package/powershell.rb +133 -133
- data/lib/chef/provider/package/rpm.rb +126 -126
- data/lib/chef/provider/package/rubygems.rb +617 -617
- data/lib/chef/provider/package/smartos.rb +92 -92
- data/lib/chef/provider/package/solaris.rb +137 -137
- data/lib/chef/provider/package/windows.rb +317 -317
- data/lib/chef/provider/package/windows/exe.rb +117 -117
- data/lib/chef/provider/package/windows/msi.rb +96 -96
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +99 -99
- data/lib/chef/provider/package/yum.rb +289 -289
- data/lib/chef/provider/package/yum/python_helper.rb +222 -222
- data/lib/chef/provider/package/yum/rpm_utils.rb +651 -651
- data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -79
- data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -318
- data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -354
- data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -440
- data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -65
- data/lib/chef/provider/package/yum/simplejson/tool.py +37 -37
- data/lib/chef/provider/package/yum/version.rb +56 -56
- data/lib/chef/provider/package/yum/yum_cache.rb +93 -93
- data/lib/chef/provider/package/yum/yum_helper.py +211 -211
- data/lib/chef/provider/package/zypper.rb +167 -167
- data/lib/chef/provider/powershell_script.rb +223 -223
- data/lib/chef/provider/reboot.rb +78 -78
- data/lib/chef/provider/registry_key.rb +199 -199
- data/lib/chef/provider/remote_directory.rb +269 -269
- data/lib/chef/provider/remote_file.rb +66 -66
- 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 +60 -60
- data/lib/chef/provider/remote_file/ftp.rb +172 -172
- data/lib/chef/provider/remote_file/http.rb +143 -143
- data/lib/chef/provider/remote_file/local_file.rb +60 -60
- data/lib/chef/provider/remote_file/network_file.rb +61 -61
- data/lib/chef/provider/remote_file/sftp.rb +105 -105
- data/lib/chef/provider/resource_update.rb +52 -52
- data/lib/chef/provider/route.rb +248 -248
- data/lib/chef/provider/ruby_block.rb +40 -40
- data/lib/chef/provider/script.rb +121 -121
- data/lib/chef/provider/service.rb +252 -252
- data/lib/chef/provider/service/aix.rb +125 -125
- 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 +193 -193
- data/lib/chef/provider/service/freebsd.rb +194 -194
- data/lib/chef/provider/service/gentoo.rb +70 -70
- data/lib/chef/provider/service/init.rb +93 -93
- data/lib/chef/provider/service/insserv.rb +61 -61
- data/lib/chef/provider/service/invokercd.rb +41 -41
- data/lib/chef/provider/service/macosx.rb +252 -252
- data/lib/chef/provider/service/openbsd.rb +216 -216
- data/lib/chef/provider/service/redhat.rb +126 -126
- data/lib/chef/provider/service/simple.rb +172 -172
- data/lib/chef/provider/service/solaris.rb +127 -127
- data/lib/chef/provider/service/systemd.rb +189 -189
- data/lib/chef/provider/service/upstart.rb +260 -260
- data/lib/chef/provider/service/windows.rb +488 -488
- data/lib/chef/provider/subversion.rb +227 -227
- data/lib/chef/provider/support/yum_repo.erb +138 -138
- data/lib/chef/provider/support/zypper_repo.erb +17 -17
- data/lib/chef/provider/systemd_unit.rb +261 -261
- data/lib/chef/provider/template.rb +59 -59
- data/lib/chef/provider/template/content.rb +93 -93
- data/lib/chef/provider/template_finder.rb +62 -62
- data/lib/chef/provider/user.rb +221 -221
- data/lib/chef/provider/user/aix.rb +131 -131
- data/lib/chef/provider/user/dscl.rb +712 -712
- data/lib/chef/provider/user/linux.rb +116 -116
- data/lib/chef/provider/user/pw.rb +105 -105
- data/lib/chef/provider/user/solaris.rb +160 -160
- data/lib/chef/provider/user/useradd.rb +161 -161
- data/lib/chef/provider/user/windows.rb +126 -126
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
- data/lib/chef/provider/windows_env.rb +207 -207
- data/lib/chef/provider/windows_path.rb +61 -61
- data/lib/chef/provider/windows_script.rb +75 -75
- data/lib/chef/provider/windows_task.rb +631 -631
- data/lib/chef/provider/yum_repository.rb +130 -130
- data/lib/chef/provider/zypper_repository.rb +169 -169
- data/lib/chef/provider_resolver.rb +146 -146
- data/lib/chef/providers.rb +146 -146
- data/lib/chef/recipe.rb +110 -110
- data/lib/chef/request_id.rb +37 -37
- data/lib/chef/reserved_names.rb +9 -9
- data/lib/chef/resource.rb +1593 -1584
- data/lib/chef/resource/.DS_Store +0 -0
- data/lib/chef/resource/action_class.rb +90 -90
- data/lib/chef/resource/apt_package.rb +40 -40
- data/lib/chef/resource/apt_preference.rb +52 -52
- data/lib/chef/resource/apt_repository.rb +86 -86
- data/lib/chef/resource/apt_update.rb +41 -41
- data/lib/chef/resource/bash.rb +34 -34
- data/lib/chef/resource/batch.rb +34 -34
- data/lib/chef/resource/bff_package.rb +31 -31
- data/lib/chef/resource/breakpoint.rb +47 -47
- data/lib/chef/resource/build_essential.rb +142 -142
- data/lib/chef/resource/cab_package.rb +45 -45
- data/lib/chef/resource/chef_gem.rb +59 -59
- data/lib/chef/resource/chef_handler.rb +132 -132
- data/lib/chef/resource/chocolatey_config.rb +83 -83
- data/lib/chef/resource/chocolatey_package.rb +50 -50
- data/lib/chef/resource/chocolatey_source.rb +95 -95
- data/lib/chef/resource/conditional.rb +135 -135
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
- data/lib/chef/resource/cookbook_file.rb +45 -45
- data/lib/chef/resource/cron.rb +174 -174
- data/lib/chef/resource/cron_access.rb +70 -70
- data/lib/chef/resource/cron_d.rb +238 -238
- data/lib/chef/resource/csh.rb +39 -39
- data/lib/chef/resource/directory.rb +51 -51
- data/lib/chef/resource/dmg_package.rb +171 -171
- data/lib/chef/resource/dnf_package.rb +79 -79
- data/lib/chef/resource/dpkg_package.rb +33 -33
- data/lib/chef/resource/dsc_resource.rb +120 -120
- data/lib/chef/resource/dsc_script.rb +124 -124
- data/lib/chef/resource/execute.rb +201 -201
- data/lib/chef/resource/file.rb +105 -105
- data/lib/chef/resource/file/.DS_Store +0 -0
- data/lib/chef/resource/file/verification.rb +139 -139
- data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
- data/lib/chef/resource/freebsd_package.rb +73 -73
- data/lib/chef/resource/gem_package.rb +58 -58
- data/lib/chef/resource/git.rb +35 -35
- data/lib/chef/resource/group.rb +61 -61
- data/lib/chef/resource/homebrew_cask.rb +100 -100
- data/lib/chef/resource/homebrew_package.rb +38 -38
- data/lib/chef/resource/homebrew_tap.rb +87 -87
- data/lib/chef/resource/hostname.rb +265 -265
- data/lib/chef/resource/http_request.rb +55 -55
- data/lib/chef/resource/ifconfig.rb +105 -105
- data/lib/chef/resource/ips_package.rb +38 -38
- data/lib/chef/resource/kernel_module.rb +135 -135
- data/lib/chef/resource/ksh.rb +39 -39
- data/lib/chef/resource/launchd.rb +252 -252
- data/lib/chef/resource/link.rb +93 -93
- data/lib/chef/resource/locale.rb +94 -94
- data/lib/chef/resource/log.rb +52 -52
- data/lib/chef/resource/lwrp_base.rb +123 -123
- data/lib/chef/resource/macos_userdefaults.rb +132 -132
- data/lib/chef/resource/macosx_service.rb +41 -41
- data/lib/chef/resource/macports_package.rb +29 -29
- data/lib/chef/resource/mdadm.rb +67 -67
- data/lib/chef/resource/mount.rb +96 -96
- data/lib/chef/resource/msu_package.rb +49 -49
- data/lib/chef/resource/ohai.rb +41 -41
- data/lib/chef/resource/ohai_hint.rb +95 -95
- data/lib/chef/resource/openbsd_package.rb +38 -38
- data/lib/chef/resource/openssl_dhparam.rb +77 -77
- data/lib/chef/resource/openssl_ec_private_key.rb +93 -93
- data/lib/chef/resource/openssl_ec_public_key.rb +75 -75
- data/lib/chef/resource/openssl_rsa_private_key.rb +91 -91
- data/lib/chef/resource/openssl_rsa_public_key.rb +74 -74
- data/lib/chef/resource/openssl_x509_certificate.rb +221 -221
- data/lib/chef/resource/openssl_x509_crl.rb +132 -132
- data/lib/chef/resource/openssl_x509_request.rb +151 -151
- data/lib/chef/resource/osx_profile.rb +48 -48
- data/lib/chef/resource/package.rb +73 -73
- data/lib/chef/resource/pacman_package.rb +30 -30
- data/lib/chef/resource/paludis_package.rb +38 -38
- data/lib/chef/resource/perl.rb +38 -38
- data/lib/chef/resource/portage_package.rb +33 -33
- data/lib/chef/resource/powershell_package.rb +52 -52
- data/lib/chef/resource/powershell_package_source.rb +169 -169
- data/lib/chef/resource/powershell_script.rb +59 -59
- data/lib/chef/resource/python.rb +36 -36
- data/lib/chef/resource/reboot.rb +46 -46
- data/lib/chef/resource/registry_key.rb +130 -130
- data/lib/chef/resource/remote_directory.rb +87 -87
- data/lib/chef/resource/remote_file.rb +181 -181
- data/lib/chef/resource/resource_notification.rb +143 -139
- data/lib/chef/resource/rhsm_errata.rb +46 -46
- data/lib/chef/resource/rhsm_errata_level.rb +51 -51
- data/lib/chef/resource/rhsm_register.rb +168 -168
- data/lib/chef/resource/rhsm_repo.rb +65 -65
- data/lib/chef/resource/rhsm_subscription.rb +98 -98
- data/lib/chef/resource/route.rb +46 -46
- data/lib/chef/resource/rpm_package.rb +33 -33
- data/lib/chef/resource/ruby.rb +37 -37
- data/lib/chef/resource/ruby_block.rb +45 -45
- data/lib/chef/resource/scm.rb +75 -75
- data/lib/chef/resource/script.rb +54 -54
- data/lib/chef/resource/service.rb +221 -221
- data/lib/chef/resource/smartos_package.rb +31 -31
- data/lib/chef/resource/solaris_package.rb +33 -33
- data/lib/chef/resource/ssh_known_hosts_entry.rb +146 -146
- data/lib/chef/resource/subversion.rb +55 -55
- data/lib/chef/resource/sudo.rb +230 -230
- data/lib/chef/resource/support/cron.d.erb +28 -28
- data/lib/chef/resource/support/cron_access.erb +4 -4
- data/lib/chef/resource/support/ssh_known_hosts.erb +3 -3
- data/lib/chef/resource/support/sudoer.erb +18 -18
- data/lib/chef/resource/swap_file.rb +209 -209
- data/lib/chef/resource/sysctl.rb +151 -151
- data/lib/chef/resource/systemd_unit.rb +86 -86
- data/lib/chef/resource/template.rb +211 -211
- data/lib/chef/resource/timezone.rb +135 -135
- data/lib/chef/resource/user.rb +159 -159
- data/lib/chef/resource/user/aix_user.rb +31 -31
- data/lib/chef/resource/user/dscl_user.rb +31 -31
- data/lib/chef/resource/user/linux_user.rb +32 -32
- data/lib/chef/resource/user/pw_user.rb +31 -31
- data/lib/chef/resource/user/solaris_user.rb +31 -31
- data/lib/chef/resource/user/windows_user.rb +35 -35
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
- data/lib/chef/resource/windows_ad_join.rb +120 -120
- data/lib/chef/resource/windows_auto_run.rb +87 -87
- data/lib/chef/resource/windows_certificate.rb +332 -332
- data/lib/chef/resource/windows_env.rb +49 -49
- data/lib/chef/resource/windows_feature.rb +90 -90
- data/lib/chef/resource/windows_feature_dism.rb +222 -222
- data/lib/chef/resource/windows_feature_powershell.rb +262 -262
- data/lib/chef/resource/windows_firewall_rule.rb +205 -205
- data/lib/chef/resource/windows_font.rb +125 -125
- data/lib/chef/resource/windows_package.rb +61 -61
- data/lib/chef/resource/windows_pagefile.rb +206 -206
- data/lib/chef/resource/windows_path.rb +38 -38
- data/lib/chef/resource/windows_printer.rb +146 -146
- data/lib/chef/resource/windows_printer_port.rb +136 -136
- data/lib/chef/resource/windows_script.rb +65 -65
- data/lib/chef/resource/windows_service.rb +121 -121
- data/lib/chef/resource/windows_share.rb +324 -324
- data/lib/chef/resource/windows_shortcut.rb +79 -79
- data/lib/chef/resource/windows_task.rb +349 -349
- data/lib/chef/resource/windows_workgroup.rb +112 -112
- data/lib/chef/resource/yum_package.rb +77 -77
- data/lib/chef/resource/yum_repository.rb +187 -187
- data/lib/chef/resource/zypper_package.rb +44 -44
- data/lib/chef/resource/zypper_repository.rb +103 -103
- data/lib/chef/resource_builder.rb +92 -92
- data/lib/chef/resource_collection.rb +153 -147
- data/lib/chef/resource_collection/resource_collection_serialization.rb +68 -68
- data/lib/chef/resource_collection/resource_list.rb +106 -106
- data/lib/chef/resource_collection/resource_set.rb +200 -200
- data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
- data/lib/chef/resource_definition.rb +68 -68
- data/lib/chef/resource_definition_list.rb +38 -38
- data/lib/chef/resource_inspector.rb +108 -108
- data/lib/chef/resource_reporter.rb +337 -337
- data/lib/chef/resource_resolver.rb +160 -160
- data/lib/chef/resources.rb +147 -147
- data/lib/chef/role.rb +274 -274
- data/lib/chef/run_context.rb +708 -682
- data/lib/chef/run_context/cookbook_compiler.rb +344 -344
- data/lib/chef/run_list.rb +168 -168
- data/lib/chef/run_list/run_list_expansion.rb +236 -236
- data/lib/chef/run_list/run_list_item.rb +98 -98
- data/lib/chef/run_list/versioned_recipe_list.rb +104 -104
- data/lib/chef/run_lock.rb +197 -197
- data/lib/chef/run_status.rb +127 -127
- data/lib/chef/runner.rb +184 -144
- data/lib/chef/sandbox.rb +20 -20
- data/lib/chef/scan_access_control.rb +138 -138
- data/lib/chef/search/query.rb +182 -182
- data/lib/chef/server_api.rb +83 -83
- data/lib/chef/server_api_versions.rb +59 -59
- data/lib/chef/shell.rb +353 -353
- data/lib/chef/shell/ext.rb +593 -593
- data/lib/chef/shell/model_wrapper.rb +120 -120
- data/lib/chef/shell/shell_session.rb +310 -310
- data/lib/chef/user.rb +194 -194
- data/lib/chef/user_v1.rb +325 -325
- 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 +192 -192
- data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
- 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 +173 -173
- 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 +93 -93
- data/lib/chef/util/threaded_job_queue.rb +61 -61
- data/lib/chef/util/windows.rb +24 -24
- data/lib/chef/util/windows/logon_session.rb +129 -129
- data/lib/chef/util/windows/net_group.rb +78 -78
- data/lib/chef/util/windows/net_use.rb +81 -81
- data/lib/chef/util/windows/net_user.rb +172 -172
- data/lib/chef/util/windows/volume.rb +49 -49
- data/lib/chef/version.rb +36 -36
- data/lib/chef/version/platform.rb +62 -62
- data/lib/chef/version_class.rb +75 -75
- data/lib/chef/version_constraint.rb +118 -118
- data/lib/chef/version_constraint/platform.rb +28 -28
- data/lib/chef/version_string.rb +143 -143
- data/lib/chef/whitelist.rb +86 -86
- data/lib/chef/win32/api.rb +372 -372
- data/lib/chef/win32/api/crypto.rb +63 -63
- data/lib/chef/win32/api/error.rb +953 -953
- data/lib/chef/win32/api/file.rb +620 -620
- 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 +328 -328
- 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 +476 -476
- 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 -86
- data/lib/chef/win32/eventlog.rb +31 -31
- data/lib/chef/win32/file.rb +226 -226
- 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 +326 -326
- data/lib/chef/win32/process.rb +97 -97
- data/lib/chef/win32/registry.rb +374 -374
- data/lib/chef/win32/security.rb +698 -698
- 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 +347 -347
- data/lib/chef/win32/security/token.rb +72 -72
- data/lib/chef/win32/system.rb +62 -62
- data/lib/chef/win32/unicode.rb +66 -66
- data/lib/chef/win32/version.rb +151 -151
- data/lib/chef/win32_service_constants.rb +143 -143
- data/lib/chef/workstation_config_loader.rb +23 -23
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- 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 -2
- data/spec/data/client.d_00/01-bar.rb +1 -1
- data/spec/data/client.d_00/02-strings.rb +2 -2
- data/spec/data/client.d_00/bar +1 -1
- data/spec/data/client.d_01/foo/bar.rb +1 -1
- data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
- data/spec/data/config.rb +6 -6
- data/spec/data/cookbooks/.DS_Store +0 -0
- 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/.DS_Store +0 -0
- data/spec/data/cookbooks/java/files/.DS_Store +0 -0
- 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/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/templates/default/helper_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
- data/spec/data/cookbooks/preseed/metadata.rb +2 -2
- data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
- data/spec/data/cookbooks/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 +24 -24
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
- data/spec/data/lwrp/resources/bar.rb +2 -2
- data/spec/data/lwrp/resources/buck_passer.rb +5 -5
- data/spec/data/lwrp/resources/buck_passer_2.rb +3 -3
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -3
- data/spec/data/lwrp/resources/foo.rb +4 -4
- data/spec/data/lwrp/resources/inline_compiler.rb +3 -3
- data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -3
- data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -3
- 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/.DS_Store +0 -0
- 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/mixin/invalid_data.rb +3 -3
- data/spec/data/mixin/real_data.rb +2 -2
- data/spec/data/nested.json +2 -2
- data/spec/data/nodes/Tim.local.json +3 -0
- data/spec/data/nodes/Tims-MBP.local.json +3 -0
- data/spec/data/nodes/default.rb +15 -15
- data/spec/data/nodes/test.example.com.rb +17 -17
- data/spec/data/nodes/test.rb +15 -15
- data/spec/data/null_config.rb +1 -1
- data/spec/data/object_loader/environments/test.json +7 -7
- data/spec/data/object_loader/environments/test.rb +2 -2
- data/spec/data/object_loader/environments/test_json_class.json +8 -8
- data/spec/data/object_loader/nodes/test.json +7 -7
- data/spec/data/object_loader/nodes/test.rb +2 -2
- data/spec/data/object_loader/nodes/test_json_class.json +8 -8
- data/spec/data/object_loader/roles/test.json +7 -7
- data/spec/data/object_loader/roles/test.rb +2 -2
- data/spec/data/object_loader/roles/test_json_class.json +8 -8
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/prefer_metadata_json/metadata.json +51 -51
- data/spec/data/prefer_metadata_json/metadata.rb +6 -6
- data/spec/data/recipes/test.rb +7 -7
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
- data/spec/data/run_context/.DS_Store +0 -0
- data/spec/data/run_context/cookbooks/.DS_Store +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +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 +2 -2
- 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 +2 -2
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +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 +2 -2
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +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/sample_msu1.xml +10 -10
- data/spec/data/sample_msu2.xml +14 -14
- data/spec/data/sample_msu3.xml +16 -16
- data/spec/data/search_queries_to_transform.txt +98 -98
- data/spec/data/shef-config.rb +11 -11
- data/spec/data/ssl/5e707473.0 +18 -18
- data/spec/data/ssl/chef-rspec.cert +27 -27
- data/spec/data/ssl/chef-rspec.key +27 -27
- data/spec/data/ssl/key.pem +15 -15
- data/spec/data/ssl/private_key.pem +27 -27
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
- data/spec/data/standalone_cookbook/chefignore +9 -9
- data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
- data/spec/data/templates/failed.erb +5 -5
- data/spec/data/trusted_certs/example.crt +22 -22
- data/spec/data/trusted_certs/example_no_cn.crt +36 -36
- data/spec/data/trusted_certs/intermediate.pem +27 -27
- data/spec/data/trusted_certs/opscode.pem +57 -57
- data/spec/data/trusted_certs/root.pem +22 -22
- data/spec/data/windows_certificates/base64_test.cer +22 -22
- data/spec/data/windows_certificates/test.pem +21 -21
- data/spec/functional/.DS_Store +0 -0
- data/spec/functional/application_spec.rb +58 -58
- data/spec/functional/assets/chefinittest +36 -36
- data/spec/functional/assets/inittest +36 -36
- data/spec/functional/assets/testchefsubsys +10 -10
- data/spec/functional/assets/yumrepo/repodata/repomd.xml +21 -21
- 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 +104 -104
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
- data/spec/functional/http/simple_spec.rb +146 -146
- data/spec/functional/knife/configure_spec.rb +33 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
- data/spec/functional/knife/exec_spec.rb +55 -55
- data/spec/functional/knife/rehash_spec.rb +39 -39
- data/spec/functional/knife/smoke_test.rb +42 -42
- data/spec/functional/knife/ssh_spec.rb +359 -359
- data/spec/functional/mixin/from_file_spec.rb +82 -82
- data/spec/functional/mixin/powershell_out_spec.rb +43 -43
- data/spec/functional/mixin/shell_out_spec.rb +78 -78
- data/spec/functional/mixin/user_context_spec.rb +117 -117
- 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 +117 -117
- data/spec/functional/resource/.DS_Store +0 -0
- data/spec/functional/resource/aix_service_spec.rb +138 -138
- data/spec/functional/resource/aixinit_service_spec.rb +211 -211
- data/spec/functional/resource/apt_package_spec.rb +386 -386
- data/spec/functional/resource/base.rb +28 -28
- data/spec/functional/resource/bash_spec.rb +54 -54
- data/spec/functional/resource/batch_spec.rb +34 -34
- data/spec/functional/resource/bff_spec.rb +120 -120
- data/spec/functional/resource/chocolatey_package_spec.rb +118 -118
- data/spec/functional/resource/cookbook_file_spec.rb +81 -81
- data/spec/functional/resource/cron_spec.rb +179 -179
- data/spec/functional/resource/directory_spec.rb +43 -43
- data/spec/functional/resource/dnf_package_spec.rb +686 -686
- 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 +484 -484
- data/spec/functional/resource/execute_spec.rb +171 -171
- data/spec/functional/resource/file_spec.rb +167 -167
- data/spec/functional/resource/git_spec.rb +257 -257
- data/spec/functional/resource/group_spec.rb +497 -497
- data/spec/functional/resource/ifconfig_spec.rb +172 -172
- data/spec/functional/resource/insserv_spec.rb +206 -205
- data/spec/functional/resource/link_spec.rb +699 -699
- data/spec/functional/resource/mount_spec.rb +207 -207
- data/spec/functional/resource/msu_package_spec.rb +98 -98
- data/spec/functional/resource/ohai_spec.rb +62 -62
- data/spec/functional/resource/powershell_script_spec.rb +599 -599
- data/spec/functional/resource/reboot_spec.rb +103 -103
- data/spec/functional/resource/registry_spec.rb +676 -676
- data/spec/functional/resource/remote_directory_spec.rb +220 -220
- data/spec/functional/resource/remote_file_spec.rb +424 -424
- data/spec/functional/resource/rpm_spec.rb +120 -120
- data/spec/functional/resource/template_spec.rb +245 -245
- data/spec/functional/resource/timezone_spec.rb +39 -39
- data/spec/functional/resource/user/dscl_spec.rb +195 -195
- data/spec/functional/resource/user/windows_spec.rb +245 -245
- data/spec/functional/resource/windows_certificate_spec.rb +492 -492
- data/spec/functional/resource/windows_env_spec.rb +285 -285
- data/spec/functional/resource/windows_package_spec.rb +168 -168
- data/spec/functional/resource/windows_path_spec.rb +64 -64
- data/spec/functional/resource/windows_service_spec.rb +102 -102
- data/spec/functional/resource/windows_task_spec.rb +1917 -1917
- data/spec/functional/resource/yum_package_spec.rb +959 -959
- data/spec/functional/resource/zypper_package_spec.rb +233 -233
- data/spec/functional/root_alias_spec.rb +78 -78
- data/spec/functional/run_lock_spec.rb +473 -473
- data/spec/functional/shell_spec.rb +146 -146
- data/spec/functional/tiny_server_spec.rb +79 -79
- data/spec/functional/util/.DS_Store +0 -0
- 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 +624 -624
- data/spec/functional/win32/security_spec.rb +206 -206
- 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 +115 -115
- data/spec/integration/.DS_Store +0 -0
- data/spec/integration/client/client_spec.rb +732 -732
- data/spec/integration/client/exit_code_spec.rb +142 -142
- 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 +961 -959
- data/spec/integration/knife/chef_repository_file_system_spec.rb +199 -199
- data/spec/integration/knife/chefignore_spec.rb +300 -300
- data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
- data/spec/integration/knife/client_create_spec.rb +69 -69
- data/spec/integration/knife/client_delete_spec.rb +63 -63
- data/spec/integration/knife/client_key_create_spec.rb +65 -65
- data/spec/integration/knife/client_key_delete_spec.rb +42 -42
- data/spec/integration/knife/client_key_list_spec.rb +60 -60
- data/spec/integration/knife/client_key_show_spec.rb +44 -44
- data/spec/integration/knife/client_list_spec.rb +48 -48
- data/spec/integration/knife/client_show_spec.rb +36 -36
- data/spec/integration/knife/common_options_spec.rb +173 -173
- data/spec/integration/knife/config_get_profile_spec.rb +112 -112
- data/spec/integration/knife/config_get_spec.rb +183 -183
- data/spec/integration/knife/config_list_profiles_spec.rb +188 -188
- data/spec/integration/knife/config_use_profile_spec.rb +100 -100
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
- data/spec/integration/knife/cookbook_download_spec.rb +71 -71
- data/spec/integration/knife/cookbook_list_spec.rb +54 -54
- data/spec/integration/knife/cookbook_show_spec.rb +148 -148
- data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
- data/spec/integration/knife/data_bag_create_spec.rb +124 -124
- data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
- data/spec/integration/knife/data_bag_edit_spec.rb +104 -104
- data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
- data/spec/integration/knife/data_bag_list_spec.rb +43 -43
- data/spec/integration/knife/data_bag_show_spec.rb +94 -94
- data/spec/integration/knife/delete_spec.rb +1017 -1017
- data/spec/integration/knife/deps_spec.rb +702 -702
- data/spec/integration/knife/diff_spec.rb +602 -602
- data/spec/integration/knife/download_spec.rb +1333 -1333
- data/spec/integration/knife/environment_compare_spec.rb +74 -74
- data/spec/integration/knife/environment_create_spec.rb +40 -40
- data/spec/integration/knife/environment_delete_spec.rb +36 -36
- data/spec/integration/knife/environment_from_file_spec.rb +115 -115
- data/spec/integration/knife/environment_list_spec.rb +41 -41
- data/spec/integration/knife/environment_show_spec.rb +76 -76
- data/spec/integration/knife/list_spec.rb +1059 -1059
- data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
- data/spec/integration/knife/node_create_spec.rb +46 -46
- data/spec/integration/knife/node_delete_spec.rb +47 -47
- data/spec/integration/knife/node_environment_set_spec.rb +45 -45
- data/spec/integration/knife/node_from_file_spec.rb +58 -58
- data/spec/integration/knife/node_list_spec.rb +44 -44
- data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
- data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
- data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
- data/spec/integration/knife/node_show_spec.rb +35 -35
- data/spec/integration/knife/raw_spec.rb +248 -248
- data/spec/integration/knife/redirection_spec.rb +54 -54
- data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
- data/spec/integration/knife/role_create_spec.rb +40 -40
- data/spec/integration/knife/role_delete_spec.rb +47 -47
- data/spec/integration/knife/role_from_file_spec.rb +95 -95
- data/spec/integration/knife/role_list_spec.rb +44 -44
- data/spec/integration/knife/role_show_spec.rb +50 -50
- data/spec/integration/knife/search_node_spec.rb +39 -39
- data/spec/integration/knife/serve_spec.rb +93 -93
- data/spec/integration/knife/show_spec.rb +167 -167
- data/spec/integration/knife/upload_spec.rb +1540 -1540
- data/spec/integration/recipes/accumulator_spec.rb +232 -232
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +171 -171
- data/spec/integration/recipes/lwrp_spec.rb +53 -53
- data/spec/integration/recipes/noop_resource_spec.rb +24 -24
- data/spec/integration/recipes/notifies_spec.rb +394 -394
- data/spec/integration/recipes/notifying_block_spec.rb +111 -111
- data/spec/integration/recipes/provider_choice.rb +37 -37
- data/spec/integration/recipes/recipe_dsl_spec.rb +1373 -1373
- data/spec/integration/recipes/remote_directory.rb +74 -74
- data/spec/integration/recipes/resource_action_spec.rb +504 -504
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +552 -552
- data/spec/integration/recipes/resource_load_spec.rb +192 -192
- data/spec/integration/recipes/unified_mode_spec.rb +876 -0
- data/spec/integration/solo/solo_spec.rb +217 -217
- data/spec/rcov.opts +2 -2
- data/spec/scripts/ssl-serve.rb +47 -47
- data/spec/spec_helper.rb +332 -328
- data/spec/stress/.DS_Store +0 -0
- 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/.DS_Store +0 -0
- data/spec/support/chef_helpers.rb +115 -115
- 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 +42 -42
- data/spec/support/lib/chef/resource/cat.rb +39 -39
- data/spec/support/lib/chef/resource/one_two_three_four.rb +36 -36
- data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
- data/spec/support/lib/chef/resource/with_state.rb +30 -30
- data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
- data/spec/support/lib/chef/resource/zen_master.rb +40 -40
- 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 +276 -268
- data/spec/support/platforms/prof/gc.rb +51 -51
- data/spec/support/platforms/prof/win32.rb +45 -45
- data/spec/support/platforms/win32/spec_service.rb +59 -59
- data/spec/support/shared/context/client.rb +305 -305
- 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 +104 -104
- data/spec/support/shared/functional/diff_disabled.rb +10 -10
- data/spec/support/shared/functional/directory_resource.rb +178 -178
- data/spec/support/shared/functional/execute_resource.rb +150 -150
- data/spec/support/shared/functional/file_resource.rb +1050 -1050
- 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 +578 -578
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
- data/spec/support/shared/functional/win32_service.rb +57 -57
- data/spec/support/shared/functional/windows_script.rb +272 -272
- data/spec/support/shared/integration/app_server_support.rb +40 -40
- data/spec/support/shared/integration/integration_helper.rb +154 -154
- data/spec/support/shared/integration/knife_support.rb +196 -196
- 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 +75 -75
- data/spec/support/shared/unit/execute_resource.rb +168 -168
- 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 +854 -854
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
- data/spec/support/shared/unit/script_resource.rb +90 -90
- 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 +191 -191
- data/spec/unit/.DS_Store +0 -0
- 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 +113 -113
- data/spec/unit/application/client_spec.rb +559 -559
- data/spec/unit/application/exit_code_spec.rb +144 -144
- data/spec/unit/application/knife_spec.rb +229 -229
- data/spec/unit/application/solo_spec.rb +225 -225
- data/spec/unit/application_spec.rb +486 -486
- data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
- data/spec/unit/audit/audit_reporter_spec.rb +435 -435
- data/spec/unit/audit/control_group_data_spec.rb +482 -482
- 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 +240 -240
- data/spec/unit/chef_fs/config_spec.rb +235 -235
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +82 -82
- data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +65 -65
- 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/repository/base_file_spec.rb +126 -126
- data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
- data/spec/unit/chef_fs/file_system_spec.rb +148 -148
- data/spec/unit/chef_fs/parallelizer.rb +477 -477
- 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 +595 -595
- 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 +210 -210
- data/spec/unit/cookbook/file_vendor_spec.rb +123 -123
- data/spec/unit/cookbook/gem_installer_spec.rb +113 -92
- data/spec/unit/cookbook/manifest_v0_spec.rb +133 -133
- data/spec/unit/cookbook/manifest_v2_spec.rb +70 -70
- data/spec/unit/cookbook/metadata_spec.rb +892 -892
- data/spec/unit/cookbook/synchronizer_spec.rb +557 -557
- data/spec/unit/cookbook/syntax_check_spec.rb +226 -226
- data/spec/unit/cookbook_loader_spec.rb +302 -302
- data/spec/unit/cookbook_manifest_spec.rb +228 -228
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_spec.rb +62 -62
- data/spec/unit/cookbook_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_version_file_specificity_spec.rb +623 -623
- data/spec/unit/cookbook_version_spec.rb +250 -250
- data/spec/unit/daemon_spec.rb +183 -183
- data/spec/unit/data_bag_item_spec.rb +392 -392
- data/spec/unit/data_bag_spec.rb +260 -260
- data/spec/unit/data_collector/messages/helpers_spec.rb +202 -202
- data/spec/unit/data_collector/messages_spec.rb +329 -329
- data/spec/unit/data_collector/resource_report_spec.rb +145 -145
- data/spec/unit/data_collector_spec.rb +876 -876
- data/spec/unit/decorator/lazy_array_spec.rb +58 -58
- data/spec/unit/decorator/lazy_spec.rb +39 -39
- data/spec/unit/decorator_spec.rb +142 -142
- data/spec/unit/deprecated_spec.rb +65 -65
- data/spec/unit/deprecation_spec.rb +129 -129
- 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 +107 -107
- data/spec/unit/dsl/declare_resource_spec.rb +374 -374
- data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
- data/spec/unit/dsl/reboot_pending_spec.rb +87 -87
- data/spec/unit/dsl/recipe_spec.rb +76 -76
- data/spec/unit/dsl/registry_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 +96 -96
- data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
- 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 +132 -132
- 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 +113 -113
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
- data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
- data/spec/unit/formatters/base_spec.rb +100 -100
- data/spec/unit/formatters/doc_spec.rb +110 -92
- data/spec/unit/formatters/error_description_spec.rb +141 -141
- 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 +302 -302
- data/spec/unit/http/api_versions_spec.rb +82 -82
- data/spec/unit/http/authenticator_spec.rb +125 -125
- data/spec/unit/http/basic_client_spec.rb +72 -72
- data/spec/unit/http/http_request_spec.rb +97 -97
- 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 +174 -174
- data/spec/unit/http/ssl_policies_spec.rb +169 -169
- data/spec/unit/http/validate_content_length_spec.rb +207 -207
- data/spec/unit/http_spec.rb +229 -229
- data/spec/unit/json_compat_spec.rb +73 -73
- 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 +972 -886
- 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 +99 -99
- data/spec/unit/knife/client_edit_spec.rb +53 -53
- data/spec/unit/knife/client_list_spec.rb +34 -34
- data/spec/unit/knife/client_reregister_spec.rb +62 -62
- data/spec/unit/knife/client_show_spec.rb +52 -52
- data/spec/unit/knife/configure_client_spec.rb +81 -81
- data/spec/unit/knife/configure_spec.rb +190 -190
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
- data/spec/unit/knife/cookbook_create_spec.rb +42 -42
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
- data/spec/unit/knife/cookbook_download_spec.rb +255 -255
- data/spec/unit/knife/cookbook_list_spec.rb +88 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
- data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
- data/spec/unit/knife/cookbook_show_spec.rb +254 -254
- data/spec/unit/knife/cookbook_test_spec.rb +84 -84
- data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
- data/spec/unit/knife/core/bootstrap_context_spec.rb +324 -324
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
- 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 +64 -64
- data/spec/unit/knife/core/ui_spec.rb +639 -639
- data/spec/unit/knife/data_bag_create_spec.rb +175 -175
- data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
- data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
- data/spec/unit/knife/data_bag_show_spec.rb +138 -138
- data/spec/unit/knife/environment_compare_spec.rb +112 -112
- data/spec/unit/knife/environment_create_spec.rb +91 -91
- data/spec/unit/knife/environment_delete_spec.rb +71 -71
- data/spec/unit/knife/environment_edit_spec.rb +79 -79
- data/spec/unit/knife/environment_from_file_spec.rb +90 -90
- data/spec/unit/knife/environment_list_spec.rb +54 -54
- data/spec/unit/knife/environment_show_spec.rb +52 -52
- data/spec/unit/knife/key_create_spec.rb +223 -223
- data/spec/unit/knife/key_delete_spec.rb +133 -133
- data/spec/unit/knife/key_edit_spec.rb +264 -264
- data/spec/unit/knife/key_helper.rb +74 -74
- data/spec/unit/knife/key_list_spec.rb +216 -216
- data/spec/unit/knife/key_show_spec.rb +126 -126
- data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
- data/spec/unit/knife/node_delete_spec.rb +77 -77
- data/spec/unit/knife/node_edit_spec.rb +116 -116
- data/spec/unit/knife/node_environment_set_spec.rb +56 -56
- data/spec/unit/knife/node_from_file_spec.rb +59 -59
- data/spec/unit/knife/node_list_spec.rb +62 -62
- data/spec/unit/knife/node_policy_set_spec.rb +122 -122
- data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
- data/spec/unit/knife/node_show_spec.rb +65 -65
- data/spec/unit/knife/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 +496 -496
- data/spec/unit/knife/ssl_check_spec.rb +256 -256
- data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
- data/spec/unit/knife/status_spec.rb +111 -111
- data/spec/unit/knife/supermarket_download_spec.rb +152 -152
- data/spec/unit/knife/supermarket_install_spec.rb +201 -201
- data/spec/unit/knife/supermarket_share_spec.rb +209 -209
- data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
- data/spec/unit/knife/tag_create_spec.rb +23 -23
- data/spec/unit/knife/tag_delete_spec.rb +25 -25
- data/spec/unit/knife/tag_list_spec.rb +23 -23
- data/spec/unit/knife/user_create_spec.rb +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 +588 -588
- data/spec/unit/log/syslog_spec.rb +51 -51
- data/spec/unit/log/winevt_spec.rb +54 -54
- data/spec/unit/log_spec.rb +24 -24
- data/spec/unit/lwrp_spec.rb +690 -690
- 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 +54 -54
- 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 +96 -96
- data/spec/unit/mixin/lazy_module_include.rb +71 -71
- data/spec/unit/mixin/openssl_helper_spec.rb +857 -857
- data/spec/unit/mixin/params_validate_spec.rb +421 -421
- data/spec/unit/mixin/path_sanity_spec.rb +92 -92
- data/spec/unit/mixin/powershell_exec_spec.rb +43 -43
- data/spec/unit/mixin/powershell_out_spec.rb +94 -94
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +84 -84
- data/spec/unit/mixin/properties_spec.rb +107 -107
- data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
- data/spec/unit/mixin/securable_spec.rb +314 -314
- data/spec/unit/mixin/shell_out_spec.rb +450 -450
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
- data/spec/unit/mixin/template_spec.rb +321 -321
- data/spec/unit/mixin/unformatter_spec.rb +61 -61
- data/spec/unit/mixin/uris_spec.rb +57 -57
- data/spec/unit/mixin/user_context_spec.rb +108 -108
- data/spec/unit/mixin/versioned_api_spec.rb +128 -128
- data/spec/unit/mixin/which.rb +160 -160
- 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 +1276 -1276
- data/spec/unit/node/immutable_collections_spec.rb +327 -327
- data/spec/unit/node/vivid_mash_spec.rb +353 -353
- data/spec/unit/node_map_spec.rb +242 -242
- data/spec/unit/node_spec.rb +1851 -1851
- data/spec/unit/org_spec.rb +196 -196
- data/spec/unit/platform/query_helpers_spec.rb +207 -207
- data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
- data/spec/unit/policy_builder/expand_node_object_spec.rb +311 -311
- data/spec/unit/policy_builder/policyfile_spec.rb +872 -872
- 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 +758 -758
- data/spec/unit/property_spec.rb +1231 -1231
- data/spec/unit/provider/apt_preference_spec.rb +87 -87
- data/spec/unit/provider/apt_repository_spec.rb +254 -254
- data/spec/unit/provider/apt_update_spec.rb +116 -116
- data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
- data/spec/unit/provider/cookbook_file_spec.rb +59 -59
- data/spec/unit/provider/cron/unix_spec.rb +144 -144
- data/spec/unit/provider/cron_spec.rb +1084 -1084
- data/spec/unit/provider/directory_spec.rb +300 -300
- data/spec/unit/provider/dsc_resource_spec.rb +343 -343
- data/spec/unit/provider/dsc_script_spec.rb +173 -173
- data/spec/unit/provider/execute_spec.rb +251 -251
- data/spec/unit/provider/file/content_spec.rb +114 -114
- data/spec/unit/provider/file_spec.rb +57 -57
- data/spec/unit/provider/git_spec.rb +782 -782
- data/spec/unit/provider/group/dscl_spec.rb +339 -339
- data/spec/unit/provider/group/gpasswd_spec.rb +119 -119
- data/spec/unit/provider/group/groupadd_spec.rb +194 -194
- data/spec/unit/provider/group/groupmod_spec.rb +136 -136
- data/spec/unit/provider/group/pw_spec.rb +141 -141
- data/spec/unit/provider/group/suse_spec.rb +90 -90
- data/spec/unit/provider/group/usermod_spec.rb +115 -115
- data/spec/unit/provider/group/windows_spec.rb +124 -124
- 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 +332 -332
- data/spec/unit/provider/ifconfig/redhat_spec.rb +83 -83
- data/spec/unit/provider/ifconfig_spec.rb +206 -206
- data/spec/unit/provider/launchd_spec.rb +268 -268
- data/spec/unit/provider/link_spec.rb +409 -409
- data/spec/unit/provider/log_spec.rb +94 -94
- data/spec/unit/provider/mdadm_spec.rb +140 -140
- data/spec/unit/provider/mount/aix_spec.rb +277 -277
- data/spec/unit/provider/mount/mount_spec.rb +527 -527
- data/spec/unit/provider/mount/solaris_spec.rb +822 -822
- data/spec/unit/provider/mount/windows_spec.rb +149 -149
- data/spec/unit/provider/mount_spec.rb +191 -191
- data/spec/unit/provider/ohai_spec.rb +84 -84
- data/spec/unit/provider/osx_profile_spec.rb +257 -257
- data/spec/unit/provider/package/apt_spec.rb +610 -610
- data/spec/unit/provider/package/bff_spec.rb +187 -187
- data/spec/unit/provider/package/cab_spec.rb +272 -272
- data/spec/unit/provider/package/chocolatey_spec.rb +507 -507
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
- data/spec/unit/provider/package/dpkg_spec.rb +287 -287
- 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 +293 -293
- data/spec/unit/provider/package/ips_spec.rb +233 -233
- data/spec/unit/provider/package/macports_spec.rb +203 -203
- data/spec/unit/provider/package/msu_spec.rb +283 -283
- 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 +179 -179
- data/spec/unit/provider/package/powershell_spec.rb +501 -501
- data/spec/unit/provider/package/rpm_spec.rb +429 -429
- data/spec/unit/provider/package/rubygems_spec.rb +981 -981
- 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 +201 -201
- data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +78 -78
- data/spec/unit/provider/package/windows_spec.rb +463 -463
- data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -29
- data/spec/unit/provider/package/yum/yum_cache_spec.rb +109 -109
- data/spec/unit/provider/package/zypper_spec.rb +487 -478
- data/spec/unit/provider/package_spec.rb +1013 -1013
- data/spec/unit/provider/powershell_script_spec.rb +116 -116
- data/spec/unit/provider/registry_key_spec.rb +487 -487
- data/spec/unit/provider/remote_directory_spec.rb +236 -236
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
- data/spec/unit/provider/remote_file/content_spec.rb +253 -253
- data/spec/unit/provider/remote_file/fetcher_spec.rb +95 -95
- data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
- data/spec/unit/provider/remote_file/http_spec.rb +324 -324
- data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
- data/spec/unit/provider/remote_file/network_file_spec.rb +50 -50
- data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
- data/spec/unit/provider/remote_file_spec.rb +62 -62
- data/spec/unit/provider/route_spec.rb +270 -270
- data/spec/unit/provider/ruby_block_spec.rb +45 -45
- data/spec/unit/provider/script_spec.rb +157 -157
- 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 +249 -249
- data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
- 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 +340 -340
- data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
- data/spec/unit/provider/service/redhat_spec.rb +250 -250
- data/spec/unit/provider/service/simple_service_spec.rb +169 -169
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +292 -292
- data/spec/unit/provider/service/systemd_service_spec.rb +364 -364
- data/spec/unit/provider/service/upstart_service_spec.rb +351 -351
- data/spec/unit/provider/service/windows_spec.rb +910 -910
- data/spec/unit/provider/service_spec.rb +168 -168
- data/spec/unit/provider/subversion_spec.rb +361 -361
- data/spec/unit/provider/systemd_unit_spec.rb +967 -967
- data/spec/unit/provider/template/content_spec.rb +169 -169
- data/spec/unit/provider/template_spec.rb +87 -87
- data/spec/unit/provider/user/aix_spec.rb +96 -96
- data/spec/unit/provider/user/dscl_spec.rb +920 -920
- data/spec/unit/provider/user/linux_spec.rb +74 -74
- data/spec/unit/provider/user/pw_spec.rb +235 -235
- data/spec/unit/provider/user/solaris_spec.rb +177 -177
- data/spec/unit/provider/user/windows_spec.rb +197 -197
- data/spec/unit/provider/user_spec.rb +478 -478
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
- data/spec/unit/provider/windows_env_spec.rb +400 -400
- data/spec/unit/provider/windows_path_spec.rb +65 -65
- data/spec/unit/provider/windows_task_spec.rb +430 -430
- data/spec/unit/provider/yum_repository_spec.rb +35 -35
- data/spec/unit/provider/zypper_repository_spec.rb +126 -126
- data/spec/unit/provider_resolver_spec.rb +923 -923
- data/spec/unit/provider_spec.rb +201 -201
- data/spec/unit/pure_application_spec.rb +32 -32
- data/spec/unit/recipe_spec.rb +589 -589
- data/spec/unit/resource/apt_package_spec.rb +56 -56
- data/spec/unit/resource/apt_preference_spec.rb +57 -57
- data/spec/unit/resource/apt_repository_spec.rb +92 -92
- data/spec/unit/resource/apt_update_spec.rb +62 -62
- data/spec/unit/resource/bash_spec.rb +45 -45
- data/spec/unit/resource/batch_spec.rb +46 -46
- data/spec/unit/resource/bff_package_spec.rb +51 -51
- data/spec/unit/resource/breakpoint_spec.rb +64 -64
- data/spec/unit/resource/build_essential_spec.rb +43 -43
- data/spec/unit/resource/cab_package_spec.rb +64 -64
- data/spec/unit/resource/chef_gem_spec.rb +125 -125
- data/spec/unit/resource/chef_handler_spec.rb +40 -40
- data/spec/unit/resource/chocolatey_config_spec.rb +98 -98
- data/spec/unit/resource/chocolatey_package_spec.rb +91 -91
- data/spec/unit/resource/chocolatey_source_spec.rb +102 -102
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
- data/spec/unit/resource/conditional_spec.rb +254 -254
- data/spec/unit/resource/cookbook_file_spec.rb +93 -93
- data/spec/unit/resource/cron_access_spec.rb +36 -36
- data/spec/unit/resource/cron_d_spec.rb +90 -90
- data/spec/unit/resource/cron_spec.rb +173 -173
- data/spec/unit/resource/csh_spec.rb +45 -45
- data/spec/unit/resource/directory_spec.rb +69 -69
- data/spec/unit/resource/dmg_package_spec.rb +39 -39
- data/spec/unit/resource/dnf_package_spec.rb +108 -108
- data/spec/unit/resource/dpkg_package_spec.rb +50 -50
- data/spec/unit/resource/dsc_resource_spec.rb +102 -102
- data/spec/unit/resource/dsc_script_spec.rb +134 -134
- data/spec/unit/resource/execute_spec.rb +277 -277
- data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
- data/spec/unit/resource/file/verification_spec.rb +147 -147
- data/spec/unit/resource/file_spec.rb +127 -127
- data/spec/unit/resource/freebsd_package_spec.rb +103 -103
- data/spec/unit/resource/gem_package_spec.rb +67 -67
- data/spec/unit/resource/git_spec.rb +62 -62
- data/spec/unit/resource/group_spec.rb +165 -165
- data/spec/unit/resource/homebrew_cask_spec.rb +40 -40
- data/spec/unit/resource/homebrew_package_spec.rb +68 -68
- data/spec/unit/resource/homebrew_tap_spec.rb +44 -44
- data/spec/unit/resource/hostname_spec.rb +47 -47
- data/spec/unit/resource/http_request_spec.rb +65 -65
- data/spec/unit/resource/ifconfig_spec.rb +109 -109
- data/spec/unit/resource/ips_package_spec.rb +54 -54
- data/spec/unit/resource/kernel_module_spec.rb +48 -48
- data/spec/unit/resource/ksh_spec.rb +45 -45
- data/spec/unit/resource/launchd_spec.rb +40 -40
- data/spec/unit/resource/link_spec.rb +124 -124
- data/spec/unit/resource/locale_spec.rb +60 -60
- data/spec/unit/resource/log_spec.rb +64 -64
- data/spec/unit/resource/macos_user_defaults_spec.rb +35 -35
- data/spec/unit/resource/macports_package_spec.rb +51 -51
- data/spec/unit/resource/mdadm_spec.rb +104 -104
- data/spec/unit/resource/mount_spec.rb +178 -178
- data/spec/unit/resource/msu_package_spec.rb +63 -63
- data/spec/unit/resource/ohai_hint_spec.rb +44 -44
- data/spec/unit/resource/ohai_spec.rb +62 -62
- data/spec/unit/resource/openbsd_package_spec.rb +58 -58
- data/spec/unit/resource/openssl_dhparam.rb +61 -61
- data/spec/unit/resource/openssl_ec_private_key_spec.rb +64 -64
- data/spec/unit/resource/openssl_ec_public_key_spec.rb +43 -43
- data/spec/unit/resource/openssl_rsa_private_key_spec.rb +64 -64
- data/spec/unit/resource/openssl_rsa_public_key_spec.rb +43 -43
- data/spec/unit/resource/openssl_x509_certificate_spec.rb +72 -72
- data/spec/unit/resource/openssl_x509_crl_spec.rb +61 -61
- data/spec/unit/resource/openssl_x509_request.rb +68 -68
- data/spec/unit/resource/osx_profile_spec.rb +60 -60
- data/spec/unit/resource/package_spec.rb +108 -108
- data/spec/unit/resource/pacman_package_spec.rb +46 -46
- data/spec/unit/resource/paludis_package_spec.rb +36 -36
- data/spec/unit/resource/perl_spec.rb +44 -44
- data/spec/unit/resource/portage_package_spec.rb +46 -46
- data/spec/unit/resource/powershell_package_source_spec.rb +219 -219
- data/spec/unit/resource/powershell_package_spec.rb +98 -98
- data/spec/unit/resource/powershell_script_spec.rb +136 -136
- data/spec/unit/resource/python_spec.rb +40 -40
- data/spec/unit/resource/reboot_spec.rb +47 -47
- data/spec/unit/resource/registry_key_spec.rb +215 -215
- data/spec/unit/resource/remote_directory_spec.rb +105 -105
- data/spec/unit/resource/remote_file_spec.rb +220 -220
- data/spec/unit/resource/resource_notification_spec.rb +169 -169
- data/spec/unit/resource/rhsm_errata_level_spec.rb +50 -50
- data/spec/unit/resource/rhsm_errata_spec.rb +39 -39
- data/spec/unit/resource/rhsm_register_spec.rb +204 -204
- data/spec/unit/resource/rhsm_repo_spec.rb +64 -64
- data/spec/unit/resource/rhsm_subscription_spec.rb +98 -98
- data/spec/unit/resource/route_spec.rb +95 -95
- data/spec/unit/resource/rpm_package_spec.rb +62 -62
- data/spec/unit/resource/ruby_block_spec.rb +58 -58
- data/spec/unit/resource/ruby_spec.rb +39 -39
- data/spec/unit/resource/scm_spec.rb +173 -173
- data/spec/unit/resource/script_spec.rb +52 -52
- data/spec/unit/resource/service_spec.rb +206 -206
- data/spec/unit/resource/smartos_package_spec.rb +52 -52
- data/spec/unit/resource/solaris_package_spec.rb +54 -54
- data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +55 -55
- data/spec/unit/resource/subversion_spec.rb +91 -91
- data/spec/unit/resource/sudo_spec.rb +99 -99
- data/spec/unit/resource/swap_file_spec.rb +39 -39
- data/spec/unit/resource/sysctl_spec.rb +54 -54
- data/spec/unit/resource/systemd_unit_spec.rb +130 -130
- data/spec/unit/resource/template_spec.rb +222 -222
- data/spec/unit/resource/timezone.rb +39 -39
- data/spec/unit/resource/user_spec.rb +122 -122
- data/spec/unit/resource/windows_ad_join_spec.rb +51 -51
- data/spec/unit/resource/windows_auto_run_spec.rb +50 -50
- data/spec/unit/resource/windows_certificate.rb +83 -83
- data/spec/unit/resource/windows_env_spec.rb +75 -75
- data/spec/unit/resource/windows_feature.rb +64 -64
- data/spec/unit/resource/windows_feature_dism.rb +72 -72
- data/spec/unit/resource/windows_feature_powershell.rb +72 -72
- data/spec/unit/resource/windows_firewall_rule_spec.rb +401 -401
- data/spec/unit/resource/windows_font_spec.rb +43 -43
- data/spec/unit/resource/windows_package_spec.rb +105 -105
- data/spec/unit/resource/windows_pagefile_spec.rb +49 -49
- data/spec/unit/resource/windows_path_spec.rb +40 -40
- data/spec/unit/resource/windows_printer_port_spec.rb +62 -62
- data/spec/unit/resource/windows_printer_spec.rb +52 -52
- data/spec/unit/resource/windows_service_spec.rb +93 -93
- data/spec/unit/resource/windows_share.rb +39 -39
- data/spec/unit/resource/windows_shortcut_spec.rb +38 -38
- data/spec/unit/resource/windows_task_spec.rb +399 -399
- data/spec/unit/resource/windows_workgroup_spec.rb +74 -74
- data/spec/unit/resource/yum_package_spec.rb +150 -150
- data/spec/unit/resource/yum_repository_spec.rb +152 -152
- data/spec/unit/resource/zypper_package_spec.rb +51 -51
- data/spec/unit/resource/zypper_repository_spec.rb +115 -115
- 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 +244 -244
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
- data/spec/unit/resource_collection_spec.rb +408 -408
- data/spec/unit/resource_definition_spec.rb +117 -117
- data/spec/unit/resource_inspector_spec.rb +60 -60
- data/spec/unit/resource_reporter_spec.rb +782 -782
- data/spec/unit/resource_resolver_spec.rb +52 -52
- data/spec/unit/resource_spec.rb +1195 -1195
- 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 +224 -224
- 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 +197 -197
- 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 +398 -398
- data/spec/unit/scan_access_control_spec.rb +183 -183
- data/spec/unit/search/query_spec.rb +283 -283
- data/spec/unit/server_api_spec.rb +124 -124
- data/spec/unit/server_api_versions_spec.rb +66 -66
- 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 +250 -250
- 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 +248 -248
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
- data/spec/unit/util/dsc/resource_store.rb +78 -78
- 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 +157 -157
- data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
- data/spec/unit/util/windows/logon_session_spec.rb +285 -285
- 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/version_string_spec.rb +79 -79
- data/spec/unit/win32/error_spec.rb +77 -77
- data/spec/unit/win32/link_spec.rb +73 -73
- data/spec/unit/win32/registry_spec.rb +394 -394
- data/spec/unit/win32/security_spec.rb +134 -134
- data/spec/unit/windows_service_spec.rb +118 -118
- data/tasks/.DS_Store +0 -0
- data/tasks/announce.rb +58 -58
- data/tasks/bin/run_external_test +29 -29
- data/tasks/dependencies.rb +58 -58
- data/tasks/maintainers.rb +211 -211
- data/tasks/rspec.rb +90 -90
- data/tasks/templates/prerelease.md.erb +35 -35
- data/tasks/templates/release.md.erb +34 -34
- metadata +34 -6
@@ -1,167 +1,167 @@
|
|
1
|
-
#
|
2
|
-
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
-
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require "support/shared/integration/integration_helper"
|
19
|
-
require "support/shared/context/config"
|
20
|
-
require "chef/knife/show"
|
21
|
-
|
22
|
-
describe "knife show", :workstation do
|
23
|
-
include IntegrationSupport
|
24
|
-
include KnifeSupport
|
25
|
-
|
26
|
-
include_context "default config options"
|
27
|
-
|
28
|
-
when_the_chef_server "has one of each thing" do
|
29
|
-
before do
|
30
|
-
client "x", "{}"
|
31
|
-
cookbook "x", "1.0.0"
|
32
|
-
data_bag "x", { "y" => "{}" }
|
33
|
-
environment "x", "{}"
|
34
|
-
node "x", "{}"
|
35
|
-
role "x", "{}"
|
36
|
-
user "x", "{}"
|
37
|
-
end
|
38
|
-
|
39
|
-
when_the_repository "also has one of each thing" do
|
40
|
-
before do
|
41
|
-
file "clients/x.json", { "foo" => "bar" }
|
42
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
43
|
-
file "data_bags/x/y.json", { "foo" => "bar" }
|
44
|
-
file "environments/_default.json", { "foo" => "bar" }
|
45
|
-
file "environments/x.json", { "foo" => "bar" }
|
46
|
-
file "nodes/x.json", { "foo" => "bar" }
|
47
|
-
file "roles/x.json", { "foo" => "bar" }
|
48
|
-
file "users/x.json", { "foo" => "bar" }
|
49
|
-
end
|
50
|
-
|
51
|
-
it "knife show /cookbooks/x/metadata.rb shows the remote version" do
|
52
|
-
knife("show /cookbooks/x/metadata.rb").should_succeed <<~EOM
|
53
|
-
/cookbooks/x/metadata.rb:
|
54
|
-
name "x"; version "1.0.0"
|
55
|
-
EOM
|
56
|
-
end
|
57
|
-
it "knife show --local /cookbooks/x/metadata.rb shows the local version" do
|
58
|
-
knife("show --local /cookbooks/x/metadata.rb").should_succeed <<~EOM
|
59
|
-
/cookbooks/x/metadata.rb:
|
60
|
-
name "x"; version "1.0.0"
|
61
|
-
EOM
|
62
|
-
end
|
63
|
-
it "knife show /data_bags/x/y.json shows the remote version" do
|
64
|
-
knife("show /data_bags/x/y.json").should_succeed <<~EOM
|
65
|
-
/data_bags/x/y.json:
|
66
|
-
{
|
67
|
-
"id": "y"
|
68
|
-
}
|
69
|
-
EOM
|
70
|
-
end
|
71
|
-
it "knife show --local /data_bags/x/y.json shows the local version" do
|
72
|
-
knife("show --local /data_bags/x/y.json").should_succeed <<~EOM
|
73
|
-
/data_bags/x/y.json:
|
74
|
-
{
|
75
|
-
"foo": "bar"
|
76
|
-
}
|
77
|
-
EOM
|
78
|
-
end
|
79
|
-
it "knife show /environments/x.json shows the remote version", skip: (RUBY_VERSION < "1.9") do
|
80
|
-
knife("show /environments/x.json").should_succeed <<~EOM
|
81
|
-
/environments/x.json:
|
82
|
-
{
|
83
|
-
"name": "x"
|
84
|
-
}
|
85
|
-
EOM
|
86
|
-
end
|
87
|
-
it "knife show --local /environments/x.json shows the local version" do
|
88
|
-
knife("show --local /environments/x.json").should_succeed <<~EOM
|
89
|
-
/environments/x.json:
|
90
|
-
{
|
91
|
-
"foo": "bar"
|
92
|
-
}
|
93
|
-
EOM
|
94
|
-
end
|
95
|
-
it "knife show /roles/x.json shows the remote version", skip: (RUBY_VERSION < "1.9") do
|
96
|
-
knife("show /roles/x.json").should_succeed <<~EOM
|
97
|
-
/roles/x.json:
|
98
|
-
{
|
99
|
-
"name": "x"
|
100
|
-
}
|
101
|
-
EOM
|
102
|
-
end
|
103
|
-
it "knife show --local /roles/x.json shows the local version" do
|
104
|
-
knife("show --local /roles/x.json").should_succeed <<~EOM
|
105
|
-
/roles/x.json:
|
106
|
-
{
|
107
|
-
"foo": "bar"
|
108
|
-
}
|
109
|
-
EOM
|
110
|
-
end
|
111
|
-
# show directory
|
112
|
-
it "knife show /data_bags/x fails" do
|
113
|
-
knife("show /data_bags/x").should_fail "ERROR: /data_bags/x: is a directory\n"
|
114
|
-
end
|
115
|
-
it "knife show --local /data_bags/x fails" do
|
116
|
-
knife("show --local /data_bags/x").should_fail "ERROR: /data_bags/x: is a directory\n"
|
117
|
-
end
|
118
|
-
# show nonexistent file
|
119
|
-
it "knife show /environments/nonexistent.json fails" do
|
120
|
-
knife("show /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
|
121
|
-
end
|
122
|
-
it "knife show --local /environments/nonexistent.json fails" do
|
123
|
-
knife("show --local /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
when_the_chef_server "has a hash with multiple keys" do
|
129
|
-
before do
|
130
|
-
environment "x", {
|
131
|
-
"default_attributes" => { "foo" => "bar" },
|
132
|
-
"cookbook_versions" => { "blah" => "= 1.0.0" },
|
133
|
-
"override_attributes" => { "x" => "y" },
|
134
|
-
"description" => "woo",
|
135
|
-
"name" => "x",
|
136
|
-
}
|
137
|
-
end
|
138
|
-
it "knife show shows the attributes in a predetermined order", skip: (RUBY_VERSION < "1.9") do
|
139
|
-
knife("show /environments/x.json").should_succeed <<~EOM
|
140
|
-
/environments/x.json:
|
141
|
-
{
|
142
|
-
"name": "x",
|
143
|
-
"description": "woo",
|
144
|
-
"cookbook_versions": {
|
145
|
-
"blah": "= 1.0.0"
|
146
|
-
},
|
147
|
-
"default_attributes": {
|
148
|
-
"foo": "bar"
|
149
|
-
},
|
150
|
-
"override_attributes": {
|
151
|
-
"x": "y"
|
152
|
-
}
|
153
|
-
}
|
154
|
-
EOM
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
when_the_repository "has an environment with bad JSON" do
|
159
|
-
before { file "environments/x.json", "{" }
|
160
|
-
it "knife show succeeds" do
|
161
|
-
knife("show --local /environments/x.json").should_succeed <<~EOM
|
162
|
-
/environments/x.json:
|
163
|
-
{
|
164
|
-
EOM
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
+
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require "support/shared/integration/integration_helper"
|
19
|
+
require "support/shared/context/config"
|
20
|
+
require "chef/knife/show"
|
21
|
+
|
22
|
+
describe "knife show", :workstation do
|
23
|
+
include IntegrationSupport
|
24
|
+
include KnifeSupport
|
25
|
+
|
26
|
+
include_context "default config options"
|
27
|
+
|
28
|
+
when_the_chef_server "has one of each thing" do
|
29
|
+
before do
|
30
|
+
client "x", "{}"
|
31
|
+
cookbook "x", "1.0.0"
|
32
|
+
data_bag "x", { "y" => "{}" }
|
33
|
+
environment "x", "{}"
|
34
|
+
node "x", "{}"
|
35
|
+
role "x", "{}"
|
36
|
+
user "x", "{}"
|
37
|
+
end
|
38
|
+
|
39
|
+
when_the_repository "also has one of each thing" do
|
40
|
+
before do
|
41
|
+
file "clients/x.json", { "foo" => "bar" }
|
42
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
43
|
+
file "data_bags/x/y.json", { "foo" => "bar" }
|
44
|
+
file "environments/_default.json", { "foo" => "bar" }
|
45
|
+
file "environments/x.json", { "foo" => "bar" }
|
46
|
+
file "nodes/x.json", { "foo" => "bar" }
|
47
|
+
file "roles/x.json", { "foo" => "bar" }
|
48
|
+
file "users/x.json", { "foo" => "bar" }
|
49
|
+
end
|
50
|
+
|
51
|
+
it "knife show /cookbooks/x/metadata.rb shows the remote version" do
|
52
|
+
knife("show /cookbooks/x/metadata.rb").should_succeed <<~EOM
|
53
|
+
/cookbooks/x/metadata.rb:
|
54
|
+
name "x"; version "1.0.0"
|
55
|
+
EOM
|
56
|
+
end
|
57
|
+
it "knife show --local /cookbooks/x/metadata.rb shows the local version" do
|
58
|
+
knife("show --local /cookbooks/x/metadata.rb").should_succeed <<~EOM
|
59
|
+
/cookbooks/x/metadata.rb:
|
60
|
+
name "x"; version "1.0.0"
|
61
|
+
EOM
|
62
|
+
end
|
63
|
+
it "knife show /data_bags/x/y.json shows the remote version" do
|
64
|
+
knife("show /data_bags/x/y.json").should_succeed <<~EOM
|
65
|
+
/data_bags/x/y.json:
|
66
|
+
{
|
67
|
+
"id": "y"
|
68
|
+
}
|
69
|
+
EOM
|
70
|
+
end
|
71
|
+
it "knife show --local /data_bags/x/y.json shows the local version" do
|
72
|
+
knife("show --local /data_bags/x/y.json").should_succeed <<~EOM
|
73
|
+
/data_bags/x/y.json:
|
74
|
+
{
|
75
|
+
"foo": "bar"
|
76
|
+
}
|
77
|
+
EOM
|
78
|
+
end
|
79
|
+
it "knife show /environments/x.json shows the remote version", skip: (RUBY_VERSION < "1.9") do
|
80
|
+
knife("show /environments/x.json").should_succeed <<~EOM
|
81
|
+
/environments/x.json:
|
82
|
+
{
|
83
|
+
"name": "x"
|
84
|
+
}
|
85
|
+
EOM
|
86
|
+
end
|
87
|
+
it "knife show --local /environments/x.json shows the local version" do
|
88
|
+
knife("show --local /environments/x.json").should_succeed <<~EOM
|
89
|
+
/environments/x.json:
|
90
|
+
{
|
91
|
+
"foo": "bar"
|
92
|
+
}
|
93
|
+
EOM
|
94
|
+
end
|
95
|
+
it "knife show /roles/x.json shows the remote version", skip: (RUBY_VERSION < "1.9") do
|
96
|
+
knife("show /roles/x.json").should_succeed <<~EOM
|
97
|
+
/roles/x.json:
|
98
|
+
{
|
99
|
+
"name": "x"
|
100
|
+
}
|
101
|
+
EOM
|
102
|
+
end
|
103
|
+
it "knife show --local /roles/x.json shows the local version" do
|
104
|
+
knife("show --local /roles/x.json").should_succeed <<~EOM
|
105
|
+
/roles/x.json:
|
106
|
+
{
|
107
|
+
"foo": "bar"
|
108
|
+
}
|
109
|
+
EOM
|
110
|
+
end
|
111
|
+
# show directory
|
112
|
+
it "knife show /data_bags/x fails" do
|
113
|
+
knife("show /data_bags/x").should_fail "ERROR: /data_bags/x: is a directory\n"
|
114
|
+
end
|
115
|
+
it "knife show --local /data_bags/x fails" do
|
116
|
+
knife("show --local /data_bags/x").should_fail "ERROR: /data_bags/x: is a directory\n"
|
117
|
+
end
|
118
|
+
# show nonexistent file
|
119
|
+
it "knife show /environments/nonexistent.json fails" do
|
120
|
+
knife("show /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
|
121
|
+
end
|
122
|
+
it "knife show --local /environments/nonexistent.json fails" do
|
123
|
+
knife("show --local /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
when_the_chef_server "has a hash with multiple keys" do
|
129
|
+
before do
|
130
|
+
environment "x", {
|
131
|
+
"default_attributes" => { "foo" => "bar" },
|
132
|
+
"cookbook_versions" => { "blah" => "= 1.0.0" },
|
133
|
+
"override_attributes" => { "x" => "y" },
|
134
|
+
"description" => "woo",
|
135
|
+
"name" => "x",
|
136
|
+
}
|
137
|
+
end
|
138
|
+
it "knife show shows the attributes in a predetermined order", skip: (RUBY_VERSION < "1.9") do
|
139
|
+
knife("show /environments/x.json").should_succeed <<~EOM
|
140
|
+
/environments/x.json:
|
141
|
+
{
|
142
|
+
"name": "x",
|
143
|
+
"description": "woo",
|
144
|
+
"cookbook_versions": {
|
145
|
+
"blah": "= 1.0.0"
|
146
|
+
},
|
147
|
+
"default_attributes": {
|
148
|
+
"foo": "bar"
|
149
|
+
},
|
150
|
+
"override_attributes": {
|
151
|
+
"x": "y"
|
152
|
+
}
|
153
|
+
}
|
154
|
+
EOM
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
when_the_repository "has an environment with bad JSON" do
|
159
|
+
before { file "environments/x.json", "{" }
|
160
|
+
it "knife show succeeds" do
|
161
|
+
knife("show --local /environments/x.json").should_succeed <<~EOM
|
162
|
+
/environments/x.json:
|
163
|
+
{
|
164
|
+
EOM
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -1,1540 +1,1540 @@
|
|
1
|
-
#
|
2
|
-
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
-
# Copyright:: Copyright 2013-2017, Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require "support/shared/integration/integration_helper"
|
19
|
-
require "chef/knife/upload"
|
20
|
-
require "chef/knife/diff"
|
21
|
-
require "chef/knife/raw"
|
22
|
-
require "chef/json_compat"
|
23
|
-
|
24
|
-
describe "knife upload", :workstation do
|
25
|
-
include IntegrationSupport
|
26
|
-
include KnifeSupport
|
27
|
-
|
28
|
-
context "without versioned cookbooks" do
|
29
|
-
|
30
|
-
when_the_chef_server "has one of each thing" do
|
31
|
-
|
32
|
-
before do
|
33
|
-
client "x", {}
|
34
|
-
cookbook "x", "1.0.0"
|
35
|
-
data_bag "x", { "y" => {} }
|
36
|
-
environment "x", {}
|
37
|
-
node "x", {}
|
38
|
-
role "x", {}
|
39
|
-
user "x", {}
|
40
|
-
end
|
41
|
-
|
42
|
-
when_the_repository "has only top-level directories" do
|
43
|
-
before do
|
44
|
-
directory "clients"
|
45
|
-
directory "cookbooks"
|
46
|
-
directory "data_bags"
|
47
|
-
directory "environments"
|
48
|
-
directory "nodes"
|
49
|
-
directory "roles"
|
50
|
-
directory "users"
|
51
|
-
end
|
52
|
-
|
53
|
-
it "knife upload does nothing" do
|
54
|
-
knife("upload /").should_succeed ""
|
55
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
56
|
-
D\t/clients/chef-validator.json
|
57
|
-
D\t/clients/chef-webui.json
|
58
|
-
D\t/clients/x.json
|
59
|
-
D\t/cookbooks/x
|
60
|
-
D\t/data_bags/x
|
61
|
-
D\t/environments/_default.json
|
62
|
-
D\t/environments/x.json
|
63
|
-
D\t/nodes/x.json
|
64
|
-
D\t/roles/x.json
|
65
|
-
D\t/users/admin.json
|
66
|
-
D\t/users/x.json
|
67
|
-
EOM
|
68
|
-
end
|
69
|
-
|
70
|
-
it "knife upload --purge deletes everything" do
|
71
|
-
knife("upload --purge /").should_succeed(<<~EOM, stderr: "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
|
72
|
-
Deleted extra entry /clients/chef-validator.json (purge is on)
|
73
|
-
Deleted extra entry /clients/chef-webui.json (purge is on)
|
74
|
-
Deleted extra entry /clients/x.json (purge is on)
|
75
|
-
Deleted extra entry /cookbooks/x (purge is on)
|
76
|
-
Deleted extra entry /data_bags/x (purge is on)
|
77
|
-
Deleted extra entry /environments/x.json (purge is on)
|
78
|
-
Deleted extra entry /nodes/x.json (purge is on)
|
79
|
-
Deleted extra entry /roles/x.json (purge is on)
|
80
|
-
Deleted extra entry /users/admin.json (purge is on)
|
81
|
-
Deleted extra entry /users/x.json (purge is on)
|
82
|
-
EOM
|
83
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
84
|
-
D\t/environments/_default.json
|
85
|
-
EOM
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
when_the_repository "has an identical copy of each thing" do
|
90
|
-
|
91
|
-
before do
|
92
|
-
file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
93
|
-
file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
94
|
-
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
95
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
96
|
-
file "data_bags/x/y.json", {}
|
97
|
-
file "environments/_default.json", { "description" => "The default Chef environment" }
|
98
|
-
file "environments/x.json", {}
|
99
|
-
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
100
|
-
file "roles/x.json", {}
|
101
|
-
file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
102
|
-
file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
103
|
-
end
|
104
|
-
|
105
|
-
it "knife upload makes no changes" do
|
106
|
-
knife("upload /cookbooks/x").should_succeed ""
|
107
|
-
knife("diff --name-status /").should_succeed ""
|
108
|
-
end
|
109
|
-
|
110
|
-
it "knife upload --purge makes no changes" do
|
111
|
-
knife("upload --purge /").should_succeed ""
|
112
|
-
knife("diff --name-status /").should_succeed ""
|
113
|
-
end
|
114
|
-
|
115
|
-
context "except the role file" do
|
116
|
-
before do
|
117
|
-
file "roles/x.json", { "description" => "blarghle" }
|
118
|
-
end
|
119
|
-
|
120
|
-
it "knife upload changes the role" do
|
121
|
-
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
122
|
-
knife("diff --name-status /").should_succeed ""
|
123
|
-
end
|
124
|
-
it "knife upload --no-diff does not change the role" do
|
125
|
-
knife("upload --no-diff /").should_succeed ""
|
126
|
-
knife("diff --name-status /").should_succeed "M\t/roles/x.json\n"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context "except the role file is textually different, but not ACTUALLY different" do
|
131
|
-
before do
|
132
|
-
file "roles/x.json", <<~EOM
|
133
|
-
{
|
134
|
-
"chef_type": "role",
|
135
|
-
"default_attributes": {
|
136
|
-
},
|
137
|
-
"env_run_lists": {
|
138
|
-
},
|
139
|
-
"json_class": "Chef::Role",
|
140
|
-
"name": "x",
|
141
|
-
"description": "",
|
142
|
-
"override_attributes": {
|
143
|
-
},
|
144
|
-
"run_list": [
|
145
|
-
|
146
|
-
]
|
147
|
-
}
|
148
|
-
EOM
|
149
|
-
end
|
150
|
-
|
151
|
-
it "knife upload / does not change anything" do
|
152
|
-
knife("upload /").should_succeed ""
|
153
|
-
knife("diff --name-status /").should_succeed ""
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
context "the role is in ruby" do
|
158
|
-
before do
|
159
|
-
file "roles/x.rb", <<~EOM
|
160
|
-
name "x"
|
161
|
-
description "blargle"
|
162
|
-
EOM
|
163
|
-
end
|
164
|
-
|
165
|
-
it "knife upload changes the role" do
|
166
|
-
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
167
|
-
knife("diff --name-status /").should_succeed ""
|
168
|
-
end
|
169
|
-
|
170
|
-
it "knife upload --no-diff does not change the role" do
|
171
|
-
knife("upload --no-diff /").should_succeed ""
|
172
|
-
knife("diff --name-status /").should_succeed "M\t/roles/x.rb\n"
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
context "when cookbook metadata has a self-dependency" do
|
177
|
-
before do
|
178
|
-
file "cookbooks/x/metadata.rb", "name 'x'; version '1.0.0'; depends 'x'"
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should fail in Chef 13" do
|
182
|
-
expect { knife("upload /cookbooks") }.to raise_error RuntimeError, /Cookbook depends on itself/
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context "as well as one extra copy of each thing" do
|
187
|
-
before do
|
188
|
-
file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
189
|
-
file "cookbooks/x/blah.rb", ""
|
190
|
-
file "cookbooks/y/metadata.rb", cb_metadata("y", "1.0.0")
|
191
|
-
file "data_bags/x/z.json", {}
|
192
|
-
file "data_bags/y/zz.json", {}
|
193
|
-
file "environments/y.json", {}
|
194
|
-
file "nodes/y.json", {}
|
195
|
-
file "roles/y.json", {}
|
196
|
-
file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
197
|
-
end
|
198
|
-
|
199
|
-
it "knife upload adds the new files" do
|
200
|
-
knife("upload /").should_succeed <<~EOM
|
201
|
-
Created /clients/y.json
|
202
|
-
Updated /cookbooks/x
|
203
|
-
Created /cookbooks/y
|
204
|
-
Created /data_bags/x/z.json
|
205
|
-
Created /data_bags/y
|
206
|
-
Created /data_bags/y/zz.json
|
207
|
-
Created /environments/y.json
|
208
|
-
Created /nodes/y.json
|
209
|
-
Created /roles/y.json
|
210
|
-
Created /users/y.json
|
211
|
-
EOM
|
212
|
-
knife("diff /").should_succeed ""
|
213
|
-
end
|
214
|
-
|
215
|
-
it "knife upload --no-diff adds the new files" do
|
216
|
-
knife("upload --no-diff /").should_succeed <<~EOM
|
217
|
-
Created /clients/y.json
|
218
|
-
Updated /cookbooks/x
|
219
|
-
Created /cookbooks/y
|
220
|
-
Created /data_bags/x/z.json
|
221
|
-
Created /data_bags/y
|
222
|
-
Created /data_bags/y/zz.json
|
223
|
-
Created /environments/y.json
|
224
|
-
Created /nodes/y.json
|
225
|
-
Created /roles/y.json
|
226
|
-
Created /users/y.json
|
227
|
-
EOM
|
228
|
-
knife("diff --name-status /").should_succeed ""
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
when_the_repository "is empty" do
|
234
|
-
it "knife upload does nothing" do
|
235
|
-
knife("upload /").should_succeed ""
|
236
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
237
|
-
D\t/clients
|
238
|
-
D\t/cookbooks
|
239
|
-
D\t/data_bags
|
240
|
-
D\t/environments
|
241
|
-
D\t/nodes
|
242
|
-
D\t/roles
|
243
|
-
D\t/users
|
244
|
-
EOM
|
245
|
-
end
|
246
|
-
|
247
|
-
it "knife upload --purge deletes nothing" do
|
248
|
-
knife("upload --purge /").should_fail <<~EOM
|
249
|
-
ERROR: /clients cannot be deleted.
|
250
|
-
ERROR: /cookbooks cannot be deleted.
|
251
|
-
ERROR: /data_bags cannot be deleted.
|
252
|
-
ERROR: /environments cannot be deleted.
|
253
|
-
ERROR: /nodes cannot be deleted.
|
254
|
-
ERROR: /roles cannot be deleted.
|
255
|
-
ERROR: /users cannot be deleted.
|
256
|
-
EOM
|
257
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
258
|
-
D\t/clients
|
259
|
-
D\t/cookbooks
|
260
|
-
D\t/data_bags
|
261
|
-
D\t/environments
|
262
|
-
D\t/nodes
|
263
|
-
D\t/roles
|
264
|
-
D\t/users
|
265
|
-
EOM
|
266
|
-
end
|
267
|
-
|
268
|
-
context "when current directory is top level" do
|
269
|
-
before do
|
270
|
-
cwd "."
|
271
|
-
end
|
272
|
-
|
273
|
-
it "knife upload with no parameters reports an error" do
|
274
|
-
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
when_the_chef_server "is empty" do
|
281
|
-
when_the_repository "has a data bag item" do
|
282
|
-
|
283
|
-
before do
|
284
|
-
file "data_bags/x/y.json", { "foo" => "bar" }
|
285
|
-
end
|
286
|
-
|
287
|
-
it "knife upload of the data bag uploads only the values in the data bag item and no other" do
|
288
|
-
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
289
|
-
Created /data_bags/x
|
290
|
-
Created /data_bags/x/y.json
|
291
|
-
EOM
|
292
|
-
knife("diff --name-status /data_bags").should_succeed <<EOM
|
293
|
-
EOM
|
294
|
-
expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false).keys.sort).to eq(%w{foo id})
|
295
|
-
end
|
296
|
-
|
297
|
-
it "knife upload /data_bags/x /data_bags/x/y.json uploads x once" do
|
298
|
-
knife("upload /data_bags/x /data_bags/x/y.json").should_succeed <<~EOM
|
299
|
-
Created /data_bags/x
|
300
|
-
Created /data_bags/x/y.json
|
301
|
-
EOM
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
when_the_repository "has a data bag item with keys chef_type and data_bag" do
|
306
|
-
|
307
|
-
before do
|
308
|
-
file "data_bags/x/y.json", { "chef_type" => "aaa", "data_bag" => "bbb" }
|
309
|
-
end
|
310
|
-
|
311
|
-
it "upload preserves chef_type and data_bag" do
|
312
|
-
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
313
|
-
Created /data_bags/x
|
314
|
-
Created /data_bags/x/y.json
|
315
|
-
EOM
|
316
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
317
|
-
result = Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false)
|
318
|
-
expect(result.keys.sort).to eq(%w{chef_type data_bag id})
|
319
|
-
expect(result["chef_type"]).to eq("aaa")
|
320
|
-
expect(result["data_bag"]).to eq("bbb")
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
# Test upload of an item when the other end doesn't even have the container
|
325
|
-
when_the_repository "has two data bag items" do
|
326
|
-
before do
|
327
|
-
file "data_bags/x/y.json", {}
|
328
|
-
file "data_bags/x/z.json", {}
|
329
|
-
end
|
330
|
-
it "knife upload of one data bag item itself succeeds" do
|
331
|
-
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
332
|
-
Created /data_bags/x
|
333
|
-
Created /data_bags/x/y.json
|
334
|
-
EOM
|
335
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
336
|
-
A\t/data_bags/x/z.json
|
337
|
-
EOM
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
when_the_chef_server "has three data bag items" do
|
343
|
-
|
344
|
-
before do
|
345
|
-
data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
|
346
|
-
end
|
347
|
-
|
348
|
-
when_the_repository "has a modified, unmodified, added and deleted data bag item" do
|
349
|
-
before do
|
350
|
-
file "data_bags/x/added.json", {}
|
351
|
-
file "data_bags/x/modified.json", { "foo" => "bar" }
|
352
|
-
file "data_bags/x/unmodified.json", {}
|
353
|
-
end
|
354
|
-
|
355
|
-
it "knife upload of the modified file succeeds" do
|
356
|
-
knife("upload /data_bags/x/modified.json").should_succeed <<~EOM
|
357
|
-
Updated /data_bags/x/modified.json
|
358
|
-
EOM
|
359
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
360
|
-
D\t/data_bags/x/deleted.json
|
361
|
-
A\t/data_bags/x/added.json
|
362
|
-
EOM
|
363
|
-
end
|
364
|
-
it "knife upload of the unmodified file does nothing" do
|
365
|
-
knife("upload /data_bags/x/unmodified.json").should_succeed ""
|
366
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
367
|
-
D\t/data_bags/x/deleted.json
|
368
|
-
M\t/data_bags/x/modified.json
|
369
|
-
A\t/data_bags/x/added.json
|
370
|
-
EOM
|
371
|
-
end
|
372
|
-
it "knife upload of the added file succeeds" do
|
373
|
-
knife("upload /data_bags/x/added.json").should_succeed <<~EOM
|
374
|
-
Created /data_bags/x/added.json
|
375
|
-
EOM
|
376
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
377
|
-
D\t/data_bags/x/deleted.json
|
378
|
-
M\t/data_bags/x/modified.json
|
379
|
-
EOM
|
380
|
-
end
|
381
|
-
it "knife upload of the deleted file does nothing" do
|
382
|
-
knife("upload /data_bags/x/deleted.json").should_succeed ""
|
383
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
384
|
-
D\t/data_bags/x/deleted.json
|
385
|
-
M\t/data_bags/x/modified.json
|
386
|
-
A\t/data_bags/x/added.json
|
387
|
-
EOM
|
388
|
-
end
|
389
|
-
it "knife upload --purge of the deleted file deletes it" do
|
390
|
-
knife("upload --purge /data_bags/x/deleted.json").should_succeed <<~EOM
|
391
|
-
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
392
|
-
EOM
|
393
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
394
|
-
M\t/data_bags/x/modified.json
|
395
|
-
A\t/data_bags/x/added.json
|
396
|
-
EOM
|
397
|
-
end
|
398
|
-
it "knife upload of the entire data bag uploads everything" do
|
399
|
-
knife("upload /data_bags/x").should_succeed <<~EOM
|
400
|
-
Created /data_bags/x/added.json
|
401
|
-
Updated /data_bags/x/modified.json
|
402
|
-
EOM
|
403
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
404
|
-
D\t/data_bags/x/deleted.json
|
405
|
-
EOM
|
406
|
-
end
|
407
|
-
it "knife upload --purge of the entire data bag uploads everything" do
|
408
|
-
knife("upload --purge /data_bags/x").should_succeed <<~EOM
|
409
|
-
Created /data_bags/x/added.json
|
410
|
-
Updated /data_bags/x/modified.json
|
411
|
-
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
412
|
-
EOM
|
413
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
414
|
-
end
|
415
|
-
context "when cwd is the /data_bags directory" do
|
416
|
-
|
417
|
-
before do
|
418
|
-
cwd "data_bags"
|
419
|
-
end
|
420
|
-
|
421
|
-
it "knife upload fails" do
|
422
|
-
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
423
|
-
end
|
424
|
-
|
425
|
-
it "knife upload --purge . uploads everything" do
|
426
|
-
knife("upload --purge .").should_succeed <<~EOM
|
427
|
-
Created x/added.json
|
428
|
-
Updated x/modified.json
|
429
|
-
Deleted extra entry x/deleted.json (purge is on)
|
430
|
-
EOM
|
431
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
432
|
-
end
|
433
|
-
it "knife upload --purge * uploads everything" do
|
434
|
-
knife("upload --purge *").should_succeed <<~EOM
|
435
|
-
Created x/added.json
|
436
|
-
Updated x/modified.json
|
437
|
-
Deleted extra entry x/deleted.json (purge is on)
|
438
|
-
EOM
|
439
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
440
|
-
end
|
441
|
-
end
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
# Cookbook upload is a funny thing ... direct cookbook upload works, but
|
446
|
-
# upload of a file is designed not to work at present. Make sure that is the
|
447
|
-
# case.
|
448
|
-
when_the_chef_server "has a cookbook" do
|
449
|
-
|
450
|
-
before do
|
451
|
-
cookbook "x", "1.0.0", { "z.rb" => "" }
|
452
|
-
end
|
453
|
-
|
454
|
-
when_the_repository "has a modified, extra and missing file for the cookbook" do
|
455
|
-
before do
|
456
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
|
457
|
-
file "cookbooks/x/y.rb", "hi"
|
458
|
-
end
|
459
|
-
|
460
|
-
it "knife upload of any individual file fails" do
|
461
|
-
knife("upload /cookbooks/x/metadata.rb").should_fail "ERROR: /cookbooks/x/metadata.rb cannot be updated.\n"
|
462
|
-
knife("upload /cookbooks/x/y.rb").should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n"
|
463
|
-
knife("upload --purge /cookbooks/x/z.rb").should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n"
|
464
|
-
end
|
465
|
-
# TODO this is a bit of an inconsistency: if we didn't specify --purge,
|
466
|
-
# technically we shouldn't have deleted missing files. But ... cookbooks
|
467
|
-
# are a special case.
|
468
|
-
it "knife upload of the cookbook itself succeeds" do
|
469
|
-
knife("upload /cookbooks/x").should_succeed <<~EOM
|
470
|
-
Updated /cookbooks/x
|
471
|
-
EOM
|
472
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
473
|
-
end
|
474
|
-
it "knife upload --purge of the cookbook itself succeeds" do
|
475
|
-
knife("upload /cookbooks/x").should_succeed <<~EOM
|
476
|
-
Updated /cookbooks/x
|
477
|
-
EOM
|
478
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
479
|
-
end
|
480
|
-
end
|
481
|
-
when_the_repository "has a missing file for the cookbook" do
|
482
|
-
|
483
|
-
before do
|
484
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
485
|
-
end
|
486
|
-
|
487
|
-
it "knife upload of the cookbook succeeds" do
|
488
|
-
knife("upload /cookbooks/x").should_succeed <<~EOM
|
489
|
-
Updated /cookbooks/x
|
490
|
-
EOM
|
491
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
492
|
-
end
|
493
|
-
end
|
494
|
-
when_the_repository "has an extra file for the cookbook" do
|
495
|
-
|
496
|
-
before do
|
497
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
498
|
-
file "cookbooks/x/z.rb", ""
|
499
|
-
file "cookbooks/x/blah.rb", ""
|
500
|
-
end
|
501
|
-
|
502
|
-
it "knife upload of the cookbook succeeds" do
|
503
|
-
knife("upload /cookbooks/x").should_succeed <<~EOM
|
504
|
-
Updated /cookbooks/x
|
505
|
-
EOM
|
506
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
when_the_repository "has a different file in the cookbook" do
|
511
|
-
before do
|
512
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
513
|
-
end
|
514
|
-
|
515
|
-
it "knife upload --freeze freezes the cookbook" do
|
516
|
-
knife("upload --freeze /cookbooks/x").should_succeed <<~EOM
|
517
|
-
Updated /cookbooks/x
|
518
|
-
EOM
|
519
|
-
# Modify a file and attempt to upload
|
520
|
-
file "cookbooks/x/metadata.rb", 'name "x"; version "1.0.0"#different'
|
521
|
-
knife("upload /cookbooks/x").should_fail "ERROR: /cookbooks failed to write: Cookbook x is frozen\n"
|
522
|
-
end
|
523
|
-
end
|
524
|
-
end
|
525
|
-
|
526
|
-
when_the_chef_server "has a frozen cookbook" do
|
527
|
-
before do
|
528
|
-
cookbook "frozencook", "1.0.0", {}, frozen: true
|
529
|
-
end
|
530
|
-
|
531
|
-
when_the_repository "has an update to said cookbook" do
|
532
|
-
|
533
|
-
before do
|
534
|
-
file "cookbooks/frozencook/metadata.rb", cb_metadata("frozencook", "1.0.0", "# This is different")
|
535
|
-
end
|
536
|
-
|
537
|
-
it "knife upload fails to upload the frozen cookbook" do
|
538
|
-
knife("upload /cookbooks/frozencook").should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n"
|
539
|
-
end
|
540
|
-
it "knife upload --force uploads the frozen cookbook" do
|
541
|
-
knife("upload --force /cookbooks/frozencook").should_succeed <<~EOM
|
542
|
-
Updated /cookbooks/frozencook
|
543
|
-
EOM
|
544
|
-
end
|
545
|
-
end
|
546
|
-
end
|
547
|
-
|
548
|
-
when_the_repository "has a cookbook" do
|
549
|
-
before do
|
550
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
551
|
-
file "cookbooks/x/onlyin1.0.0.rb", "old_text"
|
552
|
-
end
|
553
|
-
|
554
|
-
when_the_chef_server "has a later version for the cookbook" do
|
555
|
-
before do
|
556
|
-
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
557
|
-
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
558
|
-
end
|
559
|
-
|
560
|
-
it "knife upload /cookbooks/x uploads the local version" do
|
561
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
562
|
-
M\t/cookbooks/x/metadata.rb
|
563
|
-
D\t/cookbooks/x/onlyin1.0.1.rb
|
564
|
-
A\t/cookbooks/x/onlyin1.0.0.rb
|
565
|
-
EOM
|
566
|
-
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
567
|
-
Updated /cookbooks/x
|
568
|
-
EOM
|
569
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
570
|
-
M\t/cookbooks/x/metadata.rb
|
571
|
-
D\t/cookbooks/x/onlyin1.0.1.rb
|
572
|
-
A\t/cookbooks/x/onlyin1.0.0.rb
|
573
|
-
EOM
|
574
|
-
end
|
575
|
-
end
|
576
|
-
|
577
|
-
when_the_chef_server "has an earlier version for the cookbook" do
|
578
|
-
before do
|
579
|
-
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
580
|
-
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
581
|
-
end
|
582
|
-
|
583
|
-
it "knife upload /cookbooks/x uploads the local version" do
|
584
|
-
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
585
|
-
Updated /cookbooks/x
|
586
|
-
EOM
|
587
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
588
|
-
end
|
589
|
-
end
|
590
|
-
|
591
|
-
when_the_chef_server "has a later version for the cookbook, and no current version" do
|
592
|
-
before do
|
593
|
-
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
594
|
-
end
|
595
|
-
|
596
|
-
it "knife upload /cookbooks/x uploads the local version" do
|
597
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
598
|
-
M\t/cookbooks/x/metadata.rb
|
599
|
-
D\t/cookbooks/x/onlyin1.0.1.rb
|
600
|
-
A\t/cookbooks/x/onlyin1.0.0.rb
|
601
|
-
EOM
|
602
|
-
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
603
|
-
Updated /cookbooks/x
|
604
|
-
EOM
|
605
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
606
|
-
M\t/cookbooks/x/metadata.rb
|
607
|
-
D\t/cookbooks/x/onlyin1.0.1.rb
|
608
|
-
A\t/cookbooks/x/onlyin1.0.0.rb
|
609
|
-
EOM
|
610
|
-
end
|
611
|
-
end
|
612
|
-
|
613
|
-
when_the_chef_server "has an earlier version for the cookbook, and no current version" do
|
614
|
-
before do
|
615
|
-
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
616
|
-
end
|
617
|
-
|
618
|
-
it "knife upload /cookbooks/x uploads the new version" do
|
619
|
-
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
620
|
-
Updated /cookbooks/x
|
621
|
-
EOM
|
622
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
623
|
-
end
|
624
|
-
end
|
625
|
-
end
|
626
|
-
|
627
|
-
when_the_chef_server "has an environment" do
|
628
|
-
before do
|
629
|
-
environment "x", {}
|
630
|
-
end
|
631
|
-
|
632
|
-
when_the_repository "has an environment with bad JSON" do
|
633
|
-
before do
|
634
|
-
file "environments/x.json", "{"
|
635
|
-
end
|
636
|
-
|
637
|
-
it "knife upload tries and fails" do
|
638
|
-
error1 = <<~EOH
|
639
|
-
WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
|
640
|
-
{
|
641
|
-
(right here) ------^
|
642
|
-
|
643
|
-
ERROR: /environments/x.json failed to write: Parse error reading JSON: parse error: premature EOF
|
644
|
-
{
|
645
|
-
(right here) ------^
|
646
|
-
EOH
|
647
|
-
|
648
|
-
warn = <<~EOH
|
649
|
-
WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
|
650
|
-
{
|
651
|
-
(right here) ------^
|
652
|
-
|
653
|
-
EOH
|
654
|
-
knife("upload /environments/x.json").should_fail(error1)
|
655
|
-
knife("diff --name-status /environments/x.json").should_succeed("M\t/environments/x.json\n", stderr: warn)
|
656
|
-
end
|
657
|
-
end
|
658
|
-
|
659
|
-
when_the_repository "has the same environment with the wrong name in the file" do
|
660
|
-
before do
|
661
|
-
file "environments/x.json", { "name" => "y" }
|
662
|
-
end
|
663
|
-
it "knife upload fails" do
|
664
|
-
knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
|
665
|
-
knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
when_the_repository "has the same environment with no name in the file" do
|
670
|
-
before do
|
671
|
-
file "environments/x.json", { "description" => "hi" }
|
672
|
-
end
|
673
|
-
it "knife upload succeeds" do
|
674
|
-
knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
|
675
|
-
knife("diff --name-status /environments/x.json").should_succeed ""
|
676
|
-
end
|
677
|
-
end
|
678
|
-
end
|
679
|
-
|
680
|
-
when_the_chef_server "is empty" do
|
681
|
-
|
682
|
-
when_the_repository "has an environment with the wrong name in the file" do
|
683
|
-
before do
|
684
|
-
file "environments/x.json", { "name" => "y" }
|
685
|
-
end
|
686
|
-
it "knife upload fails" do
|
687
|
-
knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
|
688
|
-
knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
|
689
|
-
end
|
690
|
-
end
|
691
|
-
|
692
|
-
when_the_repository "has an environment with no name in the file" do
|
693
|
-
|
694
|
-
before do
|
695
|
-
file "environments/x.json", { "description" => "hi" }
|
696
|
-
end
|
697
|
-
it "knife upload succeeds" do
|
698
|
-
knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
|
699
|
-
knife("diff --name-status /environments/x.json").should_succeed ""
|
700
|
-
end
|
701
|
-
end
|
702
|
-
|
703
|
-
when_the_repository "has a data bag with no id in the file" do
|
704
|
-
before do
|
705
|
-
file "data_bags/bag/x.json", { "foo" => "bar" }
|
706
|
-
end
|
707
|
-
it "knife upload succeeds" do
|
708
|
-
knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
|
709
|
-
knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
|
710
|
-
end
|
711
|
-
end
|
712
|
-
end
|
713
|
-
when_the_chef_server "is empty" do
|
714
|
-
when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
|
715
|
-
before do
|
716
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
|
717
|
-
end
|
718
|
-
it "knife upload succeeds" do
|
719
|
-
knife("upload /cookbooks/x").should_succeed <<~EOM
|
720
|
-
Created /cookbooks/x
|
721
|
-
EOM
|
722
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
723
|
-
end
|
724
|
-
end
|
725
|
-
end
|
726
|
-
end # without versioned cookbooks
|
727
|
-
|
728
|
-
with_versioned_cookbooks do
|
729
|
-
when_the_chef_server "has one of each thing" do
|
730
|
-
|
731
|
-
before do
|
732
|
-
client "x", {}
|
733
|
-
cookbook "x", "1.0.0"
|
734
|
-
data_bag "x", { "y" => {} }
|
735
|
-
environment "x", {}
|
736
|
-
node "x", {}
|
737
|
-
role "x", {}
|
738
|
-
user "x", {}
|
739
|
-
end
|
740
|
-
|
741
|
-
when_the_repository "has only top-level directories" do
|
742
|
-
before do
|
743
|
-
directory "clients"
|
744
|
-
directory "cookbooks"
|
745
|
-
directory "data_bags"
|
746
|
-
directory "environments"
|
747
|
-
directory "nodes"
|
748
|
-
directory "roles"
|
749
|
-
directory "users"
|
750
|
-
end
|
751
|
-
|
752
|
-
it "knife upload does nothing" do
|
753
|
-
knife("upload /").should_succeed ""
|
754
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
755
|
-
D\t/clients/chef-validator.json
|
756
|
-
D\t/clients/chef-webui.json
|
757
|
-
D\t/clients/x.json
|
758
|
-
D\t/cookbooks/x-1.0.0
|
759
|
-
D\t/data_bags/x
|
760
|
-
D\t/environments/_default.json
|
761
|
-
D\t/environments/x.json
|
762
|
-
D\t/nodes/x.json
|
763
|
-
D\t/roles/x.json
|
764
|
-
D\t/users/admin.json
|
765
|
-
D\t/users/x.json
|
766
|
-
EOM
|
767
|
-
end
|
768
|
-
|
769
|
-
it "knife upload --purge deletes everything" do
|
770
|
-
knife("upload --purge /").should_succeed(<<~EOM, stderr: "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
|
771
|
-
Deleted extra entry /clients/chef-validator.json (purge is on)
|
772
|
-
Deleted extra entry /clients/chef-webui.json (purge is on)
|
773
|
-
Deleted extra entry /clients/x.json (purge is on)
|
774
|
-
Deleted extra entry /cookbooks/x-1.0.0 (purge is on)
|
775
|
-
Deleted extra entry /data_bags/x (purge is on)
|
776
|
-
Deleted extra entry /environments/x.json (purge is on)
|
777
|
-
Deleted extra entry /nodes/x.json (purge is on)
|
778
|
-
Deleted extra entry /roles/x.json (purge is on)
|
779
|
-
Deleted extra entry /users/admin.json (purge is on)
|
780
|
-
Deleted extra entry /users/x.json (purge is on)
|
781
|
-
EOM
|
782
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
783
|
-
D\t/environments/_default.json
|
784
|
-
EOM
|
785
|
-
end
|
786
|
-
end
|
787
|
-
|
788
|
-
when_the_repository "has an identical copy of each thing" do
|
789
|
-
before do
|
790
|
-
file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
791
|
-
file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
792
|
-
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
793
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
794
|
-
file "data_bags/x/y.json", {}
|
795
|
-
file "environments/_default.json", { "description" => "The default Chef environment" }
|
796
|
-
file "environments/x.json", {}
|
797
|
-
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
798
|
-
file "roles/x.json", {}
|
799
|
-
file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
800
|
-
file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
801
|
-
end
|
802
|
-
|
803
|
-
it "knife upload makes no changes" do
|
804
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed ""
|
805
|
-
knife("diff --name-status /").should_succeed ""
|
806
|
-
end
|
807
|
-
|
808
|
-
it "knife upload --purge makes no changes" do
|
809
|
-
knife("upload --purge /").should_succeed ""
|
810
|
-
knife("diff --name-status /").should_succeed ""
|
811
|
-
end
|
812
|
-
|
813
|
-
context "except the role file" do
|
814
|
-
before do
|
815
|
-
file "roles/x.json", { "description" => "blarghle" }
|
816
|
-
end
|
817
|
-
|
818
|
-
it "knife upload changes the role" do
|
819
|
-
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
820
|
-
knife("diff --name-status /").should_succeed ""
|
821
|
-
end
|
822
|
-
end
|
823
|
-
|
824
|
-
context "except the role file is textually different, but not ACTUALLY different" do
|
825
|
-
|
826
|
-
before do
|
827
|
-
file "roles/x.json", <<~EOM
|
828
|
-
{
|
829
|
-
"chef_type": "role",
|
830
|
-
"default_attributes": {
|
831
|
-
},
|
832
|
-
"env_run_lists": {
|
833
|
-
},
|
834
|
-
"json_class": "Chef::Role",
|
835
|
-
"name": "x",
|
836
|
-
"description": "",
|
837
|
-
"override_attributes": {
|
838
|
-
},
|
839
|
-
"run_list": [
|
840
|
-
|
841
|
-
]
|
842
|
-
}
|
843
|
-
EOM
|
844
|
-
end
|
845
|
-
|
846
|
-
it "knife upload / does not change anything" do
|
847
|
-
knife("upload /").should_succeed ""
|
848
|
-
knife("diff --name-status /").should_succeed ""
|
849
|
-
end
|
850
|
-
end
|
851
|
-
|
852
|
-
context "as well as one extra copy of each thing" do
|
853
|
-
before do
|
854
|
-
file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
855
|
-
file "cookbooks/x-1.0.0/blah.rb", ""
|
856
|
-
file "cookbooks/x-2.0.0/metadata.rb", cb_metadata("x", "2.0.0")
|
857
|
-
file "cookbooks/y-1.0.0/metadata.rb", cb_metadata("y", "1.0.0")
|
858
|
-
file "data_bags/x/z.json", {}
|
859
|
-
file "data_bags/y/zz.json", {}
|
860
|
-
file "environments/y.json", {}
|
861
|
-
file "nodes/y.json", {}
|
862
|
-
file "roles/y.json", {}
|
863
|
-
file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
864
|
-
end
|
865
|
-
|
866
|
-
it "knife upload adds the new files" do
|
867
|
-
knife("upload /").should_succeed <<~EOM
|
868
|
-
Created /clients/y.json
|
869
|
-
Updated /cookbooks/x-1.0.0
|
870
|
-
Created /cookbooks/x-2.0.0
|
871
|
-
Created /cookbooks/y-1.0.0
|
872
|
-
Created /data_bags/x/z.json
|
873
|
-
Created /data_bags/y
|
874
|
-
Created /data_bags/y/zz.json
|
875
|
-
Created /environments/y.json
|
876
|
-
Created /nodes/y.json
|
877
|
-
Created /roles/y.json
|
878
|
-
Created /users/y.json
|
879
|
-
EOM
|
880
|
-
knife("diff --name-status /").should_succeed ""
|
881
|
-
end
|
882
|
-
end
|
883
|
-
end
|
884
|
-
|
885
|
-
when_the_repository "is empty" do
|
886
|
-
it "knife upload does nothing" do
|
887
|
-
knife("upload /").should_succeed ""
|
888
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
889
|
-
D\t/clients
|
890
|
-
D\t/cookbooks
|
891
|
-
D\t/data_bags
|
892
|
-
D\t/environments
|
893
|
-
D\t/nodes
|
894
|
-
D\t/roles
|
895
|
-
D\t/users
|
896
|
-
EOM
|
897
|
-
end
|
898
|
-
|
899
|
-
it "knife upload --purge deletes nothing" do
|
900
|
-
knife("upload --purge /").should_fail <<~EOM
|
901
|
-
ERROR: /clients cannot be deleted.
|
902
|
-
ERROR: /cookbooks cannot be deleted.
|
903
|
-
ERROR: /data_bags cannot be deleted.
|
904
|
-
ERROR: /environments cannot be deleted.
|
905
|
-
ERROR: /nodes cannot be deleted.
|
906
|
-
ERROR: /roles cannot be deleted.
|
907
|
-
ERROR: /users cannot be deleted.
|
908
|
-
EOM
|
909
|
-
knife("diff --name-status /").should_succeed <<~EOM
|
910
|
-
D\t/clients
|
911
|
-
D\t/cookbooks
|
912
|
-
D\t/data_bags
|
913
|
-
D\t/environments
|
914
|
-
D\t/nodes
|
915
|
-
D\t/roles
|
916
|
-
D\t/users
|
917
|
-
EOM
|
918
|
-
end
|
919
|
-
|
920
|
-
context "when current directory is top level" do
|
921
|
-
before do
|
922
|
-
cwd "."
|
923
|
-
end
|
924
|
-
it "knife upload with no parameters reports an error" do
|
925
|
-
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
926
|
-
end
|
927
|
-
end
|
928
|
-
end
|
929
|
-
end
|
930
|
-
|
931
|
-
# Test upload of an item when the other end doesn't even have the container
|
932
|
-
when_the_chef_server "is empty" do
|
933
|
-
when_the_repository "has two data bag items" do
|
934
|
-
before do
|
935
|
-
file "data_bags/x/y.json", {}
|
936
|
-
file "data_bags/x/z.json", {}
|
937
|
-
end
|
938
|
-
|
939
|
-
it "knife upload of one data bag item itself succeeds" do
|
940
|
-
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
941
|
-
Created /data_bags/x
|
942
|
-
Created /data_bags/x/y.json
|
943
|
-
EOM
|
944
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
945
|
-
A\t/data_bags/x/z.json
|
946
|
-
EOM
|
947
|
-
end
|
948
|
-
end
|
949
|
-
end
|
950
|
-
|
951
|
-
when_the_chef_server "has three data bag items" do
|
952
|
-
before do
|
953
|
-
data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
|
954
|
-
end
|
955
|
-
when_the_repository "has a modified, unmodified, added and deleted data bag item" do
|
956
|
-
before do
|
957
|
-
file "data_bags/x/added.json", {}
|
958
|
-
file "data_bags/x/modified.json", { "foo" => "bar" }
|
959
|
-
file "data_bags/x/unmodified.json", {}
|
960
|
-
end
|
961
|
-
|
962
|
-
it "knife upload of the modified file succeeds" do
|
963
|
-
knife("upload /data_bags/x/modified.json").should_succeed <<~EOM
|
964
|
-
Updated /data_bags/x/modified.json
|
965
|
-
EOM
|
966
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
967
|
-
D\t/data_bags/x/deleted.json
|
968
|
-
A\t/data_bags/x/added.json
|
969
|
-
EOM
|
970
|
-
end
|
971
|
-
it "knife upload of the unmodified file does nothing" do
|
972
|
-
knife("upload /data_bags/x/unmodified.json").should_succeed ""
|
973
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
974
|
-
D\t/data_bags/x/deleted.json
|
975
|
-
M\t/data_bags/x/modified.json
|
976
|
-
A\t/data_bags/x/added.json
|
977
|
-
EOM
|
978
|
-
end
|
979
|
-
it "knife upload of the added file succeeds" do
|
980
|
-
knife("upload /data_bags/x/added.json").should_succeed <<~EOM
|
981
|
-
Created /data_bags/x/added.json
|
982
|
-
EOM
|
983
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
984
|
-
D\t/data_bags/x/deleted.json
|
985
|
-
M\t/data_bags/x/modified.json
|
986
|
-
EOM
|
987
|
-
end
|
988
|
-
it "knife upload of the deleted file does nothing" do
|
989
|
-
knife("upload /data_bags/x/deleted.json").should_succeed ""
|
990
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
991
|
-
D\t/data_bags/x/deleted.json
|
992
|
-
M\t/data_bags/x/modified.json
|
993
|
-
A\t/data_bags/x/added.json
|
994
|
-
EOM
|
995
|
-
end
|
996
|
-
it "knife upload --purge of the deleted file deletes it" do
|
997
|
-
knife("upload --purge /data_bags/x/deleted.json").should_succeed <<~EOM
|
998
|
-
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
999
|
-
EOM
|
1000
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
1001
|
-
M\t/data_bags/x/modified.json
|
1002
|
-
A\t/data_bags/x/added.json
|
1003
|
-
EOM
|
1004
|
-
end
|
1005
|
-
it "knife upload of the entire data bag uploads everything" do
|
1006
|
-
knife("upload /data_bags/x").should_succeed <<~EOM
|
1007
|
-
Created /data_bags/x/added.json
|
1008
|
-
Updated /data_bags/x/modified.json
|
1009
|
-
EOM
|
1010
|
-
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
1011
|
-
D\t/data_bags/x/deleted.json
|
1012
|
-
EOM
|
1013
|
-
end
|
1014
|
-
it "knife upload --purge of the entire data bag uploads everything" do
|
1015
|
-
knife("upload --purge /data_bags/x").should_succeed <<~EOM
|
1016
|
-
Created /data_bags/x/added.json
|
1017
|
-
Updated /data_bags/x/modified.json
|
1018
|
-
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
1019
|
-
EOM
|
1020
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
1021
|
-
end
|
1022
|
-
context "when cwd is the /data_bags directory" do
|
1023
|
-
before do
|
1024
|
-
cwd "data_bags"
|
1025
|
-
end
|
1026
|
-
it "knife upload fails" do
|
1027
|
-
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
1028
|
-
end
|
1029
|
-
it "knife upload --purge . uploads everything" do
|
1030
|
-
knife("upload --purge .").should_succeed <<~EOM
|
1031
|
-
Created x/added.json
|
1032
|
-
Updated x/modified.json
|
1033
|
-
Deleted extra entry x/deleted.json (purge is on)
|
1034
|
-
EOM
|
1035
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
1036
|
-
end
|
1037
|
-
it "knife upload --purge * uploads everything" do
|
1038
|
-
knife("upload --purge *").should_succeed <<~EOM
|
1039
|
-
Created x/added.json
|
1040
|
-
Updated x/modified.json
|
1041
|
-
Deleted extra entry x/deleted.json (purge is on)
|
1042
|
-
EOM
|
1043
|
-
knife("diff --name-status /data_bags").should_succeed ""
|
1044
|
-
end
|
1045
|
-
end
|
1046
|
-
end
|
1047
|
-
end
|
1048
|
-
|
1049
|
-
# Cookbook upload is a funny thing ... direct cookbook upload works, but
|
1050
|
-
# upload of a file is designed not to work at present. Make sure that is the
|
1051
|
-
# case.
|
1052
|
-
when_the_chef_server "has a cookbook" do
|
1053
|
-
before do
|
1054
|
-
cookbook "x", "1.0.0", { "z.rb" => "" }
|
1055
|
-
end
|
1056
|
-
|
1057
|
-
when_the_repository "has a modified, extra and missing file for the cookbook" do
|
1058
|
-
before do
|
1059
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
|
1060
|
-
file "cookbooks/x-1.0.0/y.rb", "hi"
|
1061
|
-
end
|
1062
|
-
|
1063
|
-
it "knife upload of any individual file fails" do
|
1064
|
-
knife("upload /cookbooks/x-1.0.0/metadata.rb").should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n"
|
1065
|
-
knife("upload /cookbooks/x-1.0.0/y.rb").should_fail "ERROR: /cookbooks/x-1.0.0 cannot have a child created under it.\n"
|
1066
|
-
knife("upload --purge /cookbooks/x-1.0.0/z.rb").should_fail "ERROR: /cookbooks/x-1.0.0/z.rb cannot be deleted.\n"
|
1067
|
-
end
|
1068
|
-
|
1069
|
-
# TODO this is a bit of an inconsistency: if we didn't specify --purge,
|
1070
|
-
# technically we shouldn't have deleted missing files. But ... cookbooks
|
1071
|
-
# are a special case.
|
1072
|
-
it "knife upload of the cookbook itself succeeds" do
|
1073
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1074
|
-
Updated /cookbooks/x-1.0.0
|
1075
|
-
EOM
|
1076
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1077
|
-
end
|
1078
|
-
|
1079
|
-
it "knife upload --purge of the cookbook itself succeeds" do
|
1080
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1081
|
-
Updated /cookbooks/x-1.0.0
|
1082
|
-
EOM
|
1083
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1084
|
-
end
|
1085
|
-
end
|
1086
|
-
|
1087
|
-
when_the_repository "has a missing file for the cookbook" do
|
1088
|
-
before do
|
1089
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1090
|
-
end
|
1091
|
-
|
1092
|
-
it "knife upload of the cookbook succeeds" do
|
1093
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1094
|
-
Updated /cookbooks/x-1.0.0
|
1095
|
-
EOM
|
1096
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1097
|
-
end
|
1098
|
-
end
|
1099
|
-
|
1100
|
-
when_the_repository "has an extra file for the cookbook" do
|
1101
|
-
before do
|
1102
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1103
|
-
file "cookbooks/x-1.0.0/z.rb", ""
|
1104
|
-
file "cookbooks/x-1.0.0/blah.rb", ""
|
1105
|
-
end
|
1106
|
-
|
1107
|
-
it "knife upload of the cookbook succeeds" do
|
1108
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1109
|
-
Updated /cookbooks/x-1.0.0
|
1110
|
-
EOM
|
1111
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1112
|
-
end
|
1113
|
-
end
|
1114
|
-
end
|
1115
|
-
|
1116
|
-
when_the_repository "has a cookbook" do
|
1117
|
-
before do
|
1118
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1119
|
-
file "cookbooks/x-1.0.0/onlyin1.0.0.rb", "old_text"
|
1120
|
-
end
|
1121
|
-
|
1122
|
-
when_the_chef_server "has a later version for the cookbook" do
|
1123
|
-
before do
|
1124
|
-
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
1125
|
-
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
1126
|
-
end
|
1127
|
-
|
1128
|
-
it "knife upload /cookbooks uploads the local version" do
|
1129
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
1130
|
-
M\t/cookbooks/x-1.0.0/onlyin1.0.0.rb
|
1131
|
-
D\t/cookbooks/x-1.0.1
|
1132
|
-
EOM
|
1133
|
-
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1134
|
-
Updated /cookbooks/x-1.0.0
|
1135
|
-
Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
|
1136
|
-
EOM
|
1137
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1138
|
-
end
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
when_the_chef_server "has an earlier version for the cookbook" do
|
1142
|
-
before do
|
1143
|
-
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
1144
|
-
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
1145
|
-
end
|
1146
|
-
it "knife upload /cookbooks uploads the local version" do
|
1147
|
-
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1148
|
-
Updated /cookbooks/x-1.0.0
|
1149
|
-
Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
|
1150
|
-
EOM
|
1151
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1152
|
-
end
|
1153
|
-
end
|
1154
|
-
|
1155
|
-
when_the_chef_server "has a later version for the cookbook, and no current version" do
|
1156
|
-
before do
|
1157
|
-
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
1158
|
-
end
|
1159
|
-
|
1160
|
-
it "knife upload /cookbooks/x uploads the local version" do
|
1161
|
-
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
1162
|
-
D\t/cookbooks/x-1.0.1
|
1163
|
-
A\t/cookbooks/x-1.0.0
|
1164
|
-
EOM
|
1165
|
-
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1166
|
-
Created /cookbooks/x-1.0.0
|
1167
|
-
Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
|
1168
|
-
EOM
|
1169
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1170
|
-
end
|
1171
|
-
end
|
1172
|
-
|
1173
|
-
when_the_chef_server "has an earlier version for the cookbook, and no current version" do
|
1174
|
-
before do
|
1175
|
-
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
1176
|
-
end
|
1177
|
-
|
1178
|
-
it "knife upload /cookbooks/x uploads the new version" do
|
1179
|
-
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1180
|
-
Created /cookbooks/x-1.0.0
|
1181
|
-
Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
|
1182
|
-
EOM
|
1183
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1184
|
-
end
|
1185
|
-
end
|
1186
|
-
end
|
1187
|
-
|
1188
|
-
when_the_chef_server "has an environment" do
|
1189
|
-
before do
|
1190
|
-
environment "x", {}
|
1191
|
-
end
|
1192
|
-
|
1193
|
-
when_the_repository "has the same environment with the wrong name in the file" do
|
1194
|
-
before do
|
1195
|
-
file "environments/x.json", { "name" => "y" }
|
1196
|
-
end
|
1197
|
-
it "knife upload fails" do
|
1198
|
-
knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
|
1199
|
-
knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
|
1200
|
-
end
|
1201
|
-
end
|
1202
|
-
|
1203
|
-
when_the_repository "has the same environment with no name in the file" do
|
1204
|
-
before do
|
1205
|
-
file "environments/x.json", { "description" => "hi" }
|
1206
|
-
end
|
1207
|
-
it "knife upload succeeds" do
|
1208
|
-
knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
|
1209
|
-
knife("diff --name-status /environments/x.json").should_succeed ""
|
1210
|
-
end
|
1211
|
-
end
|
1212
|
-
end
|
1213
|
-
|
1214
|
-
when_the_chef_server "is empty" do
|
1215
|
-
|
1216
|
-
when_the_repository "has an environment with the wrong name in the file" do
|
1217
|
-
before do
|
1218
|
-
file "environments/x.json", { "name" => "y" }
|
1219
|
-
end
|
1220
|
-
it "knife upload fails" do
|
1221
|
-
knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
|
1222
|
-
knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
|
1223
|
-
end
|
1224
|
-
end
|
1225
|
-
|
1226
|
-
when_the_repository "has an environment with no name in the file" do
|
1227
|
-
before do
|
1228
|
-
file "environments/x.json", { "description" => "hi" }
|
1229
|
-
end
|
1230
|
-
it "knife upload succeeds" do
|
1231
|
-
knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
|
1232
|
-
knife("diff --name-status /environments/x.json").should_succeed ""
|
1233
|
-
end
|
1234
|
-
end
|
1235
|
-
|
1236
|
-
when_the_repository "has a data bag with no id in the file" do
|
1237
|
-
before do
|
1238
|
-
file "data_bags/bag/x.json", { "foo" => "bar" }
|
1239
|
-
end
|
1240
|
-
it "knife upload succeeds" do
|
1241
|
-
knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
|
1242
|
-
knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
|
1243
|
-
end
|
1244
|
-
end
|
1245
|
-
end
|
1246
|
-
|
1247
|
-
when_the_chef_server "is empty" do
|
1248
|
-
when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
|
1249
|
-
before do
|
1250
|
-
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
|
1251
|
-
end
|
1252
|
-
it "knife upload succeeds" do
|
1253
|
-
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1254
|
-
Created /cookbooks/x-1.0.0
|
1255
|
-
EOM
|
1256
|
-
knife("diff --name-status /cookbooks").should_succeed ""
|
1257
|
-
end
|
1258
|
-
end
|
1259
|
-
end
|
1260
|
-
end # with versioned cookbooks
|
1261
|
-
|
1262
|
-
when_the_chef_server "has a user" do
|
1263
|
-
before do
|
1264
|
-
user "x", {}
|
1265
|
-
end
|
1266
|
-
|
1267
|
-
when_the_repository "has the same user with json_class in it" do
|
1268
|
-
before do
|
1269
|
-
file "users/x.json", { "admin" => true, "json_class" => "Chef::WebUIUser" }
|
1270
|
-
end
|
1271
|
-
it "knife upload /users/x.json succeeds" do
|
1272
|
-
knife("upload /users/x.json").should_succeed "Updated /users/x.json\n"
|
1273
|
-
end
|
1274
|
-
end
|
1275
|
-
end
|
1276
|
-
|
1277
|
-
when_the_chef_server "is in Enterprise mode", osc_compat: false, single_org: false do
|
1278
|
-
before do
|
1279
|
-
user "foo", {}
|
1280
|
-
user "bar", {}
|
1281
|
-
user "foobar", {}
|
1282
|
-
organization "foo", { "full_name" => "Something" }
|
1283
|
-
end
|
1284
|
-
|
1285
|
-
before :each do
|
1286
|
-
Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
|
1287
|
-
end
|
1288
|
-
|
1289
|
-
context "and has nothing but a single group named blah" do
|
1290
|
-
group "blah", {}
|
1291
|
-
|
1292
|
-
when_the_repository "has at least one of each thing" do
|
1293
|
-
|
1294
|
-
before do
|
1295
|
-
# TODO We have to upload acls for an existing group due to a lack of
|
1296
|
-
# dependency detection during upload. Fix that!
|
1297
|
-
file "acls/groups/blah.json", {}
|
1298
|
-
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
1299
|
-
file "containers/x.json", {}
|
1300
|
-
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
1301
|
-
file "cookbook_artifacts/x-1x1/metadata.rb", cb_metadata("x", "1.0.0")
|
1302
|
-
file "data_bags/x/y.json", {}
|
1303
|
-
file "environments/x.json", {}
|
1304
|
-
file "groups/x.json", {}
|
1305
|
-
file "invitations.json", [ "foo" ]
|
1306
|
-
file "members.json", [ "bar" ]
|
1307
|
-
file "org.json", { "full_name" => "wootles" }
|
1308
|
-
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
1309
|
-
file "policies/x-1.0.0.json", {}
|
1310
|
-
file "policies/blah-1.0.0.json", {}
|
1311
|
-
file "policy_groups/x.json", { "policies" => { "x" => { "revision_id" => "1.0.0" }, "blah" => { "revision_id" => "1.0.0" } } }
|
1312
|
-
file "roles/x.json", {}
|
1313
|
-
end
|
1314
|
-
|
1315
|
-
it "knife upload / uploads everything" do
|
1316
|
-
knife("upload /").should_succeed <<~EOM
|
1317
|
-
Updated /acls/groups/blah.json
|
1318
|
-
Created /clients/x.json
|
1319
|
-
Created /containers/x.json
|
1320
|
-
Created /cookbook_artifacts/x-1x1
|
1321
|
-
Created /cookbooks/x
|
1322
|
-
Created /data_bags/x
|
1323
|
-
Created /data_bags/x/y.json
|
1324
|
-
Created /environments/x.json
|
1325
|
-
Created /groups/x.json
|
1326
|
-
Updated /invitations.json
|
1327
|
-
Updated /members.json
|
1328
|
-
Created /nodes/x.json
|
1329
|
-
Updated /org.json
|
1330
|
-
Created /policies/blah-1.0.0.json
|
1331
|
-
Created /policies/x-1.0.0.json
|
1332
|
-
Created /policy_groups/x.json
|
1333
|
-
Created /roles/x.json
|
1334
|
-
EOM
|
1335
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
|
1336
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1337
|
-
knife("diff --name-status --diff-filter=AMT /").should_succeed ""
|
1338
|
-
end
|
1339
|
-
|
1340
|
-
context "When the chef server has an identical copy of each thing" do
|
1341
|
-
before do
|
1342
|
-
file "invitations.json", [ "foo" ]
|
1343
|
-
file "members.json", [ "bar" ]
|
1344
|
-
file "org.json", { "full_name" => "Something" }
|
1345
|
-
|
1346
|
-
# acl_for %w(organizations foo groups blah)
|
1347
|
-
client "x", {}
|
1348
|
-
cookbook "x", "1.0.0"
|
1349
|
-
cookbook_artifact "x", "1x1", "metadata.rb" => cb_metadata("x", "1.0.0")
|
1350
|
-
container "x", {}
|
1351
|
-
data_bag "x", { "y" => {} }
|
1352
|
-
environment "x", {}
|
1353
|
-
group "x", {}
|
1354
|
-
org_invite "foo"
|
1355
|
-
org_member "bar"
|
1356
|
-
node "x", {}
|
1357
|
-
policy "x", "1.0.0", {}
|
1358
|
-
policy "blah", "1.0.0", {}
|
1359
|
-
policy_group "x", {
|
1360
|
-
"policies" => {
|
1361
|
-
"x" => { "revision_id" => "1.0.0" },
|
1362
|
-
"blah" => { "revision_id" => "1.0.0" },
|
1363
|
-
},
|
1364
|
-
}
|
1365
|
-
role "x", {}
|
1366
|
-
end
|
1367
|
-
|
1368
|
-
it "knife upload makes no changes" do
|
1369
|
-
knife("upload /").should_succeed <<~EOM
|
1370
|
-
Updated /acls/groups/blah.json
|
1371
|
-
EOM
|
1372
|
-
end
|
1373
|
-
end
|
1374
|
-
|
1375
|
-
context "When the chef server has a slightly different copy of the policy revision" do
|
1376
|
-
before do
|
1377
|
-
policy "x", "1.0.0", { "run_list" => [ "blah" ] }
|
1378
|
-
end
|
1379
|
-
|
1380
|
-
it "should fail because policies are not updateable" do
|
1381
|
-
knife("upload /policies/x-1.0.0.json").should_fail <<~EOM
|
1382
|
-
ERROR: /policies/x-1.0.0.json cannot be updated: policy revisions are immutable once uploaded. If you want to change the policy, create a new revision with your changes.
|
1383
|
-
EOM
|
1384
|
-
end
|
1385
|
-
end
|
1386
|
-
|
1387
|
-
context "When the chef server has a slightly different copy of the cookbook artifact" do
|
1388
|
-
before do
|
1389
|
-
cookbook_artifact "x", "1x1", { "recipes" => { "default.rb" => "" } }
|
1390
|
-
end
|
1391
|
-
|
1392
|
-
it "should fail because cookbook_artifacts cannot be updated" do
|
1393
|
-
knife("upload /cookbook_artifacts/x-1x1").should_fail <<~EOM
|
1394
|
-
ERROR: /cookbook_artifacts/x-1x1 cannot be updated: cookbook artifacts are immutable once uploaded.
|
1395
|
-
EOM
|
1396
|
-
end
|
1397
|
-
end
|
1398
|
-
|
1399
|
-
context "When the chef server has a slightly different copy of each thing (except policy revisions)" do
|
1400
|
-
before do
|
1401
|
-
# acl_for %w(organizations foo groups blah)
|
1402
|
-
client "x", { "validator" => true }
|
1403
|
-
container "x", {}
|
1404
|
-
cookbook "x", "1.0.0", { "recipes" => { "default.rb" => "" } }
|
1405
|
-
cookbook_artifact "x", "1x1", { "metadata.rb" => cb_metadata("x", "1.0.0") }
|
1406
|
-
data_bag "x", { "y" => { "a" => "b" } }
|
1407
|
-
environment "x", { "description" => "foo" }
|
1408
|
-
group "x", { "groups" => [ "admin" ] }
|
1409
|
-
node "x", { "run_list" => [ "blah" ] }
|
1410
|
-
policy "x", "1.0.0", {}
|
1411
|
-
policy "x", "1.0.1", {}
|
1412
|
-
policy "y", "1.0.0", {}
|
1413
|
-
policy_group "x", {
|
1414
|
-
"policies" => {
|
1415
|
-
"x" => { "revision_id" => "1.0.1" },
|
1416
|
-
"y" => { "revision_id" => "1.0.0" },
|
1417
|
-
},
|
1418
|
-
}
|
1419
|
-
role "x", { "run_list" => [ "blah" ] }
|
1420
|
-
end
|
1421
|
-
|
1422
|
-
it "knife upload updates everything" do
|
1423
|
-
knife("upload /").should_succeed <<~EOM
|
1424
|
-
Updated /acls/groups/blah.json
|
1425
|
-
Updated /clients/x.json
|
1426
|
-
Updated /cookbooks/x
|
1427
|
-
Updated /data_bags/x/y.json
|
1428
|
-
Updated /environments/x.json
|
1429
|
-
Updated /groups/x.json
|
1430
|
-
Updated /invitations.json
|
1431
|
-
Updated /members.json
|
1432
|
-
Updated /nodes/x.json
|
1433
|
-
Updated /org.json
|
1434
|
-
Created /policies/blah-1.0.0.json
|
1435
|
-
Updated /policy_groups/x.json
|
1436
|
-
Updated /roles/x.json
|
1437
|
-
EOM
|
1438
|
-
knife("diff --name-status --diff-filter=AMT /").should_succeed ""
|
1439
|
-
end
|
1440
|
-
end
|
1441
|
-
end
|
1442
|
-
|
1443
|
-
when_the_repository "has an org.json that does not change full_name" do
|
1444
|
-
before do
|
1445
|
-
file "org.json", { "full_name" => "Something" }
|
1446
|
-
end
|
1447
|
-
|
1448
|
-
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1449
|
-
knife("upload /").should_succeed ""
|
1450
|
-
expect(api.get("/")["full_name"]).to eq("Something")
|
1451
|
-
end
|
1452
|
-
end
|
1453
|
-
|
1454
|
-
when_the_repository "has an org.json that changes full_name" do
|
1455
|
-
before do
|
1456
|
-
file "org.json", { "full_name" => "Something Else" }
|
1457
|
-
end
|
1458
|
-
|
1459
|
-
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1460
|
-
knife("upload /").should_succeed "Updated /org.json\n"
|
1461
|
-
expect(api.get("/")["full_name"]).to eq("Something Else")
|
1462
|
-
end
|
1463
|
-
end
|
1464
|
-
|
1465
|
-
context "and has invited foo and bar is already a member" do
|
1466
|
-
org_invite "foo"
|
1467
|
-
org_member "bar"
|
1468
|
-
|
1469
|
-
when_the_repository "wants to invite foo, bar and foobar" do
|
1470
|
-
before do
|
1471
|
-
file "invitations.json", %w{foo bar foobar}
|
1472
|
-
end
|
1473
|
-
|
1474
|
-
it "knife upload / emits a warning for bar and invites foobar" do
|
1475
|
-
knife("upload /").should_succeed "Updated /invitations.json\n", stderr: "WARN: Could not invite bar to organization foo: User bar is already in organization foo\n"
|
1476
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{foo foobar})
|
1477
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1478
|
-
end
|
1479
|
-
end
|
1480
|
-
|
1481
|
-
when_the_repository "wants to make foo, bar and foobar members" do
|
1482
|
-
before do
|
1483
|
-
file "members.json", %w{foo bar foobar}
|
1484
|
-
end
|
1485
|
-
|
1486
|
-
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1487
|
-
knife("upload /").should_succeed "Updated /members.json\n"
|
1488
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
|
1489
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo foobar})
|
1490
|
-
end
|
1491
|
-
end
|
1492
|
-
|
1493
|
-
when_the_repository "wants to invite foo and have bar as a member" do
|
1494
|
-
before do
|
1495
|
-
file "invitations.json", [ "foo" ]
|
1496
|
-
file "members.json", [ "bar" ]
|
1497
|
-
end
|
1498
|
-
|
1499
|
-
it "knife upload / does nothing" do
|
1500
|
-
knife("upload /").should_succeed ""
|
1501
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
|
1502
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1503
|
-
end
|
1504
|
-
end
|
1505
|
-
end
|
1506
|
-
|
1507
|
-
context "and has invited bar and foo" do
|
1508
|
-
org_invite "bar", "foo"
|
1509
|
-
|
1510
|
-
when_the_repository "wants to invite foo and bar (different order)" do
|
1511
|
-
before do
|
1512
|
-
file "invitations.json", %w{foo bar}
|
1513
|
-
end
|
1514
|
-
|
1515
|
-
it "knife upload / does nothing" do
|
1516
|
-
knife("upload /").should_succeed ""
|
1517
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{bar foo})
|
1518
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ ])
|
1519
|
-
end
|
1520
|
-
end
|
1521
|
-
end
|
1522
|
-
|
1523
|
-
context "and has already added bar and foo as members of the org" do
|
1524
|
-
org_member "bar", "foo"
|
1525
|
-
|
1526
|
-
when_the_repository "wants to add foo and bar (different order)" do
|
1527
|
-
before do
|
1528
|
-
file "members.json", %w{foo bar}
|
1529
|
-
end
|
1530
|
-
|
1531
|
-
it "knife upload / does nothing" do
|
1532
|
-
knife("upload /").should_succeed ""
|
1533
|
-
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
|
1534
|
-
expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo})
|
1535
|
-
end
|
1536
|
-
end
|
1537
|
-
end
|
1538
|
-
end
|
1539
|
-
end
|
1540
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@chef.io>)
|
3
|
+
# Copyright:: Copyright 2013-2017, Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require "support/shared/integration/integration_helper"
|
19
|
+
require "chef/knife/upload"
|
20
|
+
require "chef/knife/diff"
|
21
|
+
require "chef/knife/raw"
|
22
|
+
require "chef/json_compat"
|
23
|
+
|
24
|
+
describe "knife upload", :workstation do
|
25
|
+
include IntegrationSupport
|
26
|
+
include KnifeSupport
|
27
|
+
|
28
|
+
context "without versioned cookbooks" do
|
29
|
+
|
30
|
+
when_the_chef_server "has one of each thing" do
|
31
|
+
|
32
|
+
before do
|
33
|
+
client "x", {}
|
34
|
+
cookbook "x", "1.0.0"
|
35
|
+
data_bag "x", { "y" => {} }
|
36
|
+
environment "x", {}
|
37
|
+
node "x", {}
|
38
|
+
role "x", {}
|
39
|
+
user "x", {}
|
40
|
+
end
|
41
|
+
|
42
|
+
when_the_repository "has only top-level directories" do
|
43
|
+
before do
|
44
|
+
directory "clients"
|
45
|
+
directory "cookbooks"
|
46
|
+
directory "data_bags"
|
47
|
+
directory "environments"
|
48
|
+
directory "nodes"
|
49
|
+
directory "roles"
|
50
|
+
directory "users"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "knife upload does nothing" do
|
54
|
+
knife("upload /").should_succeed ""
|
55
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
56
|
+
D\t/clients/chef-validator.json
|
57
|
+
D\t/clients/chef-webui.json
|
58
|
+
D\t/clients/x.json
|
59
|
+
D\t/cookbooks/x
|
60
|
+
D\t/data_bags/x
|
61
|
+
D\t/environments/_default.json
|
62
|
+
D\t/environments/x.json
|
63
|
+
D\t/nodes/x.json
|
64
|
+
D\t/roles/x.json
|
65
|
+
D\t/users/admin.json
|
66
|
+
D\t/users/x.json
|
67
|
+
EOM
|
68
|
+
end
|
69
|
+
|
70
|
+
it "knife upload --purge deletes everything" do
|
71
|
+
knife("upload --purge /").should_succeed(<<~EOM, stderr: "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
|
72
|
+
Deleted extra entry /clients/chef-validator.json (purge is on)
|
73
|
+
Deleted extra entry /clients/chef-webui.json (purge is on)
|
74
|
+
Deleted extra entry /clients/x.json (purge is on)
|
75
|
+
Deleted extra entry /cookbooks/x (purge is on)
|
76
|
+
Deleted extra entry /data_bags/x (purge is on)
|
77
|
+
Deleted extra entry /environments/x.json (purge is on)
|
78
|
+
Deleted extra entry /nodes/x.json (purge is on)
|
79
|
+
Deleted extra entry /roles/x.json (purge is on)
|
80
|
+
Deleted extra entry /users/admin.json (purge is on)
|
81
|
+
Deleted extra entry /users/x.json (purge is on)
|
82
|
+
EOM
|
83
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
84
|
+
D\t/environments/_default.json
|
85
|
+
EOM
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
when_the_repository "has an identical copy of each thing" do
|
90
|
+
|
91
|
+
before do
|
92
|
+
file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
93
|
+
file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
94
|
+
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
95
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
96
|
+
file "data_bags/x/y.json", {}
|
97
|
+
file "environments/_default.json", { "description" => "The default Chef environment" }
|
98
|
+
file "environments/x.json", {}
|
99
|
+
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
100
|
+
file "roles/x.json", {}
|
101
|
+
file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
102
|
+
file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
103
|
+
end
|
104
|
+
|
105
|
+
it "knife upload makes no changes" do
|
106
|
+
knife("upload /cookbooks/x").should_succeed ""
|
107
|
+
knife("diff --name-status /").should_succeed ""
|
108
|
+
end
|
109
|
+
|
110
|
+
it "knife upload --purge makes no changes" do
|
111
|
+
knife("upload --purge /").should_succeed ""
|
112
|
+
knife("diff --name-status /").should_succeed ""
|
113
|
+
end
|
114
|
+
|
115
|
+
context "except the role file" do
|
116
|
+
before do
|
117
|
+
file "roles/x.json", { "description" => "blarghle" }
|
118
|
+
end
|
119
|
+
|
120
|
+
it "knife upload changes the role" do
|
121
|
+
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
122
|
+
knife("diff --name-status /").should_succeed ""
|
123
|
+
end
|
124
|
+
it "knife upload --no-diff does not change the role" do
|
125
|
+
knife("upload --no-diff /").should_succeed ""
|
126
|
+
knife("diff --name-status /").should_succeed "M\t/roles/x.json\n"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "except the role file is textually different, but not ACTUALLY different" do
|
131
|
+
before do
|
132
|
+
file "roles/x.json", <<~EOM
|
133
|
+
{
|
134
|
+
"chef_type": "role",
|
135
|
+
"default_attributes": {
|
136
|
+
},
|
137
|
+
"env_run_lists": {
|
138
|
+
},
|
139
|
+
"json_class": "Chef::Role",
|
140
|
+
"name": "x",
|
141
|
+
"description": "",
|
142
|
+
"override_attributes": {
|
143
|
+
},
|
144
|
+
"run_list": [
|
145
|
+
|
146
|
+
]
|
147
|
+
}
|
148
|
+
EOM
|
149
|
+
end
|
150
|
+
|
151
|
+
it "knife upload / does not change anything" do
|
152
|
+
knife("upload /").should_succeed ""
|
153
|
+
knife("diff --name-status /").should_succeed ""
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context "the role is in ruby" do
|
158
|
+
before do
|
159
|
+
file "roles/x.rb", <<~EOM
|
160
|
+
name "x"
|
161
|
+
description "blargle"
|
162
|
+
EOM
|
163
|
+
end
|
164
|
+
|
165
|
+
it "knife upload changes the role" do
|
166
|
+
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
167
|
+
knife("diff --name-status /").should_succeed ""
|
168
|
+
end
|
169
|
+
|
170
|
+
it "knife upload --no-diff does not change the role" do
|
171
|
+
knife("upload --no-diff /").should_succeed ""
|
172
|
+
knife("diff --name-status /").should_succeed "M\t/roles/x.rb\n"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context "when cookbook metadata has a self-dependency" do
|
177
|
+
before do
|
178
|
+
file "cookbooks/x/metadata.rb", "name 'x'; version '1.0.0'; depends 'x'"
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should fail in Chef 13" do
|
182
|
+
expect { knife("upload /cookbooks") }.to raise_error RuntimeError, /Cookbook depends on itself/
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "as well as one extra copy of each thing" do
|
187
|
+
before do
|
188
|
+
file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
189
|
+
file "cookbooks/x/blah.rb", ""
|
190
|
+
file "cookbooks/y/metadata.rb", cb_metadata("y", "1.0.0")
|
191
|
+
file "data_bags/x/z.json", {}
|
192
|
+
file "data_bags/y/zz.json", {}
|
193
|
+
file "environments/y.json", {}
|
194
|
+
file "nodes/y.json", {}
|
195
|
+
file "roles/y.json", {}
|
196
|
+
file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
197
|
+
end
|
198
|
+
|
199
|
+
it "knife upload adds the new files" do
|
200
|
+
knife("upload /").should_succeed <<~EOM
|
201
|
+
Created /clients/y.json
|
202
|
+
Updated /cookbooks/x
|
203
|
+
Created /cookbooks/y
|
204
|
+
Created /data_bags/x/z.json
|
205
|
+
Created /data_bags/y
|
206
|
+
Created /data_bags/y/zz.json
|
207
|
+
Created /environments/y.json
|
208
|
+
Created /nodes/y.json
|
209
|
+
Created /roles/y.json
|
210
|
+
Created /users/y.json
|
211
|
+
EOM
|
212
|
+
knife("diff /").should_succeed ""
|
213
|
+
end
|
214
|
+
|
215
|
+
it "knife upload --no-diff adds the new files" do
|
216
|
+
knife("upload --no-diff /").should_succeed <<~EOM
|
217
|
+
Created /clients/y.json
|
218
|
+
Updated /cookbooks/x
|
219
|
+
Created /cookbooks/y
|
220
|
+
Created /data_bags/x/z.json
|
221
|
+
Created /data_bags/y
|
222
|
+
Created /data_bags/y/zz.json
|
223
|
+
Created /environments/y.json
|
224
|
+
Created /nodes/y.json
|
225
|
+
Created /roles/y.json
|
226
|
+
Created /users/y.json
|
227
|
+
EOM
|
228
|
+
knife("diff --name-status /").should_succeed ""
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
when_the_repository "is empty" do
|
234
|
+
it "knife upload does nothing" do
|
235
|
+
knife("upload /").should_succeed ""
|
236
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
237
|
+
D\t/clients
|
238
|
+
D\t/cookbooks
|
239
|
+
D\t/data_bags
|
240
|
+
D\t/environments
|
241
|
+
D\t/nodes
|
242
|
+
D\t/roles
|
243
|
+
D\t/users
|
244
|
+
EOM
|
245
|
+
end
|
246
|
+
|
247
|
+
it "knife upload --purge deletes nothing" do
|
248
|
+
knife("upload --purge /").should_fail <<~EOM
|
249
|
+
ERROR: /clients cannot be deleted.
|
250
|
+
ERROR: /cookbooks cannot be deleted.
|
251
|
+
ERROR: /data_bags cannot be deleted.
|
252
|
+
ERROR: /environments cannot be deleted.
|
253
|
+
ERROR: /nodes cannot be deleted.
|
254
|
+
ERROR: /roles cannot be deleted.
|
255
|
+
ERROR: /users cannot be deleted.
|
256
|
+
EOM
|
257
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
258
|
+
D\t/clients
|
259
|
+
D\t/cookbooks
|
260
|
+
D\t/data_bags
|
261
|
+
D\t/environments
|
262
|
+
D\t/nodes
|
263
|
+
D\t/roles
|
264
|
+
D\t/users
|
265
|
+
EOM
|
266
|
+
end
|
267
|
+
|
268
|
+
context "when current directory is top level" do
|
269
|
+
before do
|
270
|
+
cwd "."
|
271
|
+
end
|
272
|
+
|
273
|
+
it "knife upload with no parameters reports an error" do
|
274
|
+
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
when_the_chef_server "is empty" do
|
281
|
+
when_the_repository "has a data bag item" do
|
282
|
+
|
283
|
+
before do
|
284
|
+
file "data_bags/x/y.json", { "foo" => "bar" }
|
285
|
+
end
|
286
|
+
|
287
|
+
it "knife upload of the data bag uploads only the values in the data bag item and no other" do
|
288
|
+
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
289
|
+
Created /data_bags/x
|
290
|
+
Created /data_bags/x/y.json
|
291
|
+
EOM
|
292
|
+
knife("diff --name-status /data_bags").should_succeed <<EOM
|
293
|
+
EOM
|
294
|
+
expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false).keys.sort).to eq(%w{foo id})
|
295
|
+
end
|
296
|
+
|
297
|
+
it "knife upload /data_bags/x /data_bags/x/y.json uploads x once" do
|
298
|
+
knife("upload /data_bags/x /data_bags/x/y.json").should_succeed <<~EOM
|
299
|
+
Created /data_bags/x
|
300
|
+
Created /data_bags/x/y.json
|
301
|
+
EOM
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
when_the_repository "has a data bag item with keys chef_type and data_bag" do
|
306
|
+
|
307
|
+
before do
|
308
|
+
file "data_bags/x/y.json", { "chef_type" => "aaa", "data_bag" => "bbb" }
|
309
|
+
end
|
310
|
+
|
311
|
+
it "upload preserves chef_type and data_bag" do
|
312
|
+
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
313
|
+
Created /data_bags/x
|
314
|
+
Created /data_bags/x/y.json
|
315
|
+
EOM
|
316
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
317
|
+
result = Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false)
|
318
|
+
expect(result.keys.sort).to eq(%w{chef_type data_bag id})
|
319
|
+
expect(result["chef_type"]).to eq("aaa")
|
320
|
+
expect(result["data_bag"]).to eq("bbb")
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
# Test upload of an item when the other end doesn't even have the container
|
325
|
+
when_the_repository "has two data bag items" do
|
326
|
+
before do
|
327
|
+
file "data_bags/x/y.json", {}
|
328
|
+
file "data_bags/x/z.json", {}
|
329
|
+
end
|
330
|
+
it "knife upload of one data bag item itself succeeds" do
|
331
|
+
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
332
|
+
Created /data_bags/x
|
333
|
+
Created /data_bags/x/y.json
|
334
|
+
EOM
|
335
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
336
|
+
A\t/data_bags/x/z.json
|
337
|
+
EOM
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
when_the_chef_server "has three data bag items" do
|
343
|
+
|
344
|
+
before do
|
345
|
+
data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
|
346
|
+
end
|
347
|
+
|
348
|
+
when_the_repository "has a modified, unmodified, added and deleted data bag item" do
|
349
|
+
before do
|
350
|
+
file "data_bags/x/added.json", {}
|
351
|
+
file "data_bags/x/modified.json", { "foo" => "bar" }
|
352
|
+
file "data_bags/x/unmodified.json", {}
|
353
|
+
end
|
354
|
+
|
355
|
+
it "knife upload of the modified file succeeds" do
|
356
|
+
knife("upload /data_bags/x/modified.json").should_succeed <<~EOM
|
357
|
+
Updated /data_bags/x/modified.json
|
358
|
+
EOM
|
359
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
360
|
+
D\t/data_bags/x/deleted.json
|
361
|
+
A\t/data_bags/x/added.json
|
362
|
+
EOM
|
363
|
+
end
|
364
|
+
it "knife upload of the unmodified file does nothing" do
|
365
|
+
knife("upload /data_bags/x/unmodified.json").should_succeed ""
|
366
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
367
|
+
D\t/data_bags/x/deleted.json
|
368
|
+
M\t/data_bags/x/modified.json
|
369
|
+
A\t/data_bags/x/added.json
|
370
|
+
EOM
|
371
|
+
end
|
372
|
+
it "knife upload of the added file succeeds" do
|
373
|
+
knife("upload /data_bags/x/added.json").should_succeed <<~EOM
|
374
|
+
Created /data_bags/x/added.json
|
375
|
+
EOM
|
376
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
377
|
+
D\t/data_bags/x/deleted.json
|
378
|
+
M\t/data_bags/x/modified.json
|
379
|
+
EOM
|
380
|
+
end
|
381
|
+
it "knife upload of the deleted file does nothing" do
|
382
|
+
knife("upload /data_bags/x/deleted.json").should_succeed ""
|
383
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
384
|
+
D\t/data_bags/x/deleted.json
|
385
|
+
M\t/data_bags/x/modified.json
|
386
|
+
A\t/data_bags/x/added.json
|
387
|
+
EOM
|
388
|
+
end
|
389
|
+
it "knife upload --purge of the deleted file deletes it" do
|
390
|
+
knife("upload --purge /data_bags/x/deleted.json").should_succeed <<~EOM
|
391
|
+
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
392
|
+
EOM
|
393
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
394
|
+
M\t/data_bags/x/modified.json
|
395
|
+
A\t/data_bags/x/added.json
|
396
|
+
EOM
|
397
|
+
end
|
398
|
+
it "knife upload of the entire data bag uploads everything" do
|
399
|
+
knife("upload /data_bags/x").should_succeed <<~EOM
|
400
|
+
Created /data_bags/x/added.json
|
401
|
+
Updated /data_bags/x/modified.json
|
402
|
+
EOM
|
403
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
404
|
+
D\t/data_bags/x/deleted.json
|
405
|
+
EOM
|
406
|
+
end
|
407
|
+
it "knife upload --purge of the entire data bag uploads everything" do
|
408
|
+
knife("upload --purge /data_bags/x").should_succeed <<~EOM
|
409
|
+
Created /data_bags/x/added.json
|
410
|
+
Updated /data_bags/x/modified.json
|
411
|
+
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
412
|
+
EOM
|
413
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
414
|
+
end
|
415
|
+
context "when cwd is the /data_bags directory" do
|
416
|
+
|
417
|
+
before do
|
418
|
+
cwd "data_bags"
|
419
|
+
end
|
420
|
+
|
421
|
+
it "knife upload fails" do
|
422
|
+
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
423
|
+
end
|
424
|
+
|
425
|
+
it "knife upload --purge . uploads everything" do
|
426
|
+
knife("upload --purge .").should_succeed <<~EOM
|
427
|
+
Created x/added.json
|
428
|
+
Updated x/modified.json
|
429
|
+
Deleted extra entry x/deleted.json (purge is on)
|
430
|
+
EOM
|
431
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
432
|
+
end
|
433
|
+
it "knife upload --purge * uploads everything" do
|
434
|
+
knife("upload --purge *").should_succeed <<~EOM
|
435
|
+
Created x/added.json
|
436
|
+
Updated x/modified.json
|
437
|
+
Deleted extra entry x/deleted.json (purge is on)
|
438
|
+
EOM
|
439
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
440
|
+
end
|
441
|
+
end
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
# Cookbook upload is a funny thing ... direct cookbook upload works, but
|
446
|
+
# upload of a file is designed not to work at present. Make sure that is the
|
447
|
+
# case.
|
448
|
+
when_the_chef_server "has a cookbook" do
|
449
|
+
|
450
|
+
before do
|
451
|
+
cookbook "x", "1.0.0", { "z.rb" => "" }
|
452
|
+
end
|
453
|
+
|
454
|
+
when_the_repository "has a modified, extra and missing file for the cookbook" do
|
455
|
+
before do
|
456
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
|
457
|
+
file "cookbooks/x/y.rb", "hi"
|
458
|
+
end
|
459
|
+
|
460
|
+
it "knife upload of any individual file fails" do
|
461
|
+
knife("upload /cookbooks/x/metadata.rb").should_fail "ERROR: /cookbooks/x/metadata.rb cannot be updated.\n"
|
462
|
+
knife("upload /cookbooks/x/y.rb").should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n"
|
463
|
+
knife("upload --purge /cookbooks/x/z.rb").should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n"
|
464
|
+
end
|
465
|
+
# TODO this is a bit of an inconsistency: if we didn't specify --purge,
|
466
|
+
# technically we shouldn't have deleted missing files. But ... cookbooks
|
467
|
+
# are a special case.
|
468
|
+
it "knife upload of the cookbook itself succeeds" do
|
469
|
+
knife("upload /cookbooks/x").should_succeed <<~EOM
|
470
|
+
Updated /cookbooks/x
|
471
|
+
EOM
|
472
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
473
|
+
end
|
474
|
+
it "knife upload --purge of the cookbook itself succeeds" do
|
475
|
+
knife("upload /cookbooks/x").should_succeed <<~EOM
|
476
|
+
Updated /cookbooks/x
|
477
|
+
EOM
|
478
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
479
|
+
end
|
480
|
+
end
|
481
|
+
when_the_repository "has a missing file for the cookbook" do
|
482
|
+
|
483
|
+
before do
|
484
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
485
|
+
end
|
486
|
+
|
487
|
+
it "knife upload of the cookbook succeeds" do
|
488
|
+
knife("upload /cookbooks/x").should_succeed <<~EOM
|
489
|
+
Updated /cookbooks/x
|
490
|
+
EOM
|
491
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
492
|
+
end
|
493
|
+
end
|
494
|
+
when_the_repository "has an extra file for the cookbook" do
|
495
|
+
|
496
|
+
before do
|
497
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
498
|
+
file "cookbooks/x/z.rb", ""
|
499
|
+
file "cookbooks/x/blah.rb", ""
|
500
|
+
end
|
501
|
+
|
502
|
+
it "knife upload of the cookbook succeeds" do
|
503
|
+
knife("upload /cookbooks/x").should_succeed <<~EOM
|
504
|
+
Updated /cookbooks/x
|
505
|
+
EOM
|
506
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
when_the_repository "has a different file in the cookbook" do
|
511
|
+
before do
|
512
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
513
|
+
end
|
514
|
+
|
515
|
+
it "knife upload --freeze freezes the cookbook" do
|
516
|
+
knife("upload --freeze /cookbooks/x").should_succeed <<~EOM
|
517
|
+
Updated /cookbooks/x
|
518
|
+
EOM
|
519
|
+
# Modify a file and attempt to upload
|
520
|
+
file "cookbooks/x/metadata.rb", 'name "x"; version "1.0.0"#different'
|
521
|
+
knife("upload /cookbooks/x").should_fail "ERROR: /cookbooks failed to write: Cookbook x is frozen\n"
|
522
|
+
end
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
526
|
+
when_the_chef_server "has a frozen cookbook" do
|
527
|
+
before do
|
528
|
+
cookbook "frozencook", "1.0.0", {}, frozen: true
|
529
|
+
end
|
530
|
+
|
531
|
+
when_the_repository "has an update to said cookbook" do
|
532
|
+
|
533
|
+
before do
|
534
|
+
file "cookbooks/frozencook/metadata.rb", cb_metadata("frozencook", "1.0.0", "# This is different")
|
535
|
+
end
|
536
|
+
|
537
|
+
it "knife upload fails to upload the frozen cookbook" do
|
538
|
+
knife("upload /cookbooks/frozencook").should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n"
|
539
|
+
end
|
540
|
+
it "knife upload --force uploads the frozen cookbook" do
|
541
|
+
knife("upload --force /cookbooks/frozencook").should_succeed <<~EOM
|
542
|
+
Updated /cookbooks/frozencook
|
543
|
+
EOM
|
544
|
+
end
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
548
|
+
when_the_repository "has a cookbook" do
|
549
|
+
before do
|
550
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
551
|
+
file "cookbooks/x/onlyin1.0.0.rb", "old_text"
|
552
|
+
end
|
553
|
+
|
554
|
+
when_the_chef_server "has a later version for the cookbook" do
|
555
|
+
before do
|
556
|
+
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
557
|
+
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
558
|
+
end
|
559
|
+
|
560
|
+
it "knife upload /cookbooks/x uploads the local version" do
|
561
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
562
|
+
M\t/cookbooks/x/metadata.rb
|
563
|
+
D\t/cookbooks/x/onlyin1.0.1.rb
|
564
|
+
A\t/cookbooks/x/onlyin1.0.0.rb
|
565
|
+
EOM
|
566
|
+
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
567
|
+
Updated /cookbooks/x
|
568
|
+
EOM
|
569
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
570
|
+
M\t/cookbooks/x/metadata.rb
|
571
|
+
D\t/cookbooks/x/onlyin1.0.1.rb
|
572
|
+
A\t/cookbooks/x/onlyin1.0.0.rb
|
573
|
+
EOM
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
577
|
+
when_the_chef_server "has an earlier version for the cookbook" do
|
578
|
+
before do
|
579
|
+
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
580
|
+
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
581
|
+
end
|
582
|
+
|
583
|
+
it "knife upload /cookbooks/x uploads the local version" do
|
584
|
+
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
585
|
+
Updated /cookbooks/x
|
586
|
+
EOM
|
587
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
588
|
+
end
|
589
|
+
end
|
590
|
+
|
591
|
+
when_the_chef_server "has a later version for the cookbook, and no current version" do
|
592
|
+
before do
|
593
|
+
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
594
|
+
end
|
595
|
+
|
596
|
+
it "knife upload /cookbooks/x uploads the local version" do
|
597
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
598
|
+
M\t/cookbooks/x/metadata.rb
|
599
|
+
D\t/cookbooks/x/onlyin1.0.1.rb
|
600
|
+
A\t/cookbooks/x/onlyin1.0.0.rb
|
601
|
+
EOM
|
602
|
+
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
603
|
+
Updated /cookbooks/x
|
604
|
+
EOM
|
605
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
606
|
+
M\t/cookbooks/x/metadata.rb
|
607
|
+
D\t/cookbooks/x/onlyin1.0.1.rb
|
608
|
+
A\t/cookbooks/x/onlyin1.0.0.rb
|
609
|
+
EOM
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
when_the_chef_server "has an earlier version for the cookbook, and no current version" do
|
614
|
+
before do
|
615
|
+
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
616
|
+
end
|
617
|
+
|
618
|
+
it "knife upload /cookbooks/x uploads the new version" do
|
619
|
+
knife("upload --purge /cookbooks/x").should_succeed <<~EOM
|
620
|
+
Updated /cookbooks/x
|
621
|
+
EOM
|
622
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
623
|
+
end
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
when_the_chef_server "has an environment" do
|
628
|
+
before do
|
629
|
+
environment "x", {}
|
630
|
+
end
|
631
|
+
|
632
|
+
when_the_repository "has an environment with bad JSON" do
|
633
|
+
before do
|
634
|
+
file "environments/x.json", "{"
|
635
|
+
end
|
636
|
+
|
637
|
+
it "knife upload tries and fails" do
|
638
|
+
error1 = <<~EOH
|
639
|
+
WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
|
640
|
+
{
|
641
|
+
(right here) ------^
|
642
|
+
|
643
|
+
ERROR: /environments/x.json failed to write: Parse error reading JSON: parse error: premature EOF
|
644
|
+
{
|
645
|
+
(right here) ------^
|
646
|
+
EOH
|
647
|
+
|
648
|
+
warn = <<~EOH
|
649
|
+
WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
|
650
|
+
{
|
651
|
+
(right here) ------^
|
652
|
+
|
653
|
+
EOH
|
654
|
+
knife("upload /environments/x.json").should_fail(error1)
|
655
|
+
knife("diff --name-status /environments/x.json").should_succeed("M\t/environments/x.json\n", stderr: warn)
|
656
|
+
end
|
657
|
+
end
|
658
|
+
|
659
|
+
when_the_repository "has the same environment with the wrong name in the file" do
|
660
|
+
before do
|
661
|
+
file "environments/x.json", { "name" => "y" }
|
662
|
+
end
|
663
|
+
it "knife upload fails" do
|
664
|
+
knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
|
665
|
+
knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
|
666
|
+
end
|
667
|
+
end
|
668
|
+
|
669
|
+
when_the_repository "has the same environment with no name in the file" do
|
670
|
+
before do
|
671
|
+
file "environments/x.json", { "description" => "hi" }
|
672
|
+
end
|
673
|
+
it "knife upload succeeds" do
|
674
|
+
knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
|
675
|
+
knife("diff --name-status /environments/x.json").should_succeed ""
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
when_the_chef_server "is empty" do
|
681
|
+
|
682
|
+
when_the_repository "has an environment with the wrong name in the file" do
|
683
|
+
before do
|
684
|
+
file "environments/x.json", { "name" => "y" }
|
685
|
+
end
|
686
|
+
it "knife upload fails" do
|
687
|
+
knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
|
688
|
+
knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
|
689
|
+
end
|
690
|
+
end
|
691
|
+
|
692
|
+
when_the_repository "has an environment with no name in the file" do
|
693
|
+
|
694
|
+
before do
|
695
|
+
file "environments/x.json", { "description" => "hi" }
|
696
|
+
end
|
697
|
+
it "knife upload succeeds" do
|
698
|
+
knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
|
699
|
+
knife("diff --name-status /environments/x.json").should_succeed ""
|
700
|
+
end
|
701
|
+
end
|
702
|
+
|
703
|
+
when_the_repository "has a data bag with no id in the file" do
|
704
|
+
before do
|
705
|
+
file "data_bags/bag/x.json", { "foo" => "bar" }
|
706
|
+
end
|
707
|
+
it "knife upload succeeds" do
|
708
|
+
knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
|
709
|
+
knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
|
710
|
+
end
|
711
|
+
end
|
712
|
+
end
|
713
|
+
when_the_chef_server "is empty" do
|
714
|
+
when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
|
715
|
+
before do
|
716
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
|
717
|
+
end
|
718
|
+
it "knife upload succeeds" do
|
719
|
+
knife("upload /cookbooks/x").should_succeed <<~EOM
|
720
|
+
Created /cookbooks/x
|
721
|
+
EOM
|
722
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
723
|
+
end
|
724
|
+
end
|
725
|
+
end
|
726
|
+
end # without versioned cookbooks
|
727
|
+
|
728
|
+
with_versioned_cookbooks do
|
729
|
+
when_the_chef_server "has one of each thing" do
|
730
|
+
|
731
|
+
before do
|
732
|
+
client "x", {}
|
733
|
+
cookbook "x", "1.0.0"
|
734
|
+
data_bag "x", { "y" => {} }
|
735
|
+
environment "x", {}
|
736
|
+
node "x", {}
|
737
|
+
role "x", {}
|
738
|
+
user "x", {}
|
739
|
+
end
|
740
|
+
|
741
|
+
when_the_repository "has only top-level directories" do
|
742
|
+
before do
|
743
|
+
directory "clients"
|
744
|
+
directory "cookbooks"
|
745
|
+
directory "data_bags"
|
746
|
+
directory "environments"
|
747
|
+
directory "nodes"
|
748
|
+
directory "roles"
|
749
|
+
directory "users"
|
750
|
+
end
|
751
|
+
|
752
|
+
it "knife upload does nothing" do
|
753
|
+
knife("upload /").should_succeed ""
|
754
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
755
|
+
D\t/clients/chef-validator.json
|
756
|
+
D\t/clients/chef-webui.json
|
757
|
+
D\t/clients/x.json
|
758
|
+
D\t/cookbooks/x-1.0.0
|
759
|
+
D\t/data_bags/x
|
760
|
+
D\t/environments/_default.json
|
761
|
+
D\t/environments/x.json
|
762
|
+
D\t/nodes/x.json
|
763
|
+
D\t/roles/x.json
|
764
|
+
D\t/users/admin.json
|
765
|
+
D\t/users/x.json
|
766
|
+
EOM
|
767
|
+
end
|
768
|
+
|
769
|
+
it "knife upload --purge deletes everything" do
|
770
|
+
knife("upload --purge /").should_succeed(<<~EOM, stderr: "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
|
771
|
+
Deleted extra entry /clients/chef-validator.json (purge is on)
|
772
|
+
Deleted extra entry /clients/chef-webui.json (purge is on)
|
773
|
+
Deleted extra entry /clients/x.json (purge is on)
|
774
|
+
Deleted extra entry /cookbooks/x-1.0.0 (purge is on)
|
775
|
+
Deleted extra entry /data_bags/x (purge is on)
|
776
|
+
Deleted extra entry /environments/x.json (purge is on)
|
777
|
+
Deleted extra entry /nodes/x.json (purge is on)
|
778
|
+
Deleted extra entry /roles/x.json (purge is on)
|
779
|
+
Deleted extra entry /users/admin.json (purge is on)
|
780
|
+
Deleted extra entry /users/x.json (purge is on)
|
781
|
+
EOM
|
782
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
783
|
+
D\t/environments/_default.json
|
784
|
+
EOM
|
785
|
+
end
|
786
|
+
end
|
787
|
+
|
788
|
+
when_the_repository "has an identical copy of each thing" do
|
789
|
+
before do
|
790
|
+
file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
791
|
+
file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
792
|
+
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
793
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
794
|
+
file "data_bags/x/y.json", {}
|
795
|
+
file "environments/_default.json", { "description" => "The default Chef environment" }
|
796
|
+
file "environments/x.json", {}
|
797
|
+
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
798
|
+
file "roles/x.json", {}
|
799
|
+
file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
|
800
|
+
file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
801
|
+
end
|
802
|
+
|
803
|
+
it "knife upload makes no changes" do
|
804
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed ""
|
805
|
+
knife("diff --name-status /").should_succeed ""
|
806
|
+
end
|
807
|
+
|
808
|
+
it "knife upload --purge makes no changes" do
|
809
|
+
knife("upload --purge /").should_succeed ""
|
810
|
+
knife("diff --name-status /").should_succeed ""
|
811
|
+
end
|
812
|
+
|
813
|
+
context "except the role file" do
|
814
|
+
before do
|
815
|
+
file "roles/x.json", { "description" => "blarghle" }
|
816
|
+
end
|
817
|
+
|
818
|
+
it "knife upload changes the role" do
|
819
|
+
knife("upload /").should_succeed "Updated /roles/x.json\n"
|
820
|
+
knife("diff --name-status /").should_succeed ""
|
821
|
+
end
|
822
|
+
end
|
823
|
+
|
824
|
+
context "except the role file is textually different, but not ACTUALLY different" do
|
825
|
+
|
826
|
+
before do
|
827
|
+
file "roles/x.json", <<~EOM
|
828
|
+
{
|
829
|
+
"chef_type": "role",
|
830
|
+
"default_attributes": {
|
831
|
+
},
|
832
|
+
"env_run_lists": {
|
833
|
+
},
|
834
|
+
"json_class": "Chef::Role",
|
835
|
+
"name": "x",
|
836
|
+
"description": "",
|
837
|
+
"override_attributes": {
|
838
|
+
},
|
839
|
+
"run_list": [
|
840
|
+
|
841
|
+
]
|
842
|
+
}
|
843
|
+
EOM
|
844
|
+
end
|
845
|
+
|
846
|
+
it "knife upload / does not change anything" do
|
847
|
+
knife("upload /").should_succeed ""
|
848
|
+
knife("diff --name-status /").should_succeed ""
|
849
|
+
end
|
850
|
+
end
|
851
|
+
|
852
|
+
context "as well as one extra copy of each thing" do
|
853
|
+
before do
|
854
|
+
file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
855
|
+
file "cookbooks/x-1.0.0/blah.rb", ""
|
856
|
+
file "cookbooks/x-2.0.0/metadata.rb", cb_metadata("x", "2.0.0")
|
857
|
+
file "cookbooks/y-1.0.0/metadata.rb", cb_metadata("y", "1.0.0")
|
858
|
+
file "data_bags/x/z.json", {}
|
859
|
+
file "data_bags/y/zz.json", {}
|
860
|
+
file "environments/y.json", {}
|
861
|
+
file "nodes/y.json", {}
|
862
|
+
file "roles/y.json", {}
|
863
|
+
file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
864
|
+
end
|
865
|
+
|
866
|
+
it "knife upload adds the new files" do
|
867
|
+
knife("upload /").should_succeed <<~EOM
|
868
|
+
Created /clients/y.json
|
869
|
+
Updated /cookbooks/x-1.0.0
|
870
|
+
Created /cookbooks/x-2.0.0
|
871
|
+
Created /cookbooks/y-1.0.0
|
872
|
+
Created /data_bags/x/z.json
|
873
|
+
Created /data_bags/y
|
874
|
+
Created /data_bags/y/zz.json
|
875
|
+
Created /environments/y.json
|
876
|
+
Created /nodes/y.json
|
877
|
+
Created /roles/y.json
|
878
|
+
Created /users/y.json
|
879
|
+
EOM
|
880
|
+
knife("diff --name-status /").should_succeed ""
|
881
|
+
end
|
882
|
+
end
|
883
|
+
end
|
884
|
+
|
885
|
+
when_the_repository "is empty" do
|
886
|
+
it "knife upload does nothing" do
|
887
|
+
knife("upload /").should_succeed ""
|
888
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
889
|
+
D\t/clients
|
890
|
+
D\t/cookbooks
|
891
|
+
D\t/data_bags
|
892
|
+
D\t/environments
|
893
|
+
D\t/nodes
|
894
|
+
D\t/roles
|
895
|
+
D\t/users
|
896
|
+
EOM
|
897
|
+
end
|
898
|
+
|
899
|
+
it "knife upload --purge deletes nothing" do
|
900
|
+
knife("upload --purge /").should_fail <<~EOM
|
901
|
+
ERROR: /clients cannot be deleted.
|
902
|
+
ERROR: /cookbooks cannot be deleted.
|
903
|
+
ERROR: /data_bags cannot be deleted.
|
904
|
+
ERROR: /environments cannot be deleted.
|
905
|
+
ERROR: /nodes cannot be deleted.
|
906
|
+
ERROR: /roles cannot be deleted.
|
907
|
+
ERROR: /users cannot be deleted.
|
908
|
+
EOM
|
909
|
+
knife("diff --name-status /").should_succeed <<~EOM
|
910
|
+
D\t/clients
|
911
|
+
D\t/cookbooks
|
912
|
+
D\t/data_bags
|
913
|
+
D\t/environments
|
914
|
+
D\t/nodes
|
915
|
+
D\t/roles
|
916
|
+
D\t/users
|
917
|
+
EOM
|
918
|
+
end
|
919
|
+
|
920
|
+
context "when current directory is top level" do
|
921
|
+
before do
|
922
|
+
cwd "."
|
923
|
+
end
|
924
|
+
it "knife upload with no parameters reports an error" do
|
925
|
+
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
926
|
+
end
|
927
|
+
end
|
928
|
+
end
|
929
|
+
end
|
930
|
+
|
931
|
+
# Test upload of an item when the other end doesn't even have the container
|
932
|
+
when_the_chef_server "is empty" do
|
933
|
+
when_the_repository "has two data bag items" do
|
934
|
+
before do
|
935
|
+
file "data_bags/x/y.json", {}
|
936
|
+
file "data_bags/x/z.json", {}
|
937
|
+
end
|
938
|
+
|
939
|
+
it "knife upload of one data bag item itself succeeds" do
|
940
|
+
knife("upload /data_bags/x/y.json").should_succeed <<~EOM
|
941
|
+
Created /data_bags/x
|
942
|
+
Created /data_bags/x/y.json
|
943
|
+
EOM
|
944
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
945
|
+
A\t/data_bags/x/z.json
|
946
|
+
EOM
|
947
|
+
end
|
948
|
+
end
|
949
|
+
end
|
950
|
+
|
951
|
+
when_the_chef_server "has three data bag items" do
|
952
|
+
before do
|
953
|
+
data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
|
954
|
+
end
|
955
|
+
when_the_repository "has a modified, unmodified, added and deleted data bag item" do
|
956
|
+
before do
|
957
|
+
file "data_bags/x/added.json", {}
|
958
|
+
file "data_bags/x/modified.json", { "foo" => "bar" }
|
959
|
+
file "data_bags/x/unmodified.json", {}
|
960
|
+
end
|
961
|
+
|
962
|
+
it "knife upload of the modified file succeeds" do
|
963
|
+
knife("upload /data_bags/x/modified.json").should_succeed <<~EOM
|
964
|
+
Updated /data_bags/x/modified.json
|
965
|
+
EOM
|
966
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
967
|
+
D\t/data_bags/x/deleted.json
|
968
|
+
A\t/data_bags/x/added.json
|
969
|
+
EOM
|
970
|
+
end
|
971
|
+
it "knife upload of the unmodified file does nothing" do
|
972
|
+
knife("upload /data_bags/x/unmodified.json").should_succeed ""
|
973
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
974
|
+
D\t/data_bags/x/deleted.json
|
975
|
+
M\t/data_bags/x/modified.json
|
976
|
+
A\t/data_bags/x/added.json
|
977
|
+
EOM
|
978
|
+
end
|
979
|
+
it "knife upload of the added file succeeds" do
|
980
|
+
knife("upload /data_bags/x/added.json").should_succeed <<~EOM
|
981
|
+
Created /data_bags/x/added.json
|
982
|
+
EOM
|
983
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
984
|
+
D\t/data_bags/x/deleted.json
|
985
|
+
M\t/data_bags/x/modified.json
|
986
|
+
EOM
|
987
|
+
end
|
988
|
+
it "knife upload of the deleted file does nothing" do
|
989
|
+
knife("upload /data_bags/x/deleted.json").should_succeed ""
|
990
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
991
|
+
D\t/data_bags/x/deleted.json
|
992
|
+
M\t/data_bags/x/modified.json
|
993
|
+
A\t/data_bags/x/added.json
|
994
|
+
EOM
|
995
|
+
end
|
996
|
+
it "knife upload --purge of the deleted file deletes it" do
|
997
|
+
knife("upload --purge /data_bags/x/deleted.json").should_succeed <<~EOM
|
998
|
+
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
999
|
+
EOM
|
1000
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
1001
|
+
M\t/data_bags/x/modified.json
|
1002
|
+
A\t/data_bags/x/added.json
|
1003
|
+
EOM
|
1004
|
+
end
|
1005
|
+
it "knife upload of the entire data bag uploads everything" do
|
1006
|
+
knife("upload /data_bags/x").should_succeed <<~EOM
|
1007
|
+
Created /data_bags/x/added.json
|
1008
|
+
Updated /data_bags/x/modified.json
|
1009
|
+
EOM
|
1010
|
+
knife("diff --name-status /data_bags").should_succeed <<~EOM
|
1011
|
+
D\t/data_bags/x/deleted.json
|
1012
|
+
EOM
|
1013
|
+
end
|
1014
|
+
it "knife upload --purge of the entire data bag uploads everything" do
|
1015
|
+
knife("upload --purge /data_bags/x").should_succeed <<~EOM
|
1016
|
+
Created /data_bags/x/added.json
|
1017
|
+
Updated /data_bags/x/modified.json
|
1018
|
+
Deleted extra entry /data_bags/x/deleted.json (purge is on)
|
1019
|
+
EOM
|
1020
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
1021
|
+
end
|
1022
|
+
context "when cwd is the /data_bags directory" do
|
1023
|
+
before do
|
1024
|
+
cwd "data_bags"
|
1025
|
+
end
|
1026
|
+
it "knife upload fails" do
|
1027
|
+
knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", stdout: /USAGE/
|
1028
|
+
end
|
1029
|
+
it "knife upload --purge . uploads everything" do
|
1030
|
+
knife("upload --purge .").should_succeed <<~EOM
|
1031
|
+
Created x/added.json
|
1032
|
+
Updated x/modified.json
|
1033
|
+
Deleted extra entry x/deleted.json (purge is on)
|
1034
|
+
EOM
|
1035
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
1036
|
+
end
|
1037
|
+
it "knife upload --purge * uploads everything" do
|
1038
|
+
knife("upload --purge *").should_succeed <<~EOM
|
1039
|
+
Created x/added.json
|
1040
|
+
Updated x/modified.json
|
1041
|
+
Deleted extra entry x/deleted.json (purge is on)
|
1042
|
+
EOM
|
1043
|
+
knife("diff --name-status /data_bags").should_succeed ""
|
1044
|
+
end
|
1045
|
+
end
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
# Cookbook upload is a funny thing ... direct cookbook upload works, but
|
1050
|
+
# upload of a file is designed not to work at present. Make sure that is the
|
1051
|
+
# case.
|
1052
|
+
when_the_chef_server "has a cookbook" do
|
1053
|
+
before do
|
1054
|
+
cookbook "x", "1.0.0", { "z.rb" => "" }
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
when_the_repository "has a modified, extra and missing file for the cookbook" do
|
1058
|
+
before do
|
1059
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
|
1060
|
+
file "cookbooks/x-1.0.0/y.rb", "hi"
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
it "knife upload of any individual file fails" do
|
1064
|
+
knife("upload /cookbooks/x-1.0.0/metadata.rb").should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n"
|
1065
|
+
knife("upload /cookbooks/x-1.0.0/y.rb").should_fail "ERROR: /cookbooks/x-1.0.0 cannot have a child created under it.\n"
|
1066
|
+
knife("upload --purge /cookbooks/x-1.0.0/z.rb").should_fail "ERROR: /cookbooks/x-1.0.0/z.rb cannot be deleted.\n"
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
# TODO this is a bit of an inconsistency: if we didn't specify --purge,
|
1070
|
+
# technically we shouldn't have deleted missing files. But ... cookbooks
|
1071
|
+
# are a special case.
|
1072
|
+
it "knife upload of the cookbook itself succeeds" do
|
1073
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1074
|
+
Updated /cookbooks/x-1.0.0
|
1075
|
+
EOM
|
1076
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1077
|
+
end
|
1078
|
+
|
1079
|
+
it "knife upload --purge of the cookbook itself succeeds" do
|
1080
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1081
|
+
Updated /cookbooks/x-1.0.0
|
1082
|
+
EOM
|
1083
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1084
|
+
end
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
when_the_repository "has a missing file for the cookbook" do
|
1088
|
+
before do
|
1089
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1090
|
+
end
|
1091
|
+
|
1092
|
+
it "knife upload of the cookbook succeeds" do
|
1093
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1094
|
+
Updated /cookbooks/x-1.0.0
|
1095
|
+
EOM
|
1096
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1097
|
+
end
|
1098
|
+
end
|
1099
|
+
|
1100
|
+
when_the_repository "has an extra file for the cookbook" do
|
1101
|
+
before do
|
1102
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1103
|
+
file "cookbooks/x-1.0.0/z.rb", ""
|
1104
|
+
file "cookbooks/x-1.0.0/blah.rb", ""
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
it "knife upload of the cookbook succeeds" do
|
1108
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1109
|
+
Updated /cookbooks/x-1.0.0
|
1110
|
+
EOM
|
1111
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1112
|
+
end
|
1113
|
+
end
|
1114
|
+
end
|
1115
|
+
|
1116
|
+
when_the_repository "has a cookbook" do
|
1117
|
+
before do
|
1118
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
|
1119
|
+
file "cookbooks/x-1.0.0/onlyin1.0.0.rb", "old_text"
|
1120
|
+
end
|
1121
|
+
|
1122
|
+
when_the_chef_server "has a later version for the cookbook" do
|
1123
|
+
before do
|
1124
|
+
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
1125
|
+
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
it "knife upload /cookbooks uploads the local version" do
|
1129
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
1130
|
+
M\t/cookbooks/x-1.0.0/onlyin1.0.0.rb
|
1131
|
+
D\t/cookbooks/x-1.0.1
|
1132
|
+
EOM
|
1133
|
+
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1134
|
+
Updated /cookbooks/x-1.0.0
|
1135
|
+
Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
|
1136
|
+
EOM
|
1137
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1138
|
+
end
|
1139
|
+
end
|
1140
|
+
|
1141
|
+
when_the_chef_server "has an earlier version for the cookbook" do
|
1142
|
+
before do
|
1143
|
+
cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
|
1144
|
+
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
1145
|
+
end
|
1146
|
+
it "knife upload /cookbooks uploads the local version" do
|
1147
|
+
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1148
|
+
Updated /cookbooks/x-1.0.0
|
1149
|
+
Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
|
1150
|
+
EOM
|
1151
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1152
|
+
end
|
1153
|
+
end
|
1154
|
+
|
1155
|
+
when_the_chef_server "has a later version for the cookbook, and no current version" do
|
1156
|
+
before do
|
1157
|
+
cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
it "knife upload /cookbooks/x uploads the local version" do
|
1161
|
+
knife("diff --name-status /cookbooks").should_succeed <<~EOM
|
1162
|
+
D\t/cookbooks/x-1.0.1
|
1163
|
+
A\t/cookbooks/x-1.0.0
|
1164
|
+
EOM
|
1165
|
+
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1166
|
+
Created /cookbooks/x-1.0.0
|
1167
|
+
Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
|
1168
|
+
EOM
|
1169
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
|
1173
|
+
when_the_chef_server "has an earlier version for the cookbook, and no current version" do
|
1174
|
+
before do
|
1175
|
+
cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
|
1176
|
+
end
|
1177
|
+
|
1178
|
+
it "knife upload /cookbooks/x uploads the new version" do
|
1179
|
+
knife("upload --purge /cookbooks").should_succeed <<~EOM
|
1180
|
+
Created /cookbooks/x-1.0.0
|
1181
|
+
Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
|
1182
|
+
EOM
|
1183
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1184
|
+
end
|
1185
|
+
end
|
1186
|
+
end
|
1187
|
+
|
1188
|
+
when_the_chef_server "has an environment" do
|
1189
|
+
before do
|
1190
|
+
environment "x", {}
|
1191
|
+
end
|
1192
|
+
|
1193
|
+
when_the_repository "has the same environment with the wrong name in the file" do
|
1194
|
+
before do
|
1195
|
+
file "environments/x.json", { "name" => "y" }
|
1196
|
+
end
|
1197
|
+
it "knife upload fails" do
|
1198
|
+
knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
|
1199
|
+
knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
when_the_repository "has the same environment with no name in the file" do
|
1204
|
+
before do
|
1205
|
+
file "environments/x.json", { "description" => "hi" }
|
1206
|
+
end
|
1207
|
+
it "knife upload succeeds" do
|
1208
|
+
knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
|
1209
|
+
knife("diff --name-status /environments/x.json").should_succeed ""
|
1210
|
+
end
|
1211
|
+
end
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
when_the_chef_server "is empty" do
|
1215
|
+
|
1216
|
+
when_the_repository "has an environment with the wrong name in the file" do
|
1217
|
+
before do
|
1218
|
+
file "environments/x.json", { "name" => "y" }
|
1219
|
+
end
|
1220
|
+
it "knife upload fails" do
|
1221
|
+
knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
|
1222
|
+
knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
|
1223
|
+
end
|
1224
|
+
end
|
1225
|
+
|
1226
|
+
when_the_repository "has an environment with no name in the file" do
|
1227
|
+
before do
|
1228
|
+
file "environments/x.json", { "description" => "hi" }
|
1229
|
+
end
|
1230
|
+
it "knife upload succeeds" do
|
1231
|
+
knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
|
1232
|
+
knife("diff --name-status /environments/x.json").should_succeed ""
|
1233
|
+
end
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
when_the_repository "has a data bag with no id in the file" do
|
1237
|
+
before do
|
1238
|
+
file "data_bags/bag/x.json", { "foo" => "bar" }
|
1239
|
+
end
|
1240
|
+
it "knife upload succeeds" do
|
1241
|
+
knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
|
1242
|
+
knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
|
1243
|
+
end
|
1244
|
+
end
|
1245
|
+
end
|
1246
|
+
|
1247
|
+
when_the_chef_server "is empty" do
|
1248
|
+
when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
|
1249
|
+
before do
|
1250
|
+
file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
|
1251
|
+
end
|
1252
|
+
it "knife upload succeeds" do
|
1253
|
+
knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
|
1254
|
+
Created /cookbooks/x-1.0.0
|
1255
|
+
EOM
|
1256
|
+
knife("diff --name-status /cookbooks").should_succeed ""
|
1257
|
+
end
|
1258
|
+
end
|
1259
|
+
end
|
1260
|
+
end # with versioned cookbooks
|
1261
|
+
|
1262
|
+
when_the_chef_server "has a user" do
|
1263
|
+
before do
|
1264
|
+
user "x", {}
|
1265
|
+
end
|
1266
|
+
|
1267
|
+
when_the_repository "has the same user with json_class in it" do
|
1268
|
+
before do
|
1269
|
+
file "users/x.json", { "admin" => true, "json_class" => "Chef::WebUIUser" }
|
1270
|
+
end
|
1271
|
+
it "knife upload /users/x.json succeeds" do
|
1272
|
+
knife("upload /users/x.json").should_succeed "Updated /users/x.json\n"
|
1273
|
+
end
|
1274
|
+
end
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
when_the_chef_server "is in Enterprise mode", osc_compat: false, single_org: false do
|
1278
|
+
before do
|
1279
|
+
user "foo", {}
|
1280
|
+
user "bar", {}
|
1281
|
+
user "foobar", {}
|
1282
|
+
organization "foo", { "full_name" => "Something" }
|
1283
|
+
end
|
1284
|
+
|
1285
|
+
before :each do
|
1286
|
+
Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
|
1287
|
+
end
|
1288
|
+
|
1289
|
+
context "and has nothing but a single group named blah" do
|
1290
|
+
group "blah", {}
|
1291
|
+
|
1292
|
+
when_the_repository "has at least one of each thing" do
|
1293
|
+
|
1294
|
+
before do
|
1295
|
+
# TODO We have to upload acls for an existing group due to a lack of
|
1296
|
+
# dependency detection during upload. Fix that!
|
1297
|
+
file "acls/groups/blah.json", {}
|
1298
|
+
file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
|
1299
|
+
file "containers/x.json", {}
|
1300
|
+
file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
|
1301
|
+
file "cookbook_artifacts/x-1x1/metadata.rb", cb_metadata("x", "1.0.0")
|
1302
|
+
file "data_bags/x/y.json", {}
|
1303
|
+
file "environments/x.json", {}
|
1304
|
+
file "groups/x.json", {}
|
1305
|
+
file "invitations.json", [ "foo" ]
|
1306
|
+
file "members.json", [ "bar" ]
|
1307
|
+
file "org.json", { "full_name" => "wootles" }
|
1308
|
+
file "nodes/x.json", { "normal" => { "tags" => [] } }
|
1309
|
+
file "policies/x-1.0.0.json", {}
|
1310
|
+
file "policies/blah-1.0.0.json", {}
|
1311
|
+
file "policy_groups/x.json", { "policies" => { "x" => { "revision_id" => "1.0.0" }, "blah" => { "revision_id" => "1.0.0" } } }
|
1312
|
+
file "roles/x.json", {}
|
1313
|
+
end
|
1314
|
+
|
1315
|
+
it "knife upload / uploads everything" do
|
1316
|
+
knife("upload /").should_succeed <<~EOM
|
1317
|
+
Updated /acls/groups/blah.json
|
1318
|
+
Created /clients/x.json
|
1319
|
+
Created /containers/x.json
|
1320
|
+
Created /cookbook_artifacts/x-1x1
|
1321
|
+
Created /cookbooks/x
|
1322
|
+
Created /data_bags/x
|
1323
|
+
Created /data_bags/x/y.json
|
1324
|
+
Created /environments/x.json
|
1325
|
+
Created /groups/x.json
|
1326
|
+
Updated /invitations.json
|
1327
|
+
Updated /members.json
|
1328
|
+
Created /nodes/x.json
|
1329
|
+
Updated /org.json
|
1330
|
+
Created /policies/blah-1.0.0.json
|
1331
|
+
Created /policies/x-1.0.0.json
|
1332
|
+
Created /policy_groups/x.json
|
1333
|
+
Created /roles/x.json
|
1334
|
+
EOM
|
1335
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
|
1336
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1337
|
+
knife("diff --name-status --diff-filter=AMT /").should_succeed ""
|
1338
|
+
end
|
1339
|
+
|
1340
|
+
context "When the chef server has an identical copy of each thing" do
|
1341
|
+
before do
|
1342
|
+
file "invitations.json", [ "foo" ]
|
1343
|
+
file "members.json", [ "bar" ]
|
1344
|
+
file "org.json", { "full_name" => "Something" }
|
1345
|
+
|
1346
|
+
# acl_for %w(organizations foo groups blah)
|
1347
|
+
client "x", {}
|
1348
|
+
cookbook "x", "1.0.0"
|
1349
|
+
cookbook_artifact "x", "1x1", "metadata.rb" => cb_metadata("x", "1.0.0")
|
1350
|
+
container "x", {}
|
1351
|
+
data_bag "x", { "y" => {} }
|
1352
|
+
environment "x", {}
|
1353
|
+
group "x", {}
|
1354
|
+
org_invite "foo"
|
1355
|
+
org_member "bar"
|
1356
|
+
node "x", {}
|
1357
|
+
policy "x", "1.0.0", {}
|
1358
|
+
policy "blah", "1.0.0", {}
|
1359
|
+
policy_group "x", {
|
1360
|
+
"policies" => {
|
1361
|
+
"x" => { "revision_id" => "1.0.0" },
|
1362
|
+
"blah" => { "revision_id" => "1.0.0" },
|
1363
|
+
},
|
1364
|
+
}
|
1365
|
+
role "x", {}
|
1366
|
+
end
|
1367
|
+
|
1368
|
+
it "knife upload makes no changes" do
|
1369
|
+
knife("upload /").should_succeed <<~EOM
|
1370
|
+
Updated /acls/groups/blah.json
|
1371
|
+
EOM
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
|
1375
|
+
context "When the chef server has a slightly different copy of the policy revision" do
|
1376
|
+
before do
|
1377
|
+
policy "x", "1.0.0", { "run_list" => [ "blah" ] }
|
1378
|
+
end
|
1379
|
+
|
1380
|
+
it "should fail because policies are not updateable" do
|
1381
|
+
knife("upload /policies/x-1.0.0.json").should_fail <<~EOM
|
1382
|
+
ERROR: /policies/x-1.0.0.json cannot be updated: policy revisions are immutable once uploaded. If you want to change the policy, create a new revision with your changes.
|
1383
|
+
EOM
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
|
1387
|
+
context "When the chef server has a slightly different copy of the cookbook artifact" do
|
1388
|
+
before do
|
1389
|
+
cookbook_artifact "x", "1x1", { "recipes" => { "default.rb" => "" } }
|
1390
|
+
end
|
1391
|
+
|
1392
|
+
it "should fail because cookbook_artifacts cannot be updated" do
|
1393
|
+
knife("upload /cookbook_artifacts/x-1x1").should_fail <<~EOM
|
1394
|
+
ERROR: /cookbook_artifacts/x-1x1 cannot be updated: cookbook artifacts are immutable once uploaded.
|
1395
|
+
EOM
|
1396
|
+
end
|
1397
|
+
end
|
1398
|
+
|
1399
|
+
context "When the chef server has a slightly different copy of each thing (except policy revisions)" do
|
1400
|
+
before do
|
1401
|
+
# acl_for %w(organizations foo groups blah)
|
1402
|
+
client "x", { "validator" => true }
|
1403
|
+
container "x", {}
|
1404
|
+
cookbook "x", "1.0.0", { "recipes" => { "default.rb" => "" } }
|
1405
|
+
cookbook_artifact "x", "1x1", { "metadata.rb" => cb_metadata("x", "1.0.0") }
|
1406
|
+
data_bag "x", { "y" => { "a" => "b" } }
|
1407
|
+
environment "x", { "description" => "foo" }
|
1408
|
+
group "x", { "groups" => [ "admin" ] }
|
1409
|
+
node "x", { "run_list" => [ "blah" ] }
|
1410
|
+
policy "x", "1.0.0", {}
|
1411
|
+
policy "x", "1.0.1", {}
|
1412
|
+
policy "y", "1.0.0", {}
|
1413
|
+
policy_group "x", {
|
1414
|
+
"policies" => {
|
1415
|
+
"x" => { "revision_id" => "1.0.1" },
|
1416
|
+
"y" => { "revision_id" => "1.0.0" },
|
1417
|
+
},
|
1418
|
+
}
|
1419
|
+
role "x", { "run_list" => [ "blah" ] }
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
it "knife upload updates everything" do
|
1423
|
+
knife("upload /").should_succeed <<~EOM
|
1424
|
+
Updated /acls/groups/blah.json
|
1425
|
+
Updated /clients/x.json
|
1426
|
+
Updated /cookbooks/x
|
1427
|
+
Updated /data_bags/x/y.json
|
1428
|
+
Updated /environments/x.json
|
1429
|
+
Updated /groups/x.json
|
1430
|
+
Updated /invitations.json
|
1431
|
+
Updated /members.json
|
1432
|
+
Updated /nodes/x.json
|
1433
|
+
Updated /org.json
|
1434
|
+
Created /policies/blah-1.0.0.json
|
1435
|
+
Updated /policy_groups/x.json
|
1436
|
+
Updated /roles/x.json
|
1437
|
+
EOM
|
1438
|
+
knife("diff --name-status --diff-filter=AMT /").should_succeed ""
|
1439
|
+
end
|
1440
|
+
end
|
1441
|
+
end
|
1442
|
+
|
1443
|
+
when_the_repository "has an org.json that does not change full_name" do
|
1444
|
+
before do
|
1445
|
+
file "org.json", { "full_name" => "Something" }
|
1446
|
+
end
|
1447
|
+
|
1448
|
+
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1449
|
+
knife("upload /").should_succeed ""
|
1450
|
+
expect(api.get("/")["full_name"]).to eq("Something")
|
1451
|
+
end
|
1452
|
+
end
|
1453
|
+
|
1454
|
+
when_the_repository "has an org.json that changes full_name" do
|
1455
|
+
before do
|
1456
|
+
file "org.json", { "full_name" => "Something Else" }
|
1457
|
+
end
|
1458
|
+
|
1459
|
+
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1460
|
+
knife("upload /").should_succeed "Updated /org.json\n"
|
1461
|
+
expect(api.get("/")["full_name"]).to eq("Something Else")
|
1462
|
+
end
|
1463
|
+
end
|
1464
|
+
|
1465
|
+
context "and has invited foo and bar is already a member" do
|
1466
|
+
org_invite "foo"
|
1467
|
+
org_member "bar"
|
1468
|
+
|
1469
|
+
when_the_repository "wants to invite foo, bar and foobar" do
|
1470
|
+
before do
|
1471
|
+
file "invitations.json", %w{foo bar foobar}
|
1472
|
+
end
|
1473
|
+
|
1474
|
+
it "knife upload / emits a warning for bar and invites foobar" do
|
1475
|
+
knife("upload /").should_succeed "Updated /invitations.json\n", stderr: "WARN: Could not invite bar to organization foo: User bar is already in organization foo\n"
|
1476
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{foo foobar})
|
1477
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1478
|
+
end
|
1479
|
+
end
|
1480
|
+
|
1481
|
+
when_the_repository "wants to make foo, bar and foobar members" do
|
1482
|
+
before do
|
1483
|
+
file "members.json", %w{foo bar foobar}
|
1484
|
+
end
|
1485
|
+
|
1486
|
+
it "knife upload / emits a warning for bar and adds foo and foobar" do
|
1487
|
+
knife("upload /").should_succeed "Updated /members.json\n"
|
1488
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
|
1489
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo foobar})
|
1490
|
+
end
|
1491
|
+
end
|
1492
|
+
|
1493
|
+
when_the_repository "wants to invite foo and have bar as a member" do
|
1494
|
+
before do
|
1495
|
+
file "invitations.json", [ "foo" ]
|
1496
|
+
file "members.json", [ "bar" ]
|
1497
|
+
end
|
1498
|
+
|
1499
|
+
it "knife upload / does nothing" do
|
1500
|
+
knife("upload /").should_succeed ""
|
1501
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
|
1502
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
|
1503
|
+
end
|
1504
|
+
end
|
1505
|
+
end
|
1506
|
+
|
1507
|
+
context "and has invited bar and foo" do
|
1508
|
+
org_invite "bar", "foo"
|
1509
|
+
|
1510
|
+
when_the_repository "wants to invite foo and bar (different order)" do
|
1511
|
+
before do
|
1512
|
+
file "invitations.json", %w{foo bar}
|
1513
|
+
end
|
1514
|
+
|
1515
|
+
it "knife upload / does nothing" do
|
1516
|
+
knife("upload /").should_succeed ""
|
1517
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{bar foo})
|
1518
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ ])
|
1519
|
+
end
|
1520
|
+
end
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
context "and has already added bar and foo as members of the org" do
|
1524
|
+
org_member "bar", "foo"
|
1525
|
+
|
1526
|
+
when_the_repository "wants to add foo and bar (different order)" do
|
1527
|
+
before do
|
1528
|
+
file "members.json", %w{foo bar}
|
1529
|
+
end
|
1530
|
+
|
1531
|
+
it "knife upload / does nothing" do
|
1532
|
+
knife("upload /").should_succeed ""
|
1533
|
+
expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
|
1534
|
+
expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo})
|
1535
|
+
end
|
1536
|
+
end
|
1537
|
+
end
|
1538
|
+
end
|
1539
|
+
end
|
1540
|
+
end
|