runa-chef 0.8.0.1

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 (216) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +136 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +26 -0
  5. data/bin/knife +27 -0
  6. data/bin/shef +45 -0
  7. data/distro/README +2 -0
  8. data/distro/common/man/man1/chef-indexer.1 +42 -0
  9. data/distro/common/man/man1/chef-server.1 +108 -0
  10. data/distro/common/man/man8/chef-client.8 +61 -0
  11. data/distro/common/man/man8/chef-solo.8 +58 -0
  12. data/distro/common/man/man8/knife.8 +359 -0
  13. data/distro/debian/etc/init.d/chef-client +175 -0
  14. data/distro/debian/etc/init.d/chef-indexer +175 -0
  15. data/distro/debian/etc/init.d/chef-server +120 -0
  16. data/distro/redhat/etc/init.d/chef-client +78 -0
  17. data/distro/redhat/etc/init.d/chef-indexer +76 -0
  18. data/distro/redhat/etc/init.d/chef-server +78 -0
  19. data/distro/redhat/etc/sysconfig/chef-client +10 -0
  20. data/distro/redhat/etc/sysconfig/chef-indexer +8 -0
  21. data/distro/redhat/etc/sysconfig/chef-server +10 -0
  22. data/distro/suse/etc/init.d/chef-client +121 -0
  23. data/lib/chef.rb +49 -0
  24. data/lib/chef/api_client.rb +269 -0
  25. data/lib/chef/application.rb +98 -0
  26. data/lib/chef/application/agent.rb +18 -0
  27. data/lib/chef/application/client.rb +214 -0
  28. data/lib/chef/application/knife.rb +138 -0
  29. data/lib/chef/application/server.rb +19 -0
  30. data/lib/chef/application/solo.rb +214 -0
  31. data/lib/chef/cache.rb +61 -0
  32. data/lib/chef/cache/checksum.rb +70 -0
  33. data/lib/chef/certificate.rb +154 -0
  34. data/lib/chef/client.rb +323 -0
  35. data/lib/chef/compile.rb +158 -0
  36. data/lib/chef/config.rb +195 -0
  37. data/lib/chef/cookbook.rb +198 -0
  38. data/lib/chef/cookbook/metadata.rb +487 -0
  39. data/lib/chef/cookbook/metadata/version.rb +87 -0
  40. data/lib/chef/cookbook_loader.rb +180 -0
  41. data/lib/chef/couchdb.rb +273 -0
  42. data/lib/chef/daemon.rb +170 -0
  43. data/lib/chef/data_bag.rb +216 -0
  44. data/lib/chef/data_bag_item.rb +227 -0
  45. data/lib/chef/exceptions.rb +39 -0
  46. data/lib/chef/file_cache.rb +205 -0
  47. data/lib/chef/knife.rb +300 -0
  48. data/lib/chef/knife/client_bulk_delete.rb +41 -0
  49. data/lib/chef/knife/client_create.rb +55 -0
  50. data/lib/chef/knife/client_delete.rb +37 -0
  51. data/lib/chef/knife/client_edit.rb +37 -0
  52. data/lib/chef/knife/client_list.rb +40 -0
  53. data/lib/chef/knife/client_reregister.rb +48 -0
  54. data/lib/chef/knife/client_show.rb +42 -0
  55. data/lib/chef/knife/configure.rb +84 -0
  56. data/lib/chef/knife/cookbook_bulk_delete.rb +47 -0
  57. data/lib/chef/knife/cookbook_delete.rb +41 -0
  58. data/lib/chef/knife/cookbook_download.rb +57 -0
  59. data/lib/chef/knife/cookbook_list.rb +41 -0
  60. data/lib/chef/knife/cookbook_metadata.rb +87 -0
  61. data/lib/chef/knife/cookbook_show.rb +75 -0
  62. data/lib/chef/knife/cookbook_upload.rb +173 -0
  63. data/lib/chef/knife/data_bag_create.rb +43 -0
  64. data/lib/chef/knife/data_bag_delete.rb +43 -0
  65. data/lib/chef/knife/data_bag_edit.rb +49 -0
  66. data/lib/chef/knife/data_bag_list.rb +42 -0
  67. data/lib/chef/knife/data_bag_show.rb +40 -0
  68. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  69. data/lib/chef/knife/node_bulk_delete.rb +44 -0
  70. data/lib/chef/knife/node_create.rb +39 -0
  71. data/lib/chef/knife/node_delete.rb +36 -0
  72. data/lib/chef/knife/node_edit.rb +36 -0
  73. data/lib/chef/knife/node_from_file.rb +42 -0
  74. data/lib/chef/knife/node_list.rb +41 -0
  75. data/lib/chef/knife/node_run_list_add.rb +64 -0
  76. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  77. data/lib/chef/knife/node_show.rb +46 -0
  78. data/lib/chef/knife/role_bulk_delete.rb +45 -0
  79. data/lib/chef/knife/role_create.rb +44 -0
  80. data/lib/chef/knife/role_delete.rb +36 -0
  81. data/lib/chef/knife/role_edit.rb +37 -0
  82. data/lib/chef/knife/role_from_file.rb +46 -0
  83. data/lib/chef/knife/role_list.rb +40 -0
  84. data/lib/chef/knife/role_show.rb +43 -0
  85. data/lib/chef/knife/search.rb +94 -0
  86. data/lib/chef/log.rb +39 -0
  87. data/lib/chef/mixin/check_helper.rb +31 -0
  88. data/lib/chef/mixin/checksum.rb +32 -0
  89. data/lib/chef/mixin/command.rb +390 -0
  90. data/lib/chef/mixin/convert_to_class_name.rb +57 -0
  91. data/lib/chef/mixin/create_path.rb +56 -0
  92. data/lib/chef/mixin/deep_merge.rb +33 -0
  93. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  94. data/lib/chef/mixin/from_file.rb +50 -0
  95. data/lib/chef/mixin/generate_url.rb +58 -0
  96. data/lib/chef/mixin/language.rb +107 -0
  97. data/lib/chef/mixin/language_include_attribute.rb +56 -0
  98. data/lib/chef/mixin/language_include_recipe.rb +53 -0
  99. data/lib/chef/mixin/params_validate.rb +197 -0
  100. data/lib/chef/mixin/recipe_definition_dsl_core.rb +79 -0
  101. data/lib/chef/mixin/template.rb +94 -0
  102. data/lib/chef/nanite.rb +100 -0
  103. data/lib/chef/node.rb +463 -0
  104. data/lib/chef/node/attribute.rb +412 -0
  105. data/lib/chef/openid_registration.rb +181 -0
  106. data/lib/chef/platform.rb +268 -0
  107. data/lib/chef/provider.rb +101 -0
  108. data/lib/chef/provider/breakpoint.rb +36 -0
  109. data/lib/chef/provider/cron.rb +184 -0
  110. data/lib/chef/provider/deploy.rb +314 -0
  111. data/lib/chef/provider/deploy/revision.rb +70 -0
  112. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  113. data/lib/chef/provider/directory.rb +72 -0
  114. data/lib/chef/provider/erl_call.rb +72 -0
  115. data/lib/chef/provider/execute.rb +58 -0
  116. data/lib/chef/provider/file.rb +195 -0
  117. data/lib/chef/provider/git.rb +203 -0
  118. data/lib/chef/provider/group.rb +120 -0
  119. data/lib/chef/provider/group/dscl.rb +128 -0
  120. data/lib/chef/provider/group/gpasswd.rb +50 -0
  121. data/lib/chef/provider/group/groupadd.rb +78 -0
  122. data/lib/chef/provider/group/pw.rb +88 -0
  123. data/lib/chef/provider/group/usermod.rb +57 -0
  124. data/lib/chef/provider/http_request.rb +106 -0
  125. data/lib/chef/provider/ifconfig.rb +131 -0
  126. data/lib/chef/provider/link.rb +157 -0
  127. data/lib/chef/provider/mdadm.rb +88 -0
  128. data/lib/chef/provider/mount.rb +117 -0
  129. data/lib/chef/provider/mount/mount.rb +208 -0
  130. data/lib/chef/provider/package.rb +160 -0
  131. data/lib/chef/provider/package/apt.rb +110 -0
  132. data/lib/chef/provider/package/dpkg.rb +109 -0
  133. data/lib/chef/provider/package/easy_install.rb +106 -0
  134. data/lib/chef/provider/package/freebsd.rb +153 -0
  135. data/lib/chef/provider/package/macports.rb +105 -0
  136. data/lib/chef/provider/package/portage.rb +124 -0
  137. data/lib/chef/provider/package/rpm.rb +99 -0
  138. data/lib/chef/provider/package/rubygems.rb +136 -0
  139. data/lib/chef/provider/package/yum-dump.py +125 -0
  140. data/lib/chef/provider/package/yum.rb +175 -0
  141. data/lib/chef/provider/package/zypper.rb +132 -0
  142. data/lib/chef/provider/remote_directory.rb +126 -0
  143. data/lib/chef/provider/remote_file.rb +141 -0
  144. data/lib/chef/provider/route.rb +118 -0
  145. data/lib/chef/provider/ruby_block.rb +33 -0
  146. data/lib/chef/provider/script.rb +42 -0
  147. data/lib/chef/provider/service.rb +135 -0
  148. data/lib/chef/provider/service/debian.rb +64 -0
  149. data/lib/chef/provider/service/freebsd.rb +156 -0
  150. data/lib/chef/provider/service/gentoo.rb +54 -0
  151. data/lib/chef/provider/service/init.rb +71 -0
  152. data/lib/chef/provider/service/redhat.rb +62 -0
  153. data/lib/chef/provider/service/simple.rb +114 -0
  154. data/lib/chef/provider/subversion.rb +156 -0
  155. data/lib/chef/provider/template.rb +175 -0
  156. data/lib/chef/provider/user.rb +170 -0
  157. data/lib/chef/provider/user/dscl.rb +280 -0
  158. data/lib/chef/provider/user/pw.rb +113 -0
  159. data/lib/chef/provider/user/useradd.rb +108 -0
  160. data/lib/chef/recipe.rb +105 -0
  161. data/lib/chef/resource.rb +380 -0
  162. data/lib/chef/resource/apt_package.rb +34 -0
  163. data/lib/chef/resource/bash.rb +33 -0
  164. data/lib/chef/resource/breakpoint.rb +35 -0
  165. data/lib/chef/resource/cron.rb +179 -0
  166. data/lib/chef/resource/csh.rb +33 -0
  167. data/lib/chef/resource/deploy.rb +359 -0
  168. data/lib/chef/resource/deploy_revision.rb +35 -0
  169. data/lib/chef/resource/directory.rb +76 -0
  170. data/lib/chef/resource/dpkg_package.rb +34 -0
  171. data/lib/chef/resource/easy_install_package.rb +41 -0
  172. data/lib/chef/resource/erl_call.rb +83 -0
  173. data/lib/chef/resource/execute.rb +127 -0
  174. data/lib/chef/resource/file.rb +84 -0
  175. data/lib/chef/resource/gem_package.rb +41 -0
  176. data/lib/chef/resource/git.rb +36 -0
  177. data/lib/chef/resource/group.rb +70 -0
  178. data/lib/chef/resource/http_request.rb +52 -0
  179. data/lib/chef/resource/ifconfig.rb +134 -0
  180. data/lib/chef/resource/link.rb +78 -0
  181. data/lib/chef/resource/macports_package.rb +29 -0
  182. data/lib/chef/resource/mdadm.rb +82 -0
  183. data/lib/chef/resource/mount.rb +135 -0
  184. data/lib/chef/resource/package.rb +80 -0
  185. data/lib/chef/resource/perl.rb +33 -0
  186. data/lib/chef/resource/portage_package.rb +33 -0
  187. data/lib/chef/resource/python.rb +33 -0
  188. data/lib/chef/resource/remote_directory.rb +91 -0
  189. data/lib/chef/resource/remote_file.rb +60 -0
  190. data/lib/chef/resource/route.rb +135 -0
  191. data/lib/chef/resource/ruby.rb +33 -0
  192. data/lib/chef/resource/ruby_block.rb +39 -0
  193. data/lib/chef/resource/scm.rb +137 -0
  194. data/lib/chef/resource/script.rb +51 -0
  195. data/lib/chef/resource/service.rb +134 -0
  196. data/lib/chef/resource/subversion.rb +34 -0
  197. data/lib/chef/resource/template.rb +60 -0
  198. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  199. data/lib/chef/resource/user.rb +101 -0
  200. data/lib/chef/resource_collection.rb +212 -0
  201. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  202. data/lib/chef/resource_definition.rb +67 -0
  203. data/lib/chef/rest.rb +298 -0
  204. data/lib/chef/role.rb +301 -0
  205. data/lib/chef/run_list.rb +164 -0
  206. data/lib/chef/runner.rb +130 -0
  207. data/lib/chef/search/query.rb +71 -0
  208. data/lib/chef/shef.rb +220 -0
  209. data/lib/chef/shef/ext.rb +297 -0
  210. data/lib/chef/shef/shef_session.rb +175 -0
  211. data/lib/chef/streaming_cookbook_uploader.rb +185 -0
  212. data/lib/chef/tasks/chef_repo.rake +245 -0
  213. data/lib/chef/util/file_edit.rb +125 -0
  214. data/lib/chef/util/fileedit.rb +121 -0
  215. data/lib/chef/webui_user.rb +231 -0
  216. metadata +398 -0
