chef 0.9.18 → 0.10.0.beta.0

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.
Files changed (177) hide show
  1. data/README.rdoc +0 -3
  2. data/distro/arch/etc/rc.d/chef-server +0 -4
  3. data/distro/arch/etc/rc.d/chef-server-webui +0 -4
  4. data/distro/arch/etc/rc.d/chef-solr +0 -4
  5. data/distro/arch/etc/rc.d/chef-solr-indexer +0 -4
  6. data/lib/chef.rb +3 -3
  7. data/lib/chef/api_client.rb +1 -1
  8. data/lib/chef/application.rb +11 -1
  9. data/lib/chef/application/client.rb +18 -22
  10. data/lib/chef/application/knife.rb +28 -29
  11. data/lib/chef/application/solo.rb +14 -12
  12. data/lib/chef/client.rb +112 -54
  13. data/lib/chef/config.rb +4 -0
  14. data/lib/chef/cookbook/chefignore.rb +66 -0
  15. data/lib/chef/cookbook/cookbook_collection.rb +6 -5
  16. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  17. data/lib/chef/cookbook/file_system_file_vendor.rb +10 -8
  18. data/lib/chef/cookbook/metadata.rb +200 -108
  19. data/lib/chef/cookbook_loader.rb +39 -163
  20. data/lib/chef/cookbook_uploader.rb +100 -78
  21. data/lib/chef/cookbook_version.rb +92 -47
  22. data/lib/chef/cookbook_version_selector.rb +163 -0
  23. data/lib/chef/couchdb.rb +9 -1
  24. data/lib/chef/data_bag.rb +1 -1
  25. data/lib/chef/data_bag_item.rb +1 -1
  26. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  27. data/lib/chef/environment.rb +386 -0
  28. data/lib/chef/exceptions.rb +82 -1
  29. data/lib/chef/index_queue/amqp_client.rb +15 -12
  30. data/lib/chef/index_queue/indexable.rb +38 -4
  31. data/lib/chef/json_compat.rb +3 -3
  32. data/lib/chef/knife.rb +97 -202
  33. data/lib/chef/knife/bootstrap.rb +27 -61
  34. data/lib/chef/knife/bootstrap/archlinux-gems.erb +4 -2
  35. data/lib/chef/knife/bootstrap/centos5-gems.erb +6 -15
  36. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -4
  37. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  38. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -5
  39. data/lib/chef/knife/client_bulk_delete.rb +6 -3
  40. data/lib/chef/knife/client_create.rb +13 -10
  41. data/lib/chef/knife/client_delete.rb +10 -7
  42. data/lib/chef/knife/client_edit.rb +9 -6
  43. data/lib/chef/knife/client_list.rb +8 -5
  44. data/lib/chef/knife/client_reregister.rb +9 -6
  45. data/lib/chef/knife/client_show.rb +9 -6
  46. data/lib/chef/knife/configure.rb +15 -19
  47. data/lib/chef/knife/configure_client.rb +4 -4
  48. data/lib/chef/knife/cookbook_bulk_delete.rb +11 -8
  49. data/lib/chef/knife/cookbook_create.rb +120 -55
  50. data/lib/chef/knife/cookbook_delete.rb +18 -12
  51. data/lib/chef/knife/cookbook_download.rb +10 -6
  52. data/lib/chef/knife/cookbook_list.rb +15 -6
  53. data/lib/chef/knife/cookbook_metadata.rb +41 -21
  54. data/lib/chef/knife/cookbook_metadata_from_file.rb +4 -0
  55. data/lib/chef/knife/cookbook_show.rb +16 -5
  56. data/lib/chef/knife/cookbook_site_download.rb +2 -2
  57. data/lib/chef/knife/cookbook_site_share.rb +18 -13
  58. data/lib/chef/knife/cookbook_site_unshare.rb +7 -4
  59. data/lib/chef/knife/cookbook_site_vendor.rb +21 -18
  60. data/lib/chef/knife/cookbook_test.rb +14 -14
  61. data/lib/chef/knife/cookbook_upload.rb +91 -40
  62. data/lib/chef/knife/data_bag_create.rb +41 -6
  63. data/lib/chef/knife/data_bag_delete.rb +5 -3
  64. data/lib/chef/knife/data_bag_edit.rb +55 -11
  65. data/lib/chef/knife/data_bag_from_file.rb +47 -7
  66. data/lib/chef/knife/data_bag_list.rb +4 -1
  67. data/lib/chef/knife/data_bag_show.rb +44 -4
  68. data/lib/chef/knife/environment_create.rb +53 -0
  69. data/lib/chef/knife/environment_delete.rb +45 -0
  70. data/lib/chef/knife/environment_edit.rb +45 -0
  71. data/lib/chef/knife/environment_from_file.rb +39 -0
  72. data/lib/chef/knife/environment_list.rb +42 -0
  73. data/lib/chef/knife/environment_show.rb +46 -0
  74. data/lib/chef/knife/exec.rb +1 -1
  75. data/lib/chef/knife/index_rebuild.rb +8 -9
  76. data/lib/chef/knife/node_bulk_delete.rb +9 -6
  77. data/lib/chef/knife/node_create.rb +9 -6
  78. data/lib/chef/knife/node_delete.rb +10 -7
  79. data/lib/chef/knife/node_edit.rb +129 -10
  80. data/lib/chef/knife/node_from_file.rb +10 -7
  81. data/lib/chef/knife/node_list.rb +11 -6
  82. data/lib/chef/knife/node_run_list_add.rb +10 -7
  83. data/lib/chef/knife/node_run_list_remove.rb +9 -6
  84. data/lib/chef/knife/node_show.rb +15 -7
  85. data/lib/chef/knife/recipe_list.rb +4 -3
  86. data/lib/chef/knife/role_bulk_delete.rb +9 -6
  87. data/lib/chef/knife/role_create.rb +9 -6
  88. data/lib/chef/knife/role_delete.rb +10 -7
  89. data/lib/chef/knife/role_edit.rb +11 -8
  90. data/lib/chef/knife/role_from_file.rb +10 -7
  91. data/lib/chef/knife/role_list.rb +8 -5
  92. data/lib/chef/knife/role_show.rb +11 -8
  93. data/lib/chef/knife/search.rb +33 -10
  94. data/lib/chef/knife/ssh.rb +33 -61
  95. data/lib/chef/knife/status.rb +7 -4
  96. data/lib/chef/knife/subcommand_loader.rb +101 -0
  97. data/lib/chef/knife/tag_create.rb +31 -0
  98. data/lib/chef/knife/tag_delete.rb +31 -0
  99. data/lib/chef/knife/tag_list.rb +29 -0
  100. data/lib/chef/knife/ui.rb +229 -0
  101. data/lib/chef/knife/windows_bootstrap.rb +8 -5
  102. data/lib/chef/log.rb +5 -59
  103. data/lib/chef/mash.rb +211 -0
  104. data/lib/chef/mixins.rb +1 -2
  105. data/lib/chef/nil_argument.rb +3 -0
  106. data/lib/chef/node.rb +96 -34
  107. data/lib/chef/platform.rb +27 -0
  108. data/lib/chef/provider/cookbook_file.rb +21 -20
  109. data/lib/chef/provider/deploy/revision.rb +3 -0
  110. data/lib/chef/provider/file.rb +20 -11
  111. data/lib/chef/provider/git.rb +26 -26
  112. data/lib/chef/provider/group/aix.rb +70 -0
  113. data/lib/chef/provider/group/groupadd.rb +7 -4
  114. data/lib/chef/provider/group/usermod.rb +1 -1
  115. data/lib/chef/provider/package.rb +28 -28
  116. data/lib/chef/provider/package/dpkg.rb +1 -1
  117. data/lib/chef/provider/package/portage.rb +50 -39
  118. data/lib/chef/provider/package/rubygems.rb +1 -1
  119. data/lib/chef/provider/package/zypper.rb +3 -20
  120. data/lib/chef/provider/remote_directory.rb +0 -2
  121. data/lib/chef/provider/remote_file.rb +2 -3
  122. data/lib/chef/provider/service/arch.rb +28 -35
  123. data/lib/chef/provider/service/simple.rb +1 -1
  124. data/lib/chef/provider/subversion.rb +22 -22
  125. data/lib/chef/providers.rb +1 -0
  126. data/lib/chef/recipe.rb +10 -12
  127. data/lib/chef/resource.rb +49 -42
  128. data/lib/chef/resource/gem_package.rb +7 -3
  129. data/lib/chef/resource/git.rb +5 -5
  130. data/lib/chef/resource/package.rb +7 -7
  131. data/lib/chef/resource/scm.rb +2 -1
  132. data/lib/chef/resource/solaris_package.rb +0 -1
  133. data/lib/chef/resource/yum_package.rb +0 -1
  134. data/lib/chef/rest.rb +7 -16
  135. data/lib/chef/rest/rest_request.rb +0 -16
  136. data/lib/chef/role.rb +67 -13
  137. data/lib/chef/run_context.rb +37 -21
  138. data/lib/chef/run_list.rb +30 -15
  139. data/lib/chef/run_list/run_list_expansion.rb +41 -20
  140. data/lib/chef/run_list/run_list_item.rb +20 -6
  141. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  142. data/lib/chef/runner.rb +7 -15
  143. data/lib/chef/search/query.rb +12 -7
  144. data/lib/chef/shef.rb +6 -7
  145. data/lib/chef/shef/shef_session.rb +40 -35
  146. data/lib/chef/shell_out.rb +22 -201
  147. data/lib/chef/shell_out/unix.rb +224 -0
  148. data/lib/chef/shell_out/windows.rb +95 -0
  149. data/lib/chef/solr_query.rb +187 -0
  150. data/lib/chef/solr_query/lucene.treetop +145 -0
  151. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  152. data/lib/chef/solr_query/query_transform.rb +65 -0
  153. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  154. data/lib/chef/version.rb +4 -2
  155. data/lib/chef/version_class.rb +70 -0
  156. data/lib/chef/version_constraint.rb +116 -0
  157. metadata +68 -37
  158. data/lib/chef/cookbook/metadata/version.rb +0 -87
  159. data/lib/chef/knife/bluebox_images_list.rb +0 -54
  160. data/lib/chef/knife/bluebox_server_create.rb +0 -157
  161. data/lib/chef/knife/bluebox_server_delete.rb +0 -63
  162. data/lib/chef/knife/bluebox_server_list.rb +0 -59
  163. data/lib/chef/knife/ec2_instance_data.rb +0 -46
  164. data/lib/chef/knife/ec2_server_create.rb +0 -218
  165. data/lib/chef/knife/ec2_server_delete.rb +0 -87
  166. data/lib/chef/knife/ec2_server_list.rb +0 -89
  167. data/lib/chef/knife/rackspace_server_create.rb +0 -184
  168. data/lib/chef/knife/rackspace_server_delete.rb +0 -57
  169. data/lib/chef/knife/rackspace_server_list.rb +0 -59
  170. data/lib/chef/knife/slicehost_images_list.rb +0 -53
  171. data/lib/chef/knife/slicehost_server_create.rb +0 -103
  172. data/lib/chef/knife/slicehost_server_delete.rb +0 -61
  173. data/lib/chef/knife/slicehost_server_list.rb +0 -64
  174. data/lib/chef/knife/terremark_server_create.rb +0 -152
  175. data/lib/chef/knife/terremark_server_delete.rb +0 -87
  176. data/lib/chef/knife/terremark_server_list.rb +0 -77
  177. data/lib/chef/mixin/find_preferred_file.rb +0 -92
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -25,17 +25,17 @@ require 'chef/platform'
25
25
  class Chef
