chef 12.0.0.alpha.1 → 12.0.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/application.rb +8 -1
  3. data/lib/chef/application/apply.rb +4 -0
  4. data/lib/chef/application/client.rb +7 -7
  5. data/lib/chef/application/solo.rb +21 -13
  6. data/lib/chef/chef_fs/chef_fs_data_store.rb +60 -6
  7. data/lib/chef/chef_fs/config.rb +78 -4
  8. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +2 -2
  9. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  10. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  11. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +76 -2
  14. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  15. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  16. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  17. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +30 -0
  18. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -0
  19. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -0
  20. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  21. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +2 -1
  22. data/lib/chef/chef_fs/file_system.rb +0 -1
  23. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
  24. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +5 -1
  26. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +73 -13
  27. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +44 -5
  28. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +1 -1
  29. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -3
  30. data/lib/chef/chef_fs/file_system/org_entry.rb +34 -0
  31. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +58 -0
  32. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +57 -0
  33. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +13 -4
  34. data/lib/chef/chef_fs/knife.rb +1 -1
  35. data/lib/chef/client.rb +8 -2
  36. data/lib/chef/config.rb +75 -57
  37. data/lib/chef/config_fetcher.rb +6 -21
  38. data/lib/chef/dsl/data_query.rb +48 -3
  39. data/lib/chef/dsl/platform_introspection.rb +42 -0
  40. data/lib/chef/dsl/reboot_pending.rb +6 -3
  41. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  42. data/lib/chef/encrypted_data_bag_item/encryptor.rb +12 -0
  43. data/lib/chef/exceptions.rb +2 -0
  44. data/lib/chef/http/basic_client.rb +14 -0
  45. data/lib/chef/http/json_output.rb +7 -2
  46. data/lib/chef/knife.rb +36 -121
  47. data/lib/chef/knife/bootstrap.rb +68 -54
  48. data/lib/chef/knife/bootstrap/archlinux-gems.erb +6 -1
  49. data/lib/chef/knife/bootstrap/chef-aix.erb +5 -0
  50. data/lib/chef/knife/bootstrap/chef-full.erb +5 -1
  51. data/lib/chef/knife/core/bootstrap_context.rb +70 -29
  52. data/lib/chef/knife/search.rb +56 -12
  53. data/lib/chef/knife/serve.rb +1 -1
  54. data/lib/chef/local_mode.rb +10 -4
  55. data/lib/chef/mixin/deep_merge.rb +6 -3
  56. data/lib/chef/mixin/shell_out.rb +33 -17
  57. data/lib/chef/null_logger.rb +72 -0
  58. data/lib/chef/platform.rb +2 -1
  59. data/lib/chef/platform/provider_mapping.rb +1 -1
  60. data/lib/chef/platform/rebooter.rb +54 -0
  61. data/lib/chef/provider/ifconfig.rb +15 -16
  62. data/lib/chef/provider/link.rb +1 -1
  63. data/lib/chef/provider/mount/mount.rb +1 -1
  64. data/lib/chef/provider/mount/solaris.rb +102 -64
  65. data/lib/chef/provider/package/aix.rb +4 -12
  66. data/lib/chef/provider/package/ips.rb +8 -12
  67. data/lib/chef/provider/package/macports.rb +4 -12
  68. data/lib/chef/provider/package/pacman.rb +2 -6
  69. data/lib/chef/provider/package/portage.rb +2 -6
  70. data/lib/chef/provider/package/rpm.rb +4 -12
  71. data/lib/chef/provider/package/solaris.rb +4 -12
  72. data/lib/chef/provider/reboot.rb +69 -0
  73. data/lib/chef/provider/service/debian.rb +10 -10
  74. data/lib/chef/provider/service/freebsd.rb +89 -73
  75. data/lib/chef/provider/service/gentoo.rb +2 -2
  76. data/lib/chef/provider/service/init.rb +6 -4
  77. data/lib/chef/provider/service/insserv.rb +3 -3
  78. data/lib/chef/provider/service/macosx.rb +2 -2
  79. data/lib/chef/provider/service/simple.rb +6 -4
  80. data/lib/chef/provider/service/solaris.rb +1 -1
  81. data/lib/chef/provider/service/systemd.rb +9 -9
  82. data/lib/chef/provider/service/upstart.rb +6 -6
  83. data/lib/chef/provider/subversion.rb +6 -6
  84. data/lib/chef/provider/user/dscl.rb +32 -28
  85. data/lib/chef/provider/user/windows.rb +6 -6
  86. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  87. data/lib/chef/providers.rb +1 -0
  88. data/lib/chef/recipe.rb +0 -1
  89. data/lib/chef/resource.rb +3 -5
  90. data/lib/chef/resource/mount.rb +9 -0
  91. data/lib/chef/resource/reboot.rb +48 -0
  92. data/lib/chef/resources.rb +1 -0
  93. data/lib/chef/run_context.rb +25 -0
  94. data/lib/chef/search/query.rb +122 -14
  95. data/lib/chef/util/path_helper.rb +54 -6
  96. data/lib/chef/util/windows/net_user.rb +4 -1
  97. data/lib/chef/version.rb +1 -1
  98. data/lib/chef/win32/api/file.rb +1 -5
  99. data/lib/chef/win32/api/net.rb +1 -0
  100. data/lib/chef/workstation_config_loader.rb +177 -0
  101. data/spec/functional/http/simple_spec.rb +57 -1
  102. data/spec/functional/mixin/shell_out_spec.rb +2 -2
  103. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -0
  104. data/spec/functional/rebooter_spec.rb +105 -0
  105. data/spec/functional/resource/deploy_revision_spec.rb +0 -4
  106. data/spec/functional/resource/file_spec.rb +26 -3
  107. data/spec/functional/resource/group_spec.rb +5 -3
  108. data/spec/functional/resource/link_spec.rb +16 -16
  109. data/spec/functional/resource/reboot_spec.rb +103 -0
  110. data/spec/integration/client/client_spec.rb +4 -8
  111. data/spec/integration/client/ipv6_spec.rb +1 -1
  112. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -2
  113. data/spec/integration/knife/delete_spec.rb +39 -0
  114. data/spec/integration/knife/deps_spec.rb +30 -20
  115. data/spec/integration/knife/download_spec.rb +77 -1
  116. data/spec/integration/knife/list_spec.rb +221 -0
  117. data/spec/integration/knife/raw_spec.rb +1 -1
  118. data/spec/integration/knife/show_spec.rb +2 -2
  119. data/spec/integration/knife/upload_spec.rb +154 -1
  120. data/spec/support/pedant/run_pedant.rb +0 -1
  121. data/spec/support/shared/functional/http.rb +8 -1
  122. data/spec/support/shared/integration/integration_helper.rb +11 -19
  123. data/spec/support/shared/unit/platform_introspector.rb +22 -0
  124. data/spec/unit/application/apply.rb +11 -1
  125. data/spec/unit/application/solo_spec.rb +19 -3
  126. data/spec/unit/chef_fs/config_spec.rb +58 -0
  127. data/spec/unit/config_fetcher_spec.rb +1 -3
  128. data/spec/unit/config_spec.rb +247 -220
  129. data/spec/unit/dsl/data_query_spec.rb +165 -23
  130. data/spec/unit/dsl/reboot_pending_spec.rb +1 -7
  131. data/spec/unit/encrypted_data_bag_item_spec.rb +1 -1
  132. data/spec/unit/knife/bootstrap_spec.rb +354 -182
  133. data/spec/unit/knife/core/bootstrap_context_spec.rb +67 -30
  134. data/spec/unit/knife_spec.rb +3 -30
  135. data/spec/unit/mixin/deep_merge_spec.rb +14 -0
  136. data/spec/unit/mixin/shell_out_spec.rb +134 -64
  137. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -9
  138. data/spec/unit/provider/ifconfig/redhat_spec.rb +16 -14
  139. data/spec/unit/provider/ifconfig_spec.rb +3 -3
  140. data/spec/unit/provider/link_spec.rb +5 -5
  141. data/spec/unit/provider/mount/mount_spec.rb +10 -1
  142. data/spec/unit/provider/mount/solaris_spec.rb +185 -11
  143. data/spec/unit/provider/package/aix_spec.rb +5 -17
  144. data/spec/unit/provider/package/ips_spec.rb +8 -21
  145. data/spec/unit/provider/package/macports_spec.rb +12 -12
  146. data/spec/unit/provider/package/pacman_spec.rb +4 -12
  147. data/spec/unit/provider/package/portage_spec.rb +5 -15
  148. data/spec/unit/provider/package/rpm_spec.rb +7 -22
  149. data/spec/unit/provider/package/solaris_spec.rb +5 -16
  150. data/spec/unit/provider/service/arch_service_spec.rb +8 -14
  151. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  152. data/spec/unit/provider/service/freebsd_service_spec.rb +457 -225
  153. data/spec/unit/provider/service/gentoo_service_spec.rb +2 -2
  154. data/spec/unit/provider/service/init_service_spec.rb +10 -10
  155. data/spec/unit/provider/service/insserv_service_spec.rb +3 -4
  156. data/spec/unit/provider/service/invokercd_service_spec.rb +8 -9
  157. data/spec/unit/provider/service/macosx_spec.rb +5 -5
  158. data/spec/unit/provider/service/simple_service_spec.rb +4 -6
  159. data/spec/unit/provider/service/solaris_smf_service_spec.rb +1 -3
  160. data/spec/unit/provider/service/systemd_service_spec.rb +20 -20
  161. data/spec/unit/provider/service/upstart_service_spec.rb +15 -17
  162. data/spec/unit/provider/subversion_spec.rb +5 -6
  163. data/spec/unit/provider/user/dscl_spec.rb +2 -1
  164. data/spec/unit/provider/user/windows_spec.rb +7 -0
  165. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  166. data/spec/unit/resource/mount_spec.rb +9 -0
  167. data/spec/unit/resource_spec.rb +0 -4
  168. data/spec/unit/rest_spec.rb +1 -1
  169. data/spec/unit/run_context_spec.rb +15 -0
  170. data/spec/unit/search/query_spec.rb +196 -40
  171. data/spec/unit/util/path_helper_spec.rb +111 -28
  172. data/spec/unit/workstation_config_loader_spec.rb +283 -0
  173. metadata +36 -20
  174. data/lib/chef/knife/bootstrap/centos5-gems.erb +0 -62
  175. data/lib/chef/knife/bootstrap/fedora13-gems.erb +0 -44
  176. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +0 -53
  177. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +0 -48
  178. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +0 -46
  179. data/spec/support/shared/integration/chef_zero_support.rb +0 -130
  180. data/spec/unit/knife/config_file_selection_spec.rb +0 -135