@@ -0,0 +1,57 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 OpsCode, 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
+
19
+ require 'chef/provider/group/groupadd'
20
+
21
+ class Chef
22
+ class Provider
23
+ class Group
24
+ class Usermod < Chef::Provider::Group::Groupadd
25
+
26
+ def load_current_resource
27
+ super
28
+
29
+ raise Chef::Exceptions::Group, "Could not find binary /usr/sbin/usermod for #{@new_resource}" unless ::File.exists?("/usr/sbin/usermod")
30
+ end
31
+
32
+ def modify_group_members
33
+ case node[:platform]
34
+ when "openbsd", "netbsd"
35
+ append_flags = "-G"
36
+ when "solaris"
37
+ append_flags = "-a -G"
38
+ end
39
+
40
+ unless @new_resource.members.empty?
41
+ if(@new_resource.append)
42
+ @new_resource.members.each do |member|
43
+ Chef::Log.debug("#{@new_resource}: appending member #{member} to group #{@new_resource.group_name}")
44
+ run_command(:command => "usermod #{append_flags} #{@new_resource.group_name} #{member}" )
45
+
46
+ end
47
+ else
48
+ raise Chef::Exceptions::Group, "setting group members directly is not supported by #{self.to_s}"
49
+ end
50
+ else
51
+ Chef::Log.debug("#{@new_resource}: not changing group members, the group has no members")
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,106 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, 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
+
19
+ require 'tempfile'
20
+
21
+ class Chef
22
+ class Provider
23
+ class HttpRequest < Chef::Provider
24
+
25
+ attr_accessor :rest
26
+
27
+ def load_current_resource
28
+ @rest = Chef::REST.new(@new_resource.url, nil, nil)
29
+ end
30
+
31
+ # Send a GET request to @new_resource.url, with ?message=@new_resource.message
32
+ def action_get
33
+ message = check_message(@new_resource.message)
34
+ body = @rest.run_request(
35
+ :GET,
36
+ @rest.create_url("#{@new_resource.url}?message=#{message}"),
37
+ {},
38
+ false,
39
+ 10,
40
+ false
41
+ )
42
+ @new_resource.updated = true
43
+ Chef::Log.info("#{@new_resource} GET to #{@new_resource.url} successful")
44
+ Chef::Log.debug("#{@new_resource} GET request response: #{body}")
45
+ end
46
+
47
+ # Send a PUT request to @new_resource.url, with the message as the payload
48
+ def action_put
49
+ message = check_message(@new_resource.message)
50
+ body = @rest.run_request(
51
+ :PUT,
52
+ @rest.create_url("#{@new_resource.url}"),
53
+ {},
54
+ message,
55
+ 10,
56
+ false
57
+ )
58
+ @new_resource.updated = true
59
+ Chef::Log.info("#{@new_resource} PUT to #{@new_resource.url} successful")
60
+ Chef::Log.debug("#{@new_resource} PUT request response: #{body}")
61
+ end
62
+
63
+ # Send a POST request to @new_resource.url, with the message as the payload
64
+ def action_post
65
+ message = check_message(@new_resource.message)
66
+ body = @rest.run_request(
67
+ :POST,
68
+ @rest.create_url("#{@new_resource.url}"),
69
+ {},
70
+ message,
71
+ 10,
72
+ false
73
+ )
74
+ @new_resource.updated = true
75
+ Chef::Log.info("#{@new_resource} POST to #{@new_resource.url} message: #{message.inspect} successful")
76
+ Chef::Log.debug("#{@new_resource} POST request response: #{body}")
77
+ end
78
+
79
+ # Send a DELETE request to @new_resource.url
80
+ def action_delete
81
+ body = @rest.run_request(
82
+ :DELETE,
83
+ @rest.create_url("#{@new_resource.url}"),
84
+ {},
85
+ false,
86
+ 10,
87
+ false
88
+ )
89
+ @new_resource.updated = true
90
+ Chef::Log.info("#{@new_resource} DELETE to #{@new_resource.url} successful")
91
+ Chef::Log.debug("#{@new_resource} DELETE request response: #{body}")
92
+ end
93
+
94
+ private
95
+
96
+ def check_message(message)
97
+ if message.kind_of?(Proc)
98
+ message.call
99
+ else
100
+ message
101
+ end
102
+ end
103
+
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,131 @@
1
+ #
2
+ # Author:: Jason Jackson (jason.jackson@monster.com)
3
+ # Copyright:: Copyright (c) 2009 Jason Jackson
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
+
19
+ require 'chef/log'
20
+ require 'chef/mixin/command'
21
+ require 'chef/provider'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Ifconfig < Chef::Provider
26
+ include Chef::Mixin::Command
27
+
28
+ def load_current_resource
29
+ @current_resource = Chef::Resource::Ifconfig.new(@new_resource.name)
30
+
31
+ @interfaces = {}
32
+
33
+ status = popen4("ifconfig") do |pid, stdin, stdout, stderr|
34
+ stdout.each do |line|
35
+
36
+ if !line[0..9].strip.empty?
37
+ @int_name = line[0..9].strip
38
+ @interfaces[@int_name] = {"hwaddr" => (line =~ /(HWaddr)/ ? ($') : "nil").strip.chomp }
39
+ else
40
+ @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? ($1) : "nil") if line =~ /inet addr:/
41
+ @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? ($1) : "nil") if line =~ /Bcast:/
42
+ @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? ($1) : "nil") if line =~ /Mask:/
43
+ @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? ($1) : "nil") if line =~ /MTU:/
44
+ @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? ($1) : "nil") if line =~ /Metric:/
45
+ end
46
+
47
+ if @interfaces.has_key?(@new_resource.device)
48
+ @interface = @interfaces.fetch(@new_resource.device)
49
+
50
+ @current_resource.target(@new_resource.target)
51
+ @current_resource.device(@int_name)
52
+ @current_resource.inet_addr(@interface["inet_addr"])
53
+ @current_resource.hwaddr(@interface["hwaddr"])
54
+ @current_resource.bcast(@interface["bcast"])
55
+ @current_resource.mask(@interface["mask"])
56
+ @current_resource.mtu(@interface["mtu"])
57
+ @current_resource.metric(@interface["metric"])
58
+ end
59
+ end
60
+ end
61
+
62
+ unless status.exitstatus == 0
63
+ raise Chef::Exception::Ifconfig, "ifconfig failed - #{status.inspect}!"
64
+ end
65
+
66
+ @current_resource
67
+ end
68
+
69
+ def action_add
70
+ # check to see if load_current_resource found ifconfig
71
+ unless @current_resource.inet_addr
72
+ unless @new_resource.device == "lo"
73
+ command = "ifconfig #{@new_resource.device} #{@new_resource.name}"
74
+ command << " netmask #{@new_resource.mask}" if @new_resource.mask
75
+ command << " metric #{@new_resource.metric}" if @new_resource.metric
76
+ command << " mtu #{@new_resource.mtu}" if @new_resource.mtu
77
+ end
78
+
79
+ run_command(
80
+ :command => command
81
+ )
82
+ @new_resource.updated = true
83
+
84
+ end
85
+
86
+ # Write out the config files
87
+ generate_config
88
+ end
89
+
90
+ def action_delete
91
+ # check to see if load_current_resource found the interface
92
+ if @current_resource.device
93
+ command = "ifconfig #{@new_resource.device} down"
94
+
95
+ run_command(
96
+ :command => command
97
+ )
98
+ @new_resource.updated = true
99
+ else
100
+ Chef::Log.debug("Ifconfig #{@current_resource} does not exist")
101
+ end
102
+ end
103
+
104
+ # This is a little lame of me, as if any of these values aren't filled out it leaves blank lines
105
+ # in the file. Can refactor later to have this nice and tight.
106
+ def generate_config
107
+ b = binding
108
+ case node[:platform]
109
+ when "centos","redhat","fedora"
110
+ content = %{
111
+ <% if @new_resource.device %>DEVICE=<%= @new_resource.device %><% end %>
112
+ <% if @new_resource.onboot %>ONBOOT=<%= @new_resource.onboot %><% end %>
113
+ <% if @new_resource.bootproto %>BOOTPROTO=<%= @new_resource.bootproto %><% end %>
114
+ <% if @new_resource.target %>IPADDR=<%= @new_resource.target %><% end %>
115
+ <% if @new_resource.mask %>NETMASK=<%= @new_resource.mask %><% end %>
116
+ <% if @new_resource.network %>NETWORK=<%= @new_resource.network %><% end %>
117
+ <% if @new_resource.bcast %>BROADCAST=<%= @new_resource.bcast %><% end %>
118
+ }
119
+ template = ::ERB.new(content)
120
+ network_file = ::File.new("/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}", "w")
121
+ network_file.puts(template.result(b))
122
+ network_file.close
123
+ when "debian","ubuntu"
124
+ # template
125
+ when "slackware"
126
+ # template
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,157 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, 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
+
19
+ require 'chef/config'
20
+ require 'chef/log'
21
+ require 'chef/mixin/command'
22
+ require 'chef/resource/link'
23
+ require 'chef/provider'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Link < Chef::Provider
28
+ include Chef::Mixin::Command
29
+
30
+ def negative_complement(big)
31
+ if big > 1073741823 # Fixnum max
32
+ big -= (2**32) # diminished radix wrap to negative
33
+ end
34
+ big
35
+ end
36
+
37
+ private :negative_complement
38
+
39
+ def load_current_resource
40
+ @current_resource = Chef::Resource::Link.new(@new_resource.name)
41
+ @current_resource.target_file(@new_resource.target_file)
42
+ @current_resource.link_type(@new_resource.link_type)
43
+ if @new_resource.link_type == :symbolic
44
+ if ::File.exists?(@current_resource.target_file) && ::File.symlink?(@current_resource.target_file)
45
+ @current_resource.to(
46
+ ::File.expand_path(::File.readlink(@current_resource.target_file))
47
+ )
48
+ cstats = ::File.lstat(@current_resource.target_file)
49
+ @current_resource.owner(cstats.uid)
50
+ @current_resource.group(cstats.gid)
51
+ else
52
+ @current_resource.to("")
53
+ end
54
+ elsif @new_resource.link_type == :hard
55
+ if ::File.exists?(@current_resource.target_file) && ::File.exists?(@new_resource.to)
56
+ if ::File.stat(@current_resource.target_file).ino == ::File.stat(@new_resource.to).ino
57
+ @current_resource.to(@new_resource.to)
58
+ else
59
+ @current_resource.to("")
60
+ end
61
+ else
62
+ @current_resource.to("")
63
+ end
64
+ end
65
+ @current_resource
66
+ end
67
+
68
+ # Compare the ownership of a symlink. Returns true if they are the same, false if they are not.
69
+ def compare_owner
70
+ return false if @new_resource.owner.nil?
71
+
72
+ @set_user_id = case @new_resource.owner
73
+ when /^\d+$/, Integer
74
+ @new_resource.owner.to_i
75
+ else
76
+ # This raises an ArgumentError if you can't find the user
77
+ Etc.getpwnam(@new_resource.owner).uid
78
+ end
79
+
80
+ @set_user_id == @current_resource.owner
81
+ end
82
+
83
+ # Set the ownership on the symlink, assuming it is not set correctly already.
84
+ def set_owner
85
+ unless compare_owner
86
+ Chef::Log.info("Setting owner to #{@set_user_id} for #{@new_resource}")
87
+ @set_user_id = negative_complement(@set_user_id)
88
+ ::File.lchown(@set_user_id, nil, @new_resource.target_file)
89
+ @new_resource.updated = true
90
+ end
91
+ end
92
+
93
+ # Compares the group of a symlink. Returns true if they are the same, false if they are not.
94
+ def compare_group
95
+ return false if @new_resource.group.nil?
96
+
97
+ @set_group_id = case @new_resource.group
98
+ when /^\d+$/, Integer
99
+ @new_resource.group.to_i
100
+ else
101
+ Etc.getgrnam(@new_resource.group).gid
102
+ end
103
+
104
+ @set_group_id == @current_resource.group
105
+ end
106
+
107
+ def set_group
108
+ unless compare_group
109
+ Chef::Log.info("Setting group to #{@set_group_id} for #{@new_resource}")
110
+ @set_group_id = negative_complement(@set_group_id)
111
+ ::File.lchown(nil, @set_group_id, @new_resource.target_file)
112
+ @new_resource.updated = true
113
+ end
114
+ end
115
+
116
+ def action_create
117
+ if @current_resource.to != @new_resource.to
118
+ Chef::Log.info("Creating a #{@new_resource.link_type} link from #{@new_resource.to} -> #{@new_resource.target_file} for #{@new_resource}")
119
+ if @new_resource.link_type == :symbolic
120
+ run_command(
121
+ :command => "ln -nfs #{@new_resource.to} #{@new_resource.target_file}"
122
+ )
123
+ elsif @new_resource.link_type == :hard
124
+ ::File.link(@new_resource.to, @new_resource.target_file)
125
+ end
126
+ @new_resource.updated = true
127
+ end
128
+ if @new_resource.link_type == :symbolic
129
+ set_owner unless @new_resource.owner.nil?
130
+ set_group unless @new_resource.group.nil?
131
+ end
132
+ end
133
+
134
+ def action_delete
135
+ if @new_resource.link_type == :symbolic
136
+ if ::File.symlink?(@new_resource.target_file)
137
+ Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.target_file}")
138
+ ::File.delete(@new_resource.target_file)
139
+ @new_resource.updated = true
140
+ elsif ::File.exists?(@new_resource.target_file)
141
+ raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a symbolic link."
142
+ end
143
+ elsif @new_resource.link_type == :hard
144
+ if ::File.exists?(@new_resource.target_file)
145
+ if ::File.exists?(@new_resource.to) && ::File.stat(@current_resource.target_file).ino == ::File.stat(@new_resource.to).ino
146
+ Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.target_file}")
147
+ ::File.delete(@new_resource.target_file)
148
+ @new_resource.updated = true
149
+ else
150
+ raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a hard link."
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end