26
26
  class Provider
27
27
  class Package < Chef::Provider
28
-
28
+
29
29
  include Chef::Mixin::Command
30
-
30
+
31
31
  attr_accessor :candidate_version
32
-
32
+
33
33
  def initialize(new_resource, run_context)
34
34
  super
35
35
  @candidate_version = nil
36
36
  end
37
-
38
- def action_install
37
+
38
+ def action_install
39
39
  # If we specified a version, and it's not the current version, move to the specified version
40
40
  if @new_resource.version != nil && @new_resource.version != @current_resource.version
41
41
  install_version = @new_resource.version
@@ -51,18 +51,18 @@ class Chef
51
51
  end
52
52
 
53
53
  Chef::Log.info("Installing #{@new_resource} version #{install_version}")
54
-
54
+
55
55
  # We need to make sure we handle the preseed file
56
56
  if @new_resource.response_file
57
57
  preseed_package(@new_resource.package_name, install_version)
58
58
  end
59
-
59
+
60
60
  status = install_package(@new_resource.package_name, install_version)
61
61
  if status
62
62
  @new_resource.updated_by_last_action(true)
63
63
  end
64
64
  end
65
-
65
+
66
66
  def action_upgrade
67
67
  if @current_resource.version != candidate_version
68
68
  orig_version = @current_resource.version || "uninstalled"