@@ -37,22 +37,26 @@ describe Chef::Provider::Ifconfig::Redhat do
37
37
  status = double("Status", :exitstatus => 0)
38
38
  @provider.instance_variable_set("@status", status)
39
39
  @provider.current_resource = @current_resource
40
- end
40
+
41
+ config_filename = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
42
+ @config = double("chef-resource-file")
43
+ @provider.should_receive(:resource_for_config).with(config_filename).and_return(@config)
44
+ end
41
45
 
42
46
  describe "generate_config for action_add" do
43
47
 
44
- it "should write network-script for centos" do
48
+ it "should write network-script for centos" do
45
49
  @provider.stub(:load_current_resource)
46
50
  @provider.stub(:run_command)
47
- config_filename = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
48
- config_file = StringIO.new
49
- File.should_receive(:new).with(config_filename, "w").and_return(config_file)
50
-
51
+ @config.should_receive(:content) do |arg|
52
+ arg.should match(/^\s*DEVICE=eth0\s*$/)
53
+ arg.should match(/^\s*IPADDR=10\.0\.0\.1\s*$/)
54
+ arg.should match(/^\s*NETMASK=255\.255\.254\.0\s*$/)
55
+ end
56
+ @config.should_receive(:run_action).with(:create)
57
+ @config.should_receive(:updated?).and_return(true)
51
58
  @provider.run_action(:add)
