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
@@ -58,10 +58,10 @@ class Chef::Provider::Service::Gentoo < Chef::Provider::Service::Init
58
58
  end
59
59
 
60
60
  def enable_service()
61
- run_command(:command => "/sbin/rc-update add #{@new_resource.service_name} default")
61
+ shell_out!("/sbin/rc-update add #{@new_resource.service_name} default")
62
62
  end
63
63
 
64
64
  def disable_service()
65
- run_command(:command => "/sbin/rc-update del #{@new_resource.service_name} default")
65
+ shell_out!("/sbin/rc-update del #{@new_resource.service_name} default")
66
66
  end
67
67
  end
@@ -24,6 +24,8 @@ class Chef
24
24
  class Service
25
25
  class Init < Chef::Provider::Service::Simple
26
26
 
27
+ attr_accessor :init_command
28
+
27
29
  def initialize(new_resource, run_context)
28
30
  super
29
31
  @init_command = "/etc/init.d/#{@new_resource.service_name}"
@@ -48,7 +50,7 @@ class Chef
48
50
  if @new_resource.start_command
49
51
  super
50
52
  else
51
- shell_out!("#{default_init_command} start")
53
+ shell_out_with_systems_locale!("#{default_init_command} start")
52
54
  end
53
55
  end
54
56
 
@@ -56,7 +58,7 @@ class Chef
56
58
  if @new_resource.stop_command
57
59
  super
58
60
  else
59
- shell_out!("#{default_init_command} stop")
61
+ shell_out_with_systems_locale!("#{default_init_command} stop")
60
62
  end
61
63
  end
62
64
 
@@ -64,7 +66,7 @@ class Chef
64
66
  if @new_resource.restart_command
65
67
  super
66
68
  elsif @new_resource.supports[:restart]
67
- shell_out!("#{default_init_command} restart")
69
+ shell_out_with_systems_locale!("#{default_init_command} restart")
68
70
  else
69
71
  stop_service
70
72
  sleep 1
@@ -76,7 +78,7 @@ class Chef
76
78
  if @new_resource.reload_command
77
79
  super
78
80
  elsif @new_resource.supports[:reload]
79
- shell_out!("#{default_init_command} reload")
81
+ shell_out_with_systems_locale!("#{default_init_command} reload")
80
82
  end
81
83
  end
82
84
  end
@@ -37,12 +37,12 @@ class Chef
37
37
  end
38
38
 
39
39
  def enable_service()
40
- run_command(:command => "/sbin/insserv -r -f #{@new_resource.service_name}")
41
- run_command(:command => "/sbin/insserv -d -f #{@new_resource.service_name}")
40
+ shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
41
+ shell_out!("/sbin/insserv -d -f #{@new_resource.service_name}")
42
42
  end
43
43
 
44
44
  def disable_service()
45
- run_command(:command => "/sbin/insserv -r -f #{@new_resource.service_name}")
45
+ shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
46
46
  end
47
47
  end
48
48
  end
@@ -83,7 +83,7 @@ class Chef
83
83
  if @new_resource.start_command
84
84
  super
85
85
  else
86
- shell_out!("launchctl load -w '#{@plist}'", :user => @owner_uid, :group => @owner_gid)
86
+ shell_out_with_systems_locale!("launchctl load -w '#{@plist}'", :user => @owner_uid, :group => @owner_gid)
87
87
  end
88
88
  end
89
89
  end
@@ -95,7 +95,7 @@ class Chef
95
95
  if @new_resource.stop_command
96
96
  super
97
97
  else
98
- shell_out!("launchctl unload '#{@plist}'", :user => @owner_uid, :group => @owner_gid)
98
+ shell_out_with_systems_locale!("launchctl unload '#{@plist}'", :user => @owner_uid, :group => @owner_gid)
99
99
  end
100
100
  end
101
101
  end
@@ -25,6 +25,8 @@ class Chef
25
25
  class Service
26
26
  class Simple < Chef::Provider::Service