@@ -73,8 +73,8 @@ class Chef
73
73
  end
74
74
  end
75
75
  end
76
-
77
- def action_remove
76
+
77
+ def action_remove
78
78
  if removing_package?
79
79
  Chef::Log.info("Removing #{@new_resource}")
80
80
  remove_package(@current_resource.package_name, @new_resource.version)
@@ -82,7 +82,7 @@ class Chef
82
82
  else
83
83
  end
84
84
  end
85
-
85
+
86
86
  def removing_package?
87
87
  if @current_resource.version.nil?
88
88
  false # nothing to remove
@@ -94,7 +94,7 @@ class Chef
94
94
  false # we don't have the version we want to remove
95
95
  end
96
96
  end
97
-
97
+
98
98
  def action_purge
99
99
  if removing_package?
100
100
  Chef::Log.info("Purging #{@new_resource}")
@@ -102,39 +102,39 @@ class Chef
102
102
  @new_resource.updated_by_last_action(true)
103
103
  end
104
104
  end
105
-
105
+
106
106
  def install_package(name, version)
107
107
  raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :install"
108
108
  end
109
-
109
+
110
110
  def upgrade_package(name, version)
111
- raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
111
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
112
112
  end
113
-
113
+
114
114
  def remove_package(name, version)
115
- raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
115
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
116
116
  end