52
- config_file.string.should match(/^\s*DEVICE=eth0\s*$/)
53
- config_file.string.should match(/^\s*IPADDR=10\.0\.0\.1\s*$/)
54
- config_file.string.should match(/^\s*NETMASK=255\.255\.254\.0\s*$/)
55
- end
59
+ end
56
60
  end
57
61
 
58
62
  describe "delete_config for action_delete" do
@@ -61,10 +65,8 @@ describe Chef::Provider::Ifconfig::Redhat do
61
65
  @current_resource.device @new_resource.device
62
66
  @provider.stub(:load_current_resource)
63
67
  @provider.stub(:run_command)
64
- config_filename = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
65
- File.should_receive(:exist?).with(config_filename).and_return(true)
66
- FileUtils.should_receive(:rm_f).with(config_filename, :verbose => false)
67
-
68
+ @config.should_receive(:run_action).with(:delete)
69
+ @config.should_receive(:updated?).and_return(true)
68
70
  @provider.run_action(:delete)
69
71
  end
70
72
  end
@@ -72,7 +72,7 @@ describe Chef::Provider::Ifconfig do
72
72
  @provider.stub(:load_current_resource)
73
73
  @provider.should_not_receive(:run_command)
74
74
  @current_resource.inet_addr "10.0.0.1"