27
27
 
28
+ attr_reader :status_load_success
29
+
28
30
  def load_current_resource
29
31
  @current_resource = Chef::Resource::Service.new(@new_resource.name)
30
32
  @current_resource.service_name(@new_resource.service_name)
@@ -83,16 +85,16 @@ class Chef
83
85
  end
84
86
 
85
87
  def start_service
86
- shell_out!(@new_resource.start_command)
88
+ shell_out_with_systems_locale!(@new_resource.start_command)
87
89
  end
88
90
 
89
91
  def stop_service
90
- shell_out!(@new_resource.stop_command)
92
+ shell_out_with_systems_locale!(@new_resource.stop_command)
91
93
  end
92
94
 
93
95
  def restart_service
94
96
  if @new_resource.restart_command
95
- shell_out!(@new_resource.restart_command)
97
+ shell_out_with_systems_locale!(@new_resource.restart_command)
96
98
  else
97
99
  stop_service
98
100
  sleep 1
@@ -101,7 +103,7 @@ class Chef
101
103
  end
102
104
 
103
105
  def reload_service
104
- shell_out!(@new_resource.reload_command)
106
+ shell_out_with_systems_locale!(@new_resource.reload_command)
105
107
  end
106
108
 
107
109
  protected
@@ -56,7 +56,7 @@ class Chef
56
56
  alias_method :start_service, :enable_service
57
57
 
58
58
  def reload_service
59
- shell_out!("#{default_init_command} refresh #{@new_resource.service_name}")
59
+ shell_out_with_systems_locale!("#{default_init_command} refresh #{@new_resource.service_name}")
60
60
  end
61
61
 
62
62
  def restart_service
@@ -28,7 +28,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
28
28
  if @new_resource.status_command
29
29
  Chef::Log.debug("#{@new_resource} you have specified a status command, running..")
30
30
 
31
- unless shell_out_with_systems_locale(@new_resource.status_command).error?
31
+ unless shell_out(@new_resource.status_command).error?
32
32
  @current_resource.running(true)
33
33
  else
34
34
  @status_check_success = false
@@ -61,7 +61,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
61
61
  if @new_resource.start_command
62
62
  super
63
63
  else
64
- shell_out_with_systems_locale("/bin/systemctl start #{@new_resource.service_name}")
64
+ shell_out_with_systems_locale!("/bin/systemctl start #{@new_resource.service_name}")
65
65
  end
66
66
  end
67
67
  end
@@ -73,7 +73,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
73
73
  if @new_resource.stop_command
74
74
  super
75
75
  else
76
- shell_out_with_systems_locale("/bin/systemctl stop #{@new_resource.service_name}")
76
+ shell_out_with_systems_locale!("/bin/systemctl stop #{@new_resource.service_name}")
77
77
  end
78
78
  end
79
79
  end
@@ -82,7 +82,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
82
82
  if @new_resource.restart_command
83
83
  super
84
84
  else
85
- shell_out_with_systems_locale("/bin/systemctl restart #{@new_resource.service_name}")
85
+ shell_out_with_systems_locale!("/bin/systemctl restart #{@new_resource.service_name}")
86
86
  end
87
87
  end
88
88
 
@@ -91,7 +91,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
91
91
  super
92
92
  else
93
93
  if @current_resource.running
94
- shell_out_with_systems_locale("/bin/systemctl reload #{@new_resource.service_name}")
94
+ shell_out_with_systems_locale!("/bin/systemctl reload #{@new_resource.service_name}")
95
95
  else
96
96
  start_service
97
97
  end
@@ -99,18 +99,18 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
99
99
  end
100
100
 
101
101
  def enable_service
102
- shell_out_with_systems_locale("/bin/systemctl enable #{@new_resource.service_name}")
102
+ shell_out!("/bin/systemctl enable #{@new_resource.service_name}")
103
103
  end
104
104
 
105
105
  def disable_service