117
-
117
+
118
118
  def purge_package(name, version)
119
- raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
119
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
120
120
  end
121
-
121
+
122
122
  def preseed_package(name, version)
123
- raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
123
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
124
124
  end
125
-
125
+
126
126
  def get_preseed_file(name, version)
127
127
  resource = preseed_resource(name, version)
128
128
  Chef::Log.debug("Fetching preseed file to #{resource.path}")
129
129
  resource.run_action('create')
130
-
130
+
131
131
  if resource.updated_by_last_action?
132
132
  resource.path
133
133
  else
134
134
  false
135
135
  end
136
136
  end
137
-
137
+
138
138
  def preseed_resource(name, version)
139
139
  # A directory in our cache to store this cookbook's preseed files in
140
140
  file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{@new_resource.cookbook_name}")
@@ -147,14 +147,14 @@ class Chef
147
147
  remote_file.cookbook_name = @new_resource.cookbook_name
148
148
  remote_file.source(@new_resource.response_file)
149
149
  remote_file.backup(false)
150
-
150
+
151
151
  remote_file
152
152
  end
153
153
 
154
154
  def expand_options(options)
155
155
  options ? " #{options}" : ""
156
156
  end
157
-
157
+
158
158
  end
159
159
  end
160
160
  end
@@ -24,7 +24,7 @@ class Chef
24
24
  class Provider
25
25
  class Package
26
26
  class Dpkg < Chef::Provider::Package::Apt