75
- @provider.should_not_receive(:generate_config)
75
+ @provider.should_receive(:generate_config)
76
76
 
77
77
  @provider.run_action(:add)
78
78
  @new_resource.should_not be_updated
@@ -123,7 +123,7 @@ describe Chef::Provider::Ifconfig do
123
123
  it "should not delete interface if it does not exist" do
124
124
  @provider.stub(:load_current_resource)
125
125
  @provider.should_not_receive(:run_command)
126
- @provider.should_not_receive(:delete_config)
126
+ @provider.should_receive(:delete_config)
127
127
 
128
128
  @provider.run_action(:delete)
129
129
  @new_resource.should_not be_updated
@@ -171,7 +171,7 @@ describe Chef::Provider::Ifconfig do
171
171
  @provider.stub(:load_current_resource)
172
172
  # This is so that nothing actually runs
173
173
  @provider.should_not_receive(:run_command)
174
- @provider.should_not_receive(:delete_config)
174
+ @provider.should_receive(:delete_config)
175
175
 
176
176
  @provider.run_action(:delete)
177
177
  @new_resource.should_not be_updated
@@ -38,8 +38,8 @@ describe Chef::Resource::Link, :not_supported_on_win2k3 do
38
38
  result
39
39
  end
40
40
 
41
- def canonicalize(path)
42
- Chef::Platform.windows? ? path.gsub('/', '\\') : path
41
+ def paths_eql?(path1, path2)
42
+ Chef::Util::PathHelper.paths_eql?(path1, path2)
43
43
  end
44
44
 
45
45
  describe "when the target is a symlink" do
@@ -68,7 +68,7 @@ describe Chef::Resource::Link, :not_supported_on_win2k3 do
68
68
  provider.current_resource.link_type.should == :symbolic
69
69
  end
70
70
  it "should update the source of the existing link with the links target" do