106
- shell_out_with_systems_locale("/bin/systemctl disable #{@new_resource.service_name}")
106
+ shell_out!("/bin/systemctl disable #{@new_resource.service_name}")
107
107
  end
108
108
 
109
109
  def is_active?
110
- shell_out_with_systems_locale("/bin/systemctl is-active #{@new_resource.service_name} --quiet").exitstatus == 0
110
+ shell_out("/bin/systemctl is-active #{@new_resource.service_name} --quiet").exitstatus == 0
111
111
  end
112
112
 
113
113
  def is_enabled?
114
- shell_out_with_systems_locale("/bin/systemctl is-enabled #{@new_resource.service_name} --quiet").exitstatus == 0
114
+ shell_out("/bin/systemctl is-enabled #{@new_resource.service_name} --quiet").exitstatus == 0
115
115
  end
116
116
  end
@@ -97,10 +97,10 @@ class Chef
97
97
  Chef::Log.debug("#{@new_resource} you have specified a status command, running..")
98
98
 
99
99
  begin
100
- if run_command_with_systems_locale(:command => @new_resource.status_command) == 0
100
+ if shell_out!(@new_resource.status_command) == 0
101
101
  @current_resource.running true
102
102
  end
103
- rescue Chef::Exceptions::Exec
103
+ rescue
104
104
  @command_success = false
105
105
  @current_resource.running false
106
106
  nil
@@ -153,7 +153,7 @@ class Chef
153
153
  if @new_resource.start_command
154
154
  super
155
155
  else
156
- run_command_with_systems_locale(:command => "/sbin/start #{@job}")
156
+ shell_out_with_systems_locale!("/sbin/start #{@job}")
157
157
  end
158
158
  end
159
159
  end
@@ -167,7 +167,7 @@ class Chef
167
167
  if @new_resource.stop_command
168
168
  super
169
169
  else
170
- run_command_with_systems_locale(:command => "/sbin/stop #{@job}")
170
+ shell_out_with_systems_locale!("/sbin/stop #{@job}")
171
171
  end
172
172
  end
173
173
  end
@@ -179,7 +179,7 @@ class Chef
179
179
  # Older versions of upstart would fail on restart if the service was currently stopped, check for that. LP:430883
180
180
  else
181
181
  if @current_resource.running
182
- run_command_with_systems_locale(:command => "/sbin/restart #{@job}")
182
+ shell_out_with_systems_locale!("/sbin/restart #{@job}")
183
183
  else
184
184
  start_service
185
185
  end
@@ -191,7 +191,7 @@ class Chef
191
191
  super
192
192
  else
193
193
  # upstart >= 0.6.3-4 supports reload (HUP)
194
- run_command_with_systems_locale(:command => "/sbin/reload #{@job}")
194
+ shell_out_with_systems_locale!("/sbin/reload #{@job}")
195
195
  end
196
196
  end
197
197
 
@@ -60,7 +60,7 @@ class Chef
60
60
  def action_checkout
61
61
  if target_dir_non_existent_or_empty?
62
62
  converge_by("perform checkout of #{@new_resource.repository} into #{@new_resource.destination}") do
63
- run_command(run_options(:command => checkout_command))
63
+ shell_out!(run_options(command: checkout_command))
64
64
  end
65
65
  else
66
66
  Chef::Log.debug "#{@new_resource} checkout destination #{@new_resource.destination} already exists or is a non-empty directory - nothing to do"
@@ -77,7 +77,7 @@ class Chef
77
77
 
78
78
  def action_force_export
79
79
  converge_by("export #{@new_resource.repository} into #{@new_resource.destination}") do
80
- run_command(run_options(:command => export_command))
80
+ shell_out!(run_options(command: export_command))
81
81
  end
82
82
  end
83
83
 
@@ -88,7 +88,7 @@ class Chef
88
88
  Chef::Log.debug "#{@new_resource} current revision: #{current_rev} target revision: #{revision_int}"
89
89
  unless current_revision_matches_target_revision?
90
90
  converge_by("sync #{@new_resource.destination} from #{@new_resource.repository}") do