27
- DPKG_INFO = /([a-z\d\-\+]+)\t([\w\d.~-]+)/
27
+ DPKG_INFO = /([a-z\d\-\+]+)\t([\w\d.-]+)/
28
28
  DPKG_INSTALLED = /^Status: install ok installed/
29
29
  DPKG_VERSION = /^Version: (.+)$/
30
30
 
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,48 +24,59 @@ class Chef
24
24
  class Provider
25
25
  class Package
26
26
  class Portage < Chef::Provider::Package
27
-
27
+ PACKAGE_NAME_PATTERN = %r{(([^/]+)/)?([^/]+)}
28
+
28
29
  def load_current_resource
29
30
  @current_resource = Chef::Resource::Package.new(@new_resource.name)
30
31
  @current_resource.package_name(@new_resource.package_name)
31
32
 
32
- category = @new_resource.package_name.split('/').first
33
- pkg = @new_resource.package_name.split('/').last
34
-
35
33
  @current_resource.version(nil)
36
34
 
37
- catdir = "/var/db/pkg/#{category}"
35
+ _, category_with_slash, category, pkg = %r{^#{PACKAGE_NAME_PATTERN}$}.match(@new_resource.package_name).to_a
38
36
 
39
- if( ::File.exists?(catdir) )
40
- Dir.entries(catdir).each do |entry|
41
- if(entry =~ /^#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)/)
42
- @current_resource.version($1)
43
- Chef::Log.debug("Got current version #{$1}")
44
- break
45
- end
37
+ possibilities = Dir["/var/db/pkg/#{category || "*"}/#{pkg}-*"].map {|d| d.sub(%r{/var/db/pkg/}, "") }
38
+ versions = possibilities.map do |entry|
39
+ if(entry =~ %r{[^/]+/#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)})
40
+ [$&, $1]
46
41
  end
42
+ end.compact
43
+
44
+ if versions.size > 1
45
+ atoms = versions.map {|v| v.first }.sort
46
+ raise Chef::Exceptions::Package, "Multiple packages found for #{@new_resource.package_name}: #{atoms.join(" ")}. Specify a category."
47
+ elsif versions.size == 1
48
+ @current_resource.version(versions.first.last)
49
+ Chef::Log.debug("Got current version #{$1}")
47
50
  end
48
51
 
49
52
  @current_resource
50
53
  end
51
-
52
-
54
+
55
+
53
56
  def parse_emerge(package, txt)
54
- available, installed, pkg = nil
55
- txt.each do |line|
56
- if line =~ /\*(.*)/
57
- pkg = $1.strip
57
+ availables = {}
58
+ package_without_category = package.split("/").last
59
+ found_package_name = nil
60
+
61
+ txt.each_line do |line|
62
+ if line =~ /\*\s+#{PACKAGE_NAME_PATTERN}/
63
+ found_package_name = $&.strip
64
+ if found_package_name == package || found_package_name.split("/").last == package_without_category
65
+ availables[found_package_name] = nil
66
+ end
58
67
  end
59
- if (pkg == package) || (pkg.split('/').last == package rescue false)
60
- if line =~ /Latest version available: (.*)/
61
- available = $1
62
- elsif line =~ /Latest version installed: (.*)/
63
- installed = $1
64
- end
68
+
69
+ if line =~ /Latest version available: (.*)/ && availables.has_key?(found_package_name)
70
+ availables[found_package_name] = $1.strip
65
71
  end
66
- end
67
- available = installed unless available
68
- [available, installed]
72
+ end
73
+
74
+ if availables.size > 1
75
+ # shouldn't happen if a category is specified so just use `package`
76
+ raise Chef::Exceptions::Package, "Multiple emerge results found for #{package}: #{availables.keys.join(" ")}. Specify a category."
77
+ end
78
+
79
+ availables.values.first
69
80
  end
70
81
 
71
82
  def candidate_version
@@ -83,29 +94,29 @@ class Chef
83
94
  @candidate_version
84
95
 
85
96
  end
86
-
87
-
97
+
98
+
88
99
  def install_package(name, version)
89
- pkg = "=#{name}-#{version}"
90
-
100
+ pkg = "=#{name}-#{version}"
101
+
91
102
  if(version =~ /^\~(.+)/)
92
103
  # If we start with a tilde
93
104
  pkg = "~#{name}-#{$1}"
94
105
  end
95
-
106
+
96
107
  run_command_with_systems_locale(
97
108
  :command => "emerge -g --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
98
109
  )
99
110
  end
100
-
111
+
101
112
  def upgrade_package(name, version)
102
113
  install_package(name, version)
103
114
  end
104
-
115
+
105
116
  def remove_package(name, version)
106
117
  if(version)
107
118
  pkg = "=#{@new_resource.package_name}-#{version}"
108
- else
119
+ else
109
120
  pkg = "#{@new_resource.package_name}"
110
121
  end
111
122
 
@@ -113,11 +124,11 @@ class Chef
113
124
  :command => "emerge --unmerge --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
114
125
  )
115
126
  end
116
-
127
+
117
128
  def purge_package(name, version)
118
129
  remove_package(name, version)
119
130
  end
120
-
131
+
121
132
  end
122
133
  end
123
134
  end
@@ -353,7 +353,7 @@ class Chef
353
353
  end
354
354
 
355
355
  def gem_sources
356
- @new_resource.source ? [@new_resource.source, 'http://rubygems.org'] : nil
356
+ @new_resource.source ? Array(@new_resource.source) : nil
357
357
  end
358
358
 
359
359
  def load_current_resource
@@ -84,18 +84,9 @@ class Chef
84
84
  Chef::Log.debug("zypper current resource #{@current_resource}")
85
85
  @current_resource
86
86
  end
87
-
88
- #Gets the zypper Version from command output (Returns Floating Point number)
89
- def zypper_version()
90
- `zypper -V 2>&1`.scan(/\d+/).join(".").to_f
91
- end
92
87
 
93
88
  def install_package(name, version)
94
- if zypper_version < 1.0
95
- run_command(
96
- :command => "zypper install -y #{name}"
97
- )
98
- elsif version
89
+ if version
99
90
  run_command(
100
91
  :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
101
92
  )
@@ -107,11 +98,7 @@ class Chef
107
98
  end
108
99
 
109
100
  def upgrade_package(name, version)
110
- if zypper_version < 1.0
111
- run_command(
112
- :command => "zypper install -y #{name}"
113
- )
114
- elsif version
101
+ if version
115
102
  run_command(
116
103
  :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
117
104
  )
@@ -123,11 +110,7 @@ class Chef
123
110
  end
124
111
 
125
112
  def remove_package(name, version)
126
- if zypper_version < 1.0
127
- run_command(
128
- :command => "zypper remove -y #{name}"
129
- )
130
- elsif version
113
+ if version
131
114
  run_command(
132
115
  :command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
133
116
  )
@@ -18,8 +18,6 @@
18
18
 
19
19
  require 'chef/provider/file'
20
20
  require 'chef/provider/directory'
21
- #require 'chef/rest'
22
- #require 'chef/mixin/find_preferred_file'
23
21
  require 'chef/resource/directory'
24
22
  require 'chef/resource/remote_file'
25
23
  require 'chef/platform'
@@ -18,7 +18,6 @@
18
18
 
19
19
  require 'chef/provider/file'
20
20
  require 'chef/rest'
21
- require 'chef/mixin/find_preferred_file'
22
21
  require 'uri'
23
22
  require 'tempfile'
24
23
  require 'net/https'
@@ -27,14 +26,14 @@ class Chef
27
26
  class Provider
28
27
  class RemoteFile < Chef::Provider::File
29
28
 
30
- include Chef::Mixin::FindPreferredFile
31
-
32
29
  def load_current_resource
33
30
  super
34
31
  @current_resource.checksum(checksum(@current_resource.path)) if ::File.exist?(@current_resource.path)
35
32
  end
36
33
 
37
34
  def action_create
35
+ assert_enclosing_directory_exists!
36
+
38
37
  Chef::Log.debug("Checking #{@new_resource} for changes")
39
38
 
40
39
  if current_resource_matches_target_checksum?
@@ -20,16 +20,16 @@ require 'chef/provider/service/init'
20
20
  require 'chef/mixin/command'
21
21
 
22
22
  class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
23
-
23
+
24
24
  def initialize(new_resource, run_context)
25
25
  super
26
26
  @init_command = "/etc/rc.d/#{@new_resource.service_name}"
27
27
  end
28
-
28
+
29
29
  def load_current_resource
30
-
30
+
31
31
  raise Chef::Exceptions::Service unless ::File.exists?("/etc/rc.conf")
32
- raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
32
+ raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
33
33
 
34
34
  super
35
35
 
@@ -38,46 +38,38 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
38
38
  @current_resource
39
39
  end
40
40
 
41
- # Get list of all daemons from the file '/etc/rc.conf'.
42
- # Mutiple lines and background form are supported. Example:
43
- # DAEMONS=(\
44
- # foobar \
45
- # @example \
46
- # !net \
47
- # )
48
41
  def daemons
49
42
  entries = []
50
- if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
51
- entries += $1.gsub(/\\?[\r\n]/, ' ').gsub(/# *[^ ]+/,' ').split(' ') if $1.length > 0
43
+ if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
44
+ entries += $1.split(" ") if $1.length > 0
52
45
  end
53
-
46
+
54
47
  yield(entries) if block_given?
55
-
48
+
56
49
  entries
57
50
  end
58
-
59
- # FIXME: Multiple entries of DAEMONS will cause very bad results :)
51
+
60
52
  def update_daemons(entries)
61
- content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/m, "DAEMONS=(#{entries.join(' ')})")
53
+ content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/, "DAEMONS=(#{entries.join(' ')})")
62
54
  ::File.open("/etc/rc.conf", "w") do |f|
63
55
  f.write(content)
64
56
  end
65
57
  end
66
-
58
+
67
59
  def enable_service()
68
60
  new_daemons = []
69
61
  entries = daemons
70
-
71
- if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
72
- # exists and already enabled (or already enabled as a background service)
73
- # new_daemons += entries
62
+
63
+ if entries.include?(new_resource.service_name)
64
+ # exists and already enabled
65
+ new_daemons += entries
74
66
  else
75
67
  if entries.include?("!#{new_resource.service_name}")
76
68
  # exists but disabled
77
69
  entries.each do |daemon|
78
- if daemon == "!#{new_resource.service_name}"
70
+ if daemon == "!#{new_resource.service_name}"
79
71
  new_daemons << new_resource.service_name
80
- else
72
+ else
81
73
  new_daemons << daemon
82
74
  end
83
75
  end
@@ -86,31 +78,32 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
86
78
  new_daemons += entries
87
79
  new_daemons << new_resource.service_name
88
80
  end
89
- update_daemons(new_daemons)
90
81
  end
82
+
83
+ update_daemons(new_daemons)
91
84
  end
92
-
85
+
93
86
  def disable_service()
94
87
  new_daemons = []
95
88
  entries = daemons
96
-
89
+
97
90
  if entries.include?("!#{new_resource.service_name}")
98
91
  # exists and disabled
99
- # new_daemons += entries
92
+ new_daemons += entries
100
93
  else
101
- if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
102
- # exists but enabled (or enabled as a back-ground service)
103
- # FIXME: Does arch support !@foobar ?
94
+ if entries.include?(new_resource.service_name)
95
+ # exists but enabled
104
96
  entries.each do |daemon|
105
- if [new_resource.service_name, "@#{new_resource.service_name}"].include?(daemon)
97
+ if daemon == new_resource.service_name
106
98
  new_daemons << "!#{new_resource.service_name}"
107
- else
99
+ else
108
100
  new_daemons << daemon
109
101
  end
110
102
  end
111
103
  end
112
- update_daemons(new_daemons)
113
104
  end
105
+
106
+ update_daemons(new_daemons)
114
107
  end
115
108
 
116
109
  end