71
- provider.current_resource.to.should == canonicalize("#{CHEF_SPEC_DATA}/fofile")
71
+ paths_eql?(provider.current_resource.to, "#{CHEF_SPEC_DATA}/fofile").should be_true
72
72
  end
73
73
  it "should set the owner" do
74
74
  provider.current_resource.owner.should == 501
@@ -110,7 +110,7 @@ describe Chef::Resource::Link, :not_supported_on_win2k3 do
110
110
  provider.current_resource.link_type.should == :symbolic
111
111
  end
112
112
  it "should update the source of the existing link to the link's target" do
113
- provider.current_resource.to.should == canonicalize("#{CHEF_SPEC_DATA}/fofile")
113
+ paths_eql?(provider.current_resource.to, "#{CHEF_SPEC_DATA}/fofile").should be_true
114
114
  end
115
115
  it "should not set the owner" do
116
116
  provider.current_resource.owner.should be_nil
@@ -221,7 +221,7 @@ describe Chef::Resource::Link, :not_supported_on_win2k3 do
221
221
  provider.current_resource.link_type.should == :hard
222
222
  end
223
223
  it "should update the source of the existing link to the link's target" do
224
- provider.current_resource.to.should == canonicalize("#{CHEF_SPEC_DATA}/fofile")
224
+ paths_eql?(provider.current_resource.to, "#{CHEF_SPEC_DATA}/fofile").should be_true
225
225
  end
226
226
  it "should not set the owner" do
227
227
  provider.current_resource.owner.should == nil
@@ -347,7 +347,16 @@ describe Chef::Provider::Mount::Mount do
347
347
  it "should use mount -o remount if remount is supported" do
348
348
  @new_resource.supports({:remount => true})
349
349
  @current_resource.mounted(true)
350
- @provider.should_receive(:shell_out!).with("mount -o remount #{@new_resource.mount_point}")
350
+ @provider.should_receive(:shell_out!).with("mount -o remount,defaults #{@new_resource.mount_point}")
351
+ @provider.remount_fs
352
+ end
353
+
354
+ it "should use mount -o remount with new mount options if remount is supported" do
355
+ @new_resource.supports({:remount => true})
356
+ options = "rw,noexec,noauto"
357
+ @new_resource.options(%w{rw noexec noauto})
358
+ @current_resource.mounted(true)
359
+ @provider.should_receive(:shell_out!).with("mount -o remount,rw,noexec,noauto #{@new_resource.mount_point}")
351
360
  @provider.remount_fs
352
361
  end
353
362
 
@@ -21,6 +21,7 @@ require 'ostruct'
21
21
 
22
22
  # Do not run these tests on windows because some path handling
23
23
  # code is not implemented to handle windows paths.
24
+
24
25
  describe Chef::Provider::Mount::Solaris, :unix_only do
25
26
  let(:node) { Chef::Node.new }
26
27
 
@@ -34,6 +35,8 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
34
35
 
35
36
  let(:device) { "/dev/dsk/c0t2d0s7" }
36
37
 
38
+ let(:fsck_device) { "/dev/rdsk/c0t2d0s7" }
39
+
37
40
  let(:mountpoint) { "/mnt/foo" }
38
41
 
39
42
  let(:options) { nil }
@@ -42,9 +45,9 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
42
45
  new_resource = Chef::Resource::Mount.new(mountpoint)
43
46
  new_resource.device device
44
47
  new_resource.device_type device_type
48
+ new_resource.fsck_device fsck_device
45
49
  new_resource.fstype fstype
46
50
  new_resource.options options
47
-
48
51
  new_resource.supports :remount => false
49
52
  new_resource
50
53
  }
@@ -123,9 +126,10 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
123
126
  expect { provider.run_action(:remount) }.to raise_error(Chef::Exceptions::Mount)
124
127
  end
125
128
 