91
- run_command(run_options(:command => sync_command))
91
+ shell_out!(run_options(command: sync_command))
92
92
  Chef::Log.info "#{@new_resource} updated to revision: #{revision_int}"
93
93
  end
94
94
  end
@@ -100,14 +100,14 @@ class Chef
100
100
  def sync_command
101
101
  c = scm :update, @new_resource.svn_arguments, verbose, authentication, "-r#{revision_int}", @new_resource.destination
102
102
  Chef::Log.debug "#{@new_resource} updated working copy #{@new_resource.destination} to revision #{@new_resource.revision}"
103
- c
103
+ c
104
104
  end
105
105
 
106
106
  def checkout_command
107
107
  c = scm :checkout, @new_resource.svn_arguments, verbose, authentication,
108
108
  "-r#{revision_int}", @new_resource.repository, @new_resource.destination
109
109
  Chef::Log.info "#{@new_resource} checked out #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
110
- c
110
+ c
111
111
  end
112
112
 
113
113
  def export_command
@@ -116,7 +116,7 @@ class Chef
116
116
  "-r#{revision_int}" << @new_resource.repository << @new_resource.destination
117
117
  c = scm :export, *args
118
118
  Chef::Log.info "#{@new_resource} exported #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
119
- c
119
+ c
120
120
  end
121
121
 
122
122
  # If the specified revision isn't an integer ("HEAD" for example), look
@@ -109,18 +109,18 @@ user password using shadow hash.")
109
109
  @current_resource = Chef::Resource::User.new(@new_resource.username)
110
110
  @current_resource.username(@new_resource.username)
111
111
 
112
- user_info = read_user_info
113
- if user_info
114
- @current_resource.uid(dscl_get(user_info, :uid))
115
- @current_resource.gid(dscl_get(user_info, :gid))
116
- @current_resource.home(dscl_get(user_info, :home))
117
- @current_resource.shell(dscl_get(user_info, :shell))
118
- @current_resource.comment(dscl_get(user_info, :comment))
119
- @authentication_authority = dscl_get(user_info, :auth_authority)
120
-
121
- if @new_resource.password && dscl_get(user_info, :password) == "********"
112
+ @user_info = read_user_info
113
+ if @user_info
114
+ @current_resource.uid(dscl_get(@user_info, :uid))
115
+ @current_resource.gid(dscl_get(@user_info, :gid))
116
+ @current_resource.home(dscl_get(@user_info, :home))
117
+ @current_resource.shell(dscl_get(@user_info, :shell))
118
+ @current_resource.comment(dscl_get(@user_info, :comment))
119
+ @authentication_authority = dscl_get(@user_info, :auth_authority)
120
+
121
+ if @new_resource.password && dscl_get(@user_info, :password) == "********"
122
122
  # A password is set. Let's get the password information from shadow file
123
- shadow_hash_binary = dscl_get(user_info, :shadow_hash)
123
+ shadow_hash_binary = dscl_get(@user_info, :shadow_hash)
124
124
 
125
125
  # Calling shell_out directly since we want to give an input stream
126
126
  shadow_hash_xml = convert_binary_plist_to_xml(shadow_hash_binary.string)
@@ -157,22 +157,26 @@ user password using shadow hash.")
157
157
 
158
158
  def create_user
159
159
  dscl_create_user
160
+ # set_password modifies the plist file of the user directly. So update
161
+ # the password first before making any modifications to the user.
162
+ set_password
160
163
  dscl_create_comment
161
164
  dscl_set_uid
162
165
  dscl_set_gid
163
166
  dscl_set_home
164
167
  dscl_set_shell
165
- set_password
166
168
  end
167
169
 
168
170
  def manage_user
171
+ # set_password modifies the plist file of the user directly. So update
172
+ # the password first before making any modifications to the user.
173
+ set_password if diverged_password?
169
174
  dscl_create_user if diverged?(:username)
170
175
  dscl_create_comment if diverged?(:comment)