126
- %w{tmpfs nfs ctfs proc mntfs objfs sharefs fd smbfs}.each do |ft|
129
+ %w{tmpfs nfs ctfs proc mntfs objfs sharefs fd smbfs vxfs}.each do |ft|
127
130
  context "when the device has a fstype of #{ft}" do
128
131
  let(:fstype) { ft }
132
+ let(:fsck_device) { "-" }
129
133
  let(:device) { "something_that_is_not_a_file" }
130
134
 
131
135
  before do
@@ -145,7 +149,7 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
145
149
  end
146
150
 
147
151
  describe "#load_current_resource" do
148
- context "when loading a normal UFS filesystem" do
152
+ context "when loading a normal UFS filesystem with mount at boot" do
149
153
 
150
154
  before do
151
155
  provider.load_current_resource
@@ -167,6 +171,10 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
167
171
  provider.current_resource.device.should == device
168
172
  end
169
173
 
174
+ it "should set the fsck_device on the current_resource" do
175
+ provider.current_resource.fsck_device.should == fsck_device
176
+ end
177
+
170
178
  it "should set the device_type on the current_resource" do
171
179
  provider.current_resource.device_type.should == device_type
172
180
  end
@@ -184,7 +192,7 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
184
192
  end
185
193
 
186
194
  it "should set the options field on the current_resource" do
187
- expect(provider.current_resource.options).to eql(["-", "noauto"])
195
+ expect(provider.current_resource.options).to eql(["-"])
188
196
  end
189
197
 
190
198
  it "should set the pass field on the current_resource" do
@@ -201,6 +209,39 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
201
209
  expect { provider.load_current_resource }.to_not raise_error
202
210
  end
203
211
  end
212
+ end
213
+
214
+ describe "#load_current_resource" do
215
+ context "when loading a normal UFS filesystem with noauto, don't mount at boot" do
216
+
217
+ let(:vfstab_file_contents) {
218
+ <<-EOF.gsub /^\s*/, ''
219
+ #device device mount FS fsck mount mount
220
+ #to mount to fsck point type pass at boot options
221
+ #
222
+ fd - /dev/fd fd - no -
223
+ /proc - /proc proc - no -
224
+ # swap
225
+ /dev/dsk/c0t0d0s1 - - swap - no -
226
+ # root
227
+ /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
228
+ # tmpfs
229
+ swap - /tmp tmpfs - yes -
230
+ # nfs
231
+ cartman:/share2 - /cartman nfs - yes rw,soft
232
+ # ufs
233
+ /dev/dsk/c0t2d0s7 /dev/rdsk/c0t2d0s7 /mnt/foo ufs 2 no -
234
+ EOF
235
+ }
236
+
237
+ before do
238
+ provider.load_current_resource
239
+ end
240
+
241
+ it "should set the options field on the current_resource" do
242
+ expect(provider.current_resource.options).to eql(["-", "noauto"])
243
+ end
244
+ end
204
245
 
205
246
  context "when the device is an smbfs mount" do
206
247
  let(:mount_output) {
@@ -214,6 +255,8 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
214
255
  EOF
215
256
  }
216
257
 
258
+ let(:fsck_device) { "-" }
259
+
217
260
  it "should work at some point in the future" do
218
261
  pending "SMBFS mounts on solaris look like they will need some future code work and more investigation"
219
262
  end
@@ -232,6 +275,8 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
232
275
  EOF
233
276
  }
234
277
 
278
+ let(:fsck_device) { "-" }
279
+
235
280
  let(:fstype) { "nfs" }
236
281
 
237
282
  let(:device) { "cartman:/share2" }
@@ -271,11 +316,15 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
271
316
  end
272
317
 
273
318
  it "should set the options field on the current_resource" do
274
- expect(provider.current_resource.options).to eql(["rw", "soft", "noauto"])
319
+ expect(provider.current_resource.options).to eql(["rw", "soft"])
275
320
  end
276
321
 
277
322
  it "should set the pass field on the current_resource" do
278
323
  # is this correct or should it be nil?
324
+ #
325
+ # vfstab man page says.
326
+ # "A - is used to indicate no entry in a field."
327
+ # 0 and - could mean different things for some file systems
279
328
  expect(provider.current_resource.pass).to eql(0)
280
329
  end
281
330
 
@@ -313,7 +362,7 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
313
362
  end
314
363
 
315
364
  it "should have the correct mount options" do
316
- expect(provider.current_resource.options).to eql(["-", "noauto"])
365
+ expect(provider.current_resource.options).to eql(["-"])
317
366
  end
318
367
  end
319
368
 
@@ -350,7 +399,7 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
350
399
  end
351
400
 
352
401
  it "should have the correct mount options" do
353
- expect(provider.current_resource.options).to eql(["-", "noauto"])
402
+ expect(provider.current_resource.options).to eql(["-"])
354
403
  end
355
404
  end
356
405
 
@@ -515,8 +564,33 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
515
564
  end
516
565
  end
517
566
 
518
- describe "remount_fs" do
567
+ describe "remount_fs without options and do not mount at boot" do
519
568
  it "should use mount -o remount" do
569
+ new_resource.options(%w{noauto})
570
+ provider.should_receive(:shell_out!).with("mount -o remount #{new_resource.mount_point}")
571
+ provider.remount_fs
572
+ end
573
+ end
574
+
575
+ describe "remount_fs with options and do not mount at boot" do
576
+ it "should use mount -o remount,rw" do
577
+ new_resource.options(%w{rw noauto})
578
+ provider.should_receive(:shell_out!).with("mount -o remount,rw #{new_resource.mount_point}")
579
+ provider.remount_fs
580
+ end
581
+ end
582
+
583
+ describe "remount_fs with options and mount at boot" do
584
+ it "should use mount -o remount,rw" do
585
+ new_resource.options(%w{rw})
586
+ provider.should_receive(:shell_out!).with("mount -o remount,rw #{new_resource.mount_point}")
587
+ provider.remount_fs
588
+ end
589
+ end
590
+
591
+ describe "remount_fs without options and mount at boot" do
592
+ it "should use mount -o remount" do
593
+ new_resource.options([])
520
594
  provider.should_receive(:shell_out!).with("mount -o remount #{new_resource.mount_point}")
521
595
  provider.remount_fs
522
596
  end
@@ -526,7 +600,7 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
526
600
  context "in the typical case" do
527
601
  let(:other_mount) { "/dev/dsk/c0t2d0s0 /dev/rdsk/c0t2d0s0 / ufs 2 yes -" }
528
602
 
529
- let(:this_mount) { "/dev/dsk/c0t2d0s7\t-\t/mnt/foo\tufs\t2\tyes\tdefaults\n" }
603
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tyes\tdefaults\n" }
530
604
 
531
605
  let(:vfstab_file_contents) { [other_mount].join("\n") }
532
606
 
@@ -548,9 +622,9 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
548
622
  context "when the mount has options=noauto" do
549
623
  let(:other_mount) { "/dev/dsk/c0t2d0s0 /dev/rdsk/c0t2d0s0 / ufs 2 yes -" }
550
624
 
551
- let(:this_mount) { "/dev/dsk/c0t2d0s7\t-\t/mnt/foo\tufs\t2\tno\t-\n" }
625
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tno\t-\n" }
552
626
 
553
- let(:options) { [ "noauto" ] }
627
+ let(:options) { "noauto" }
554
628
 
555
629
  let(:vfstab_file_contents) { [other_mount].join("\n") }
556
630
 