171
176
  dscl_set_uid if diverged?(:uid)
172
177
  dscl_set_gid if diverged?(:gid)
173
178
  dscl_set_home if diverged?(:home)
174
179
  dscl_set_shell if diverged?(:shell)
175
- set_password if diverged_password?
176
180
  end
177
181
 
178
182
  #
@@ -338,22 +342,18 @@ user password using shadow hash.")
338
342
  :input => shadow_info.to_plist, :live_stream => shadow_info_binary)
339
343
  command.run_command
340
344
 
345
+ if @user_info.nil?
346
+ # User is just created. read_user_info() will read the fresh information
347
+ # for the user with a cache flush. However with experimentation we've seen
348
+ # that dscl cache is not immediately updated after the creation of the user
349
+ # This is odd and needs to be investigated further.
350
+ sleep 3
351
+ @user_info = read_user_info
352
+ end
353
+
341
354
  # Replace the shadow info in user's plist
342
- user_info = read_user_info
343
- dscl_set(user_info, :shadow_hash, shadow_info_binary)
344
-
345
- #
346
- # Before saving the user's plist file we need to wait for dscl to
347
- # update its caches and flush them to disk. In order to achieve this
348
- # we need to wait first for our changes to get into the dscl cache
349
- # and then flush the cache to disk before saving password into the
350
- # plist file. 3 seconds is the minimum experimental value for dscl
351
- # cache to be updated. We can get rid of this sleep when we find a
352
- # trigger to update dscl cache.
353
- #
354
- sleep 3
355
- shell_out("dscacheutil '-flushcache'")
356
- save_user_info(user_info)
355
+ dscl_set(@user_info, :shadow_hash, shadow_info_binary)
356
+ save_user_info(@user_info)
357
357
  end
358
358
 
359
359
  #
@@ -554,6 +554,10 @@ user password using shadow hash.")
554
554
  def read_user_info
555
555
  user_info = nil
556
556
 
557
+ # We flush the cache here in order to make sure that we read fresh information
558
+ # for the user.
559
+ shell_out("dscacheutil '-flushcache'")
560
+
557
561
  begin
558
562
  user_plist_file = "#{USER_PLIST_DIRECTORY}/#{@new_resource.username}.plist"
559
563
  user_plist_info = run_plutil("convert xml1 -o - #{user_plist_file}")
@@ -17,6 +17,7 @@
17
17
  #
18
18
 
19
19
  require 'chef/provider/user'
20
+ require 'chef/exceptions'
20
21
  if RUBY_PLATFORM =~ /mswin|mingw32|windows/
21
22
  require 'chef/util/windows/net_user'
22
23
  end
@@ -28,7 +29,7 @@ class Chef
28
29
 
29
30
  def initialize(new_resource,run_context)
30
31
  super
31
- @net_user = Chef::Util::Windows::NetUser.new(@new_resource.name)
32
+ @net_user = Chef::Util::Windows::NetUser.new(@new_resource.username)
32
33
  end
33
34
 
34
35
  def load_current_resource
@@ -37,17 +38,16 @@ class Chef
37
38
  user_info = nil
38
39
  begin
39
40
  user_info = @net_user.get_info
40
- rescue
41
- @user_exists = false
42
- Chef::Log.debug("#{@new_resource} does not exist")
43
- end
44
41
 
45
- if user_info
46
42
  @current_resource.uid(user_info[:user_id])
47
43
  @current_resource.gid(user_info[:primary_group_id])
48
44
  @current_resource.comment(user_info[:full_name])
49
45
  @current_resource.home(user_info[:home_dir])
50
46
  @current_resource.shell(user_info[:script_path])
47
+ rescue Chef::Exceptions::UserIDNotFound => e
48
+ # e.message should be "The user name could not be found" but checking for that could cause a localization bug
49
+ @user_exists = false
50
+ Chef::Log.debug("#{@new_resource} does not exist (#{e.message})")
51
51
  end
52
52
 
53
53
  @current_resource