@@ -568,6 +642,106 @@ describe Chef::Provider::Mount::Solaris, :unix_only do
568
642
  IO.read(vfstab_file.path).should match(/^#{Regexp.escape(this_mount)}/)
569
643
  end
570
644
  end
645
+
646
+ context "when the new mount has options of noauto and the existing mount has mount at boot yes" do
647
+ let(:existing_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tyes\t-" }
648
+
649
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tno\t-\n" }
650
+
651
+ let(:options) { "noauto" }
652
+
653
+ let(:vfstab_file_contents) { [existing_mount].join("\n") }
654
+
655
+ before do
656
+ provider.stub(:etc_tempfile).and_yield(Tempfile.open("vfstab"))
657
+ provider.load_current_resource
658
+ provider.mount_options_unchanged?
659
+ provider.send(:vfstab_entry)
660
+ end
661
+
662
+ it "should detect a changed entry" do
663
+ provider.mount_options_unchanged?.should == false
664
+ end
665
+
666
+ it "should change mount at boot to no" do
667
+ provider.send(:vfstab_entry).should match(/^#{Regexp.escape(this_mount)}/)
668
+ end
669
+ end
670
+
671
+ context "when the new mount has options of - and the existing mount has mount at boot no" do
672
+ let(:existing_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tno\t-" }
673
+
674
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tyes\t-\n" }
675
+
676
+ let(:options) { "-" }
677
+
678
+ let(:vfstab_file_contents) { [existing_mount].join("\n") }
679
+
680
+ before do
681
+ provider.stub(:etc_tempfile).and_yield(Tempfile.open("vfstab"))
682
+ provider.load_current_resource
683
+ provider.mount_options_unchanged?
684
+ provider.send(:vfstab_entry)
685
+ end
686
+
687
+ it "should detect a changed entry" do
688
+ provider.mount_options_unchanged?.should == false
689
+ end
690
+
691
+ it "should change mount at boot to yes" do
692
+ provider.send(:vfstab_entry).should match(/^#{Regexp.escape(this_mount)}/)
693
+ end
694
+ end
695
+
696
+ context "when the new mount has options of noauto and the existing mount has mount at boot no" do
697
+ let(:existing_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tno\t-" }
698
+
699
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tno\t-\n" }
700
+
701
+ let(:options) { "-,noauto" }
702
+
703
+ let(:vfstab_file_contents) { [existing_mount].join("\n") }
704
+
705
+ before do
706
+ provider.stub(:etc_tempfile).and_yield(Tempfile.open("vfstab"))
707
+ provider.load_current_resource
708
+ provider.mount_options_unchanged?
709
+ provider.send(:vfstab_entry)
710
+ end
711
+
712
+ it "should detect an unchanged entry" do
713
+ provider.mount_options_unchanged?.should == true
714
+ end
715
+
716
+ it "should not change mount at boot" do
717
+ provider.send(:vfstab_entry).should match(/^#{Regexp.escape(this_mount)}/)
718
+ end
719
+ end
720
+
721
+ context "when the new mount has options of - and the existing mount has mount at boot yes" do
722
+ let(:existing_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tyes\t-" }
723
+
724
+ let(:this_mount) { "/dev/dsk/c0t2d0s7\t/dev/rdsk/c0t2d0s7\t/mnt/foo\tufs\t2\tyes\t-\n" }
725
+
726
+ let(:options) { "-" }
727
+
728
+ let(:vfstab_file_contents) { [existing_mount].join("\n") }
729
+
730
+ before do
731
+ provider.stub(:etc_tempfile).and_yield(Tempfile.open("vfstab"))
732
+ provider.load_current_resource
733
+ provider.mount_options_unchanged?
734
+ provider.send(:vfstab_entry)
735
+ end
736
+
737
+ it "should detect an unchanged entry" do
738
+ provider.mount_options_unchanged?.should == true
739
+ end
740
+
741
+ it "should not change mount at boot" do
742
+ provider.send(:vfstab_entry).should match(/^#{Regexp.escape(this_mount)}/)
743
+ end
744
+ end
571
745
  end
572
746
 
573
747
  describe "when disabling the fs" do