chef 0.7.16 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of chef might be problematic. Click here for more details.
- data/README.rdoc +11 -10
- data/bin/chef-client +2 -2
- data/bin/chef-solo +1 -1
- data/bin/knife +27 -0
- data/bin/shef +49 -0
- data/distro/README +2 -0
- data/distro/{debian → common}/man/man1/chef-indexer.1 +0 -0
- data/distro/{debian → common}/man/man1/chef-server.1 +0 -0
- data/distro/{debian → common}/man/man8/chef-client.8 +0 -0
- data/distro/{debian → common}/man/man8/chef-solo.8 +0 -0
- data/distro/common/man/man8/knife.8 +375 -0
- data/distro/redhat/etc/init.d/chef-client +8 -4
- data/distro/redhat/etc/init.d/chef-server +16 -15
- data/distro/redhat/etc/init.d/chef-server-webui +78 -0
- data/distro/redhat/etc/init.d/chef-solr +76 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +75 -0
- data/distro/redhat/etc/sysconfig/chef-client +10 -0
- data/distro/redhat/etc/sysconfig/chef-server +10 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +10 -0
- data/distro/redhat/etc/sysconfig/chef-solr +9 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/distro/suse/etc/init.d/chef-client +121 -0
- data/lib/chef.rb +1 -1
- data/lib/chef/api_client.rb +263 -0
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/client.rb +21 -3
- data/lib/chef/application/knife.rb +144 -0
- data/lib/chef/application/server.rb +2 -1
- data/lib/chef/application/solo.rb +9 -2
- data/lib/chef/cache.rb +61 -0
- data/lib/chef/cache/checksum.rb +70 -0
- data/lib/chef/certificate.rb +154 -0
- data/lib/chef/client.rb +123 -220
- data/lib/chef/compile.rb +9 -21
- data/lib/chef/config.rb +67 -10
- data/lib/chef/cookbook.rb +49 -22
- data/lib/chef/cookbook/metadata.rb +85 -5
- data/lib/chef/cookbook_loader.rb +4 -4
- data/lib/chef/couchdb.rb +99 -30
- data/lib/chef/daemon.rb +1 -1
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +219 -0
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +106 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +74 -0
- data/lib/chef/knife.rb +309 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +62 -0
- data/lib/chef/knife/client_delete.rb +37 -0
- data/lib/chef/knife/client_edit.rb +37 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +48 -0
- data/lib/chef/knife/client_show.rb +42 -0
- data/lib/chef/knife/configure.rb +123 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +46 -0
- data/lib/chef/knife/cookbook_delete.rb +41 -0
- data/lib/chef/knife/cookbook_download.rb +57 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +87 -0
- data/lib/chef/knife/cookbook_show.rb +75 -0
- data/lib/chef/knife/cookbook_upload.rb +179 -0
- data/lib/chef/knife/data_bag_create.rb +43 -0
- data/lib/chef/knife/data_bag_delete.rb +43 -0
- data/lib/chef/knife/data_bag_edit.rb +49 -0
- data/lib/chef/knife/data_bag_list.rb +42 -0
- data/lib/chef/knife/data_bag_show.rb +40 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +39 -0
- data/lib/chef/knife/node_delete.rb +36 -0
- data/lib/chef/knife/node_edit.rb +36 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +46 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +44 -0
- data/lib/chef/knife/role_delete.rb +36 -0
- data/lib/chef/knife/role_edit.rb +37 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +43 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/ssh.rb +170 -0
- data/lib/chef/log.rb +30 -8
- data/lib/chef/mixin/checksum.rb +2 -7
- data/lib/chef/mixin/command.rb +32 -13
- data/lib/chef/mixin/convert_to_class_name.rb +15 -0
- data/lib/chef/mixin/deep_merge.rb +199 -11
- data/lib/chef/mixin/generate_url.rb +18 -9
- data/lib/chef/mixin/language.rb +29 -1
- data/lib/chef/mixin/language_include_attribute.rb +56 -0
- data/lib/chef/mixin/language_include_recipe.rb +53 -0
- data/lib/chef/mixin/params_validate.rb +25 -12
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +2 -0
- data/lib/chef/mixin/template.rb +11 -1
- data/lib/chef/mixin/xml_escape.rb +87 -0
- data/lib/chef/node.rb +144 -122
- data/lib/chef/openid_registration.rb +12 -5
- data/lib/chef/platform.rb +89 -47
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cron.rb +5 -6
- data/lib/chef/provider/deploy.rb +43 -10
- data/lib/chef/provider/deploy/revision.rb +2 -3
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/file.rb +8 -4
- data/lib/chef/provider/git.rb +10 -5
- data/lib/chef/provider/group/dscl.rb +128 -0
- data/lib/chef/provider/http_request.rb +6 -2
- data/lib/chef/provider/ifconfig.rb +1 -0
- data/lib/chef/provider/link.rb +1 -1
- data/lib/chef/provider/log.rb +53 -0
- data/lib/chef/provider/mdadm.rb +88 -0
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/easy_install.rb +106 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +1 -1
- data/lib/chef/provider/package/rpm.rb +10 -8
- data/lib/chef/provider/package/yum-dump.py +22 -3
- data/lib/chef/provider/package/yum.rb +32 -8
- data/lib/chef/provider/package/zypper.rb +132 -0
- data/lib/chef/provider/remote_directory.rb +58 -49
- data/lib/chef/provider/remote_file.rb +1 -1
- data/lib/chef/provider/route.rb +136 -80
- data/lib/chef/provider/ruby_block.rb +18 -1
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/simple.rb +2 -3
- data/lib/chef/provider/service/upstart.rb +191 -0
- data/lib/chef/provider/subversion.rb +12 -4
- data/lib/chef/provider/template.rb +85 -53
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +277 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/recipe.rb +2 -41
- data/lib/chef/resource.rb +9 -3
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/deploy.rb +16 -2
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +21 -2
- data/lib/chef/resource/scm.rb +8 -0
- data/lib/chef/resource/subversion.rb +1 -0
- data/lib/chef/resource/user.rb +5 -2
- data/lib/chef/resource/yum_package.rb +36 -0
- data/lib/chef/resource_collection.rb +17 -9
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/rest.rb +166 -81
- data/lib/chef/role.rb +114 -38
- data/lib/chef/run_list.rb +15 -6
- data/lib/chef/runner.rb +13 -11
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef.rb +220 -0
- data/lib/chef/shef/ext.rb +297 -0
- data/lib/chef/shef/shef_session.rb +175 -0
- data/lib/chef/streaming_cookbook_uploader.rb +187 -0
- data/lib/chef/tasks/chef_repo.rake +53 -155
- data/lib/chef/util/file_edit.rb +94 -96
- data/lib/chef/webui_user.rb +233 -0
- metadata +219 -63
- data/distro/debian/etc/init.d/chef-indexer +0 -175
- data/distro/redhat/etc/chef/client.rb +0 -16
- data/distro/redhat/etc/chef/indexer.rb +0 -10
- data/distro/redhat/etc/chef/server.rb +0 -22
- data/distro/redhat/etc/init.d/chef-indexer +0 -76
- data/lib/chef/application/indexer.rb +0 -141
- data/lib/chef/queue.rb +0 -145
- data/lib/chef/search.rb +0 -88
- data/lib/chef/search/result.rb +0 -64
- data/lib/chef/search_index.rb +0 -77
- data/lib/chef/util/fileedit.rb +0 -121
@@ -35,8 +35,6 @@ class Chef
|
|
35
35
|
|
36
36
|
def action_create
|
37
37
|
super
|
38
|
-
|
39
|
-
@remote_file_list = Hash.new
|
40
38
|
do_recursive
|
41
39
|
end
|
42
40
|
|
@@ -45,81 +43,92 @@ class Chef
|
|
45
43
|
def do_recursive
|
46
44
|
if Chef::Config[:solo]
|
47
45
|
Chef::Log.debug("Doing a local recursive directory copy for #{@new_resource}")
|
48
|
-
files_to_transfer = files_for_directory(@new_resource.source)
|
49
46
|
else
|
50
47
|
Chef::Log.debug("Doing a remote recursive directory transfer for #{@new_resource}")
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
48
|
+
end
|
49
|
+
|
55
50
|
files_to_transfer.each do |remote_file_source|
|
56
51
|
fetch_remote_file(remote_file_source)
|
57
52
|
end
|
58
53
|
end
|
59
54
|
|
55
|
+
def files_to_transfer
|
56
|
+
file_list = Chef::Config[:solo] ? generate_solo_file_list : generate_client_file_list
|
57
|
+
Chef::Log.debug("Generated file manifest for #{@new_resource}:\n#{file_list.join("\n")}")
|
58
|
+
file_list
|
59
|
+
end
|
60
|
+
|
61
|
+
def generate_solo_file_list
|
62
|
+
# Pulled from chef-server-slice files controller
|
63
|
+
directory = find_preferred_file(
|
64
|
+
@new_resource.cookbook_name,
|
65
|
+
:remote_file,
|
66
|
+
@new_resource.source,
|
67
|
+
@node[:fqdn],
|
68
|
+
@node[:platform],
|
69
|
+
@node[:platform_version]
|
70
|
+
)
|
71
|
+
|
72
|
+
unless (directory && ::File.directory?(directory))
|
73
|
+
raise NotFound, "Cannot find a suitable directory"
|
74
|
+
end
|
75
|
+
|
76
|
+
Dir[::File.join(directory, '**', '*')].sort.reverse.select do |file|
|
77
|
+
file[/^#{directory}\/(.+)$/, 1] unless ::File.directory?(file)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def generate_client_file_list
|
82
|
+
r = Chef::REST.new(Chef::Config[:remotefile_url])
|
83
|
+
r.get_rest(generate_url(@new_resource.source, "files", { :recursive => "true" }))
|
84
|
+
end
|
85
|
+
|
60
86
|
def fetch_remote_file(remote_file_source)
|
61
87
|
full_path = ::File.join(@new_resource.path, remote_file_source)
|
62
|
-
full_dir = ::File.dirname(full_path)
|
63
88
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
89
|
+
ensure_directory_exists(::File.dirname(full_path))
|
90
|
+
|
91
|
+
file_to_fetch = provider_for_remote_file(full_path, remote_file_source)
|
92
|
+
file_to_fetch.load_current_resource
|
93
|
+
file_to_fetch.action_create
|
94
|
+
@new_resource.updated = true if file_to_fetch.new_resource.updated
|
95
|
+
end
|
96
|
+
|
97
|
+
def provider_for_remote_file(path, source)
|
98
|
+
remote_file = Chef::Resource::RemoteFile.new(path, nil, @node)
|
99
|
+
remote_file.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
|
100
|
+
remote_file.source(::File.join(@new_resource.source, source))
|
71
101
|
remote_file.mode(@new_resource.files_mode) if @new_resource.files_mode
|
72
102
|
remote_file.group(@new_resource.files_group) if @new_resource.files_group
|
73
103
|
remote_file.owner(@new_resource.files_owner) if @new_resource.files_owner
|
74
104
|
remote_file.backup(@new_resource.files_backup) if @new_resource.files_backup
|
75
105
|
|
76
|
-
|
77
|
-
rf_provider.load_current_resource
|
78
|
-
rf_provider.action_create
|
79
|
-
@new_resource.updated = true if rf_provider.new_resource.updated
|
106
|
+
Chef::Platform.provider_for_node(@node, remote_file)
|
80
107
|
end
|
81
108
|
|
82
|
-
def
|
83
|
-
|
109
|
+
def ensure_directory_exists(path)
|
110
|
+
unless ::File.directory?(path)
|
111
|
+
directory_to_create = provider_for_directory(path)
|
112
|
+
directory_to_create.load_current_resource
|
113
|
+
directory_to_create.action_create
|
114
|
+
@new_resource.updated = true if directory_to_create.new_resource.updated
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def provider_for_directory(path)
|
119
|
+
new_dir = Chef::Resource::Directory.new(path, nil, @node)
|
84
120
|
new_dir.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
|
85
121
|
new_dir.mode(@new_resource.mode)
|
86
122
|
new_dir.group(@new_resource.group)
|
87
123
|
new_dir.owner(@new_resource.owner)
|
88
124
|
new_dir.recursive(true)
|
89
125
|
|
90
|
-
|
91
|
-
d_provider.load_current_resource
|
92
|
-
d_provider.action_create
|
93
|
-
@new_resource.updated = true if d_provider.new_resource.updated
|
126
|
+
Chef::Platform.provider_for_node(@node, new_dir)
|
94
127
|
end
|
95
128
|
|
96
129
|
def action_create_if_missing
|
97
130
|
raise Chef::Exceptions::UnsupportedAction, "Remote Directories do not support create_if_missing."
|
98
131
|
end
|
99
|
-
# Pulled from chef-server-slice files controller
|
100
|
-
|
101
|
-
def files_for_directory(path)
|
102
|
-
directory = find_preferred_file(
|
103
|
-
@new_resource.cookbook_name,
|
104
|
-
:remote_file,
|
105
|
-
path,
|
106
|
-
@node[:fqdn],
|
107
|
-
@node[:platform],
|
108
|
-
@node[:platform_version]
|
109
|
-
)
|
110
|
-
|
111
|
-
unless (directory && ::File.directory?(directory))
|
112
|
-
raise NotFound, "Cannot find a suitable directory"
|
113
|
-
end
|
114
|
-
|
115
|
-
directory_listing = Array.new
|
116
|
-
Dir[::File.join(directory, '**', '*')].sort { |a,b| b <=> a }.each do |file|
|
117
|
-
next if ::File.directory?(file)
|
118
|
-
file =~ /^#{directory}\/(.+)$/
|
119
|
-
directory_listing << $1
|
120
|
-
end
|
121
|
-
directory_listing
|
122
|
-
end
|
123
132
|
|
124
133
|
end
|
125
134
|
end
|
data/lib/chef/provider/route.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Author:: Bryan McLellan (btm@loftninjas.org)
|
2
|
+
# Author:: Bryan McLellan (btm@loftninjas.org), Jesse Nelson (spheromak@gmail.com)
|
3
3
|
# Copyright:: Copyright (c) 2009 Bryan McLellan
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
@@ -19,100 +19,156 @@
|
|
19
19
|
require 'chef/log'
|
20
20
|
require 'chef/mixin/command'
|
21
21
|
require 'chef/provider'
|
22
|
-
require '
|
22
|
+
require 'ipaddr'
|
23
23
|
|
24
|
-
class Chef
|
25
|
-
|
26
|
-
class Route < Chef::Provider
|
27
|
-
include Chef::Mixin::Command
|
24
|
+
class Chef::Provider::Route < Chef::Provider
|
25
|
+
include Chef::Mixin::Command
|
28
26
|
|
29
|
-
|
30
|
-
|
27
|
+
attr_accessor :is_running
|
28
|
+
|
29
|
+
MASK = {
|
30
|
+
'0.0.0.0' => '0',
|
31
|
+
'128.0.0.0' => '1',
|
32
|
+
'192.0.0.0' => '2',
|
33
|
+
'224.0.0.0' => '3',
|
34
|
+
'240.0.0.0' => '4',
|
35
|
+
'248.0.0.0' => '5',
|
36
|
+
'252.0.0.0' => '6',
|
37
|
+
'254.0.0.0' => '7',
|
38
|
+
'255.0.0.0' => '8',
|
39
|
+
'255.128.0.0' => '9',
|
40
|
+
'255.192.0.0' => '10',
|
41
|
+
'255.224.0.0' => '11',
|
42
|
+
'255.240.0.0' => '12',
|
43
|
+
'255.248.0.0' => '13',
|
44
|
+
'255.252.0.0' => '14',
|
45
|
+
'255.254.0.0' => '15',
|
46
|
+
'255.255.0.0' => '16',
|
47
|
+
'255.255.128.0' => '17',
|
48
|
+
'255.255.192.0' => '18',
|
49
|
+
'255.255.224.0' => '19',
|
50
|
+
'255.255.240.0' => '20',
|
51
|
+
'255.255.248.0' => '21',
|
52
|
+
'255.255.252.0' => '22',
|
53
|
+
'255.255.254.0' => '23',
|
54
|
+
'255.255.255.0' => '24',
|
55
|
+
'255.255.255.128' => '25',
|
56
|
+
'255.255.255.192' => '26',
|
57
|
+
'255.255.255.224' => '27',
|
58
|
+
'255.255.255.240' => '28',
|
59
|
+
'255.255.255.248' => '29',
|
60
|
+
'255.255.255.252' => '30',
|
61
|
+
'255.255.255.254' => '31',
|
62
|
+
'255.255.255.255' => '32'
|
63
|
+
}
|
31
64
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# Destination Gateway Genmask Flags Metric Ref Use Iface
|
37
|
-
when /^#{@new_resource.target}\s+([\d.]+)\s+([\d.]+)\s+(.+)\s+(\d+)\s+(.+)\s+(.+)\s+(\w+)$/
|
38
|
-
@current_resource.target(@new_resource.target)
|
39
|
-
@current_resource.gateway($1)
|
40
|
-
@current_resource.netmask($2)
|
41
|
-
@current_resource.metric($4.to_i)
|
42
|
-
@current_resource.device($7)
|
43
|
-
Chef::Log.debug("Found route ip:#{@current_resource.target} gw:#{@current_resource.gateway} nm:#{@current_resource.netmask} " +
|
44
|
-
"metric:#{@current_resource.metric} dev:#{@current_resource.device}")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
65
|
+
def load_current_resource
|
66
|
+
is_running = nil
|
67
|
+
|
68
|
+
Chef::Log.debug("Configuring Route #{@new_resource.name}")
|
48
69
|
|
49
|
-
|
50
|
-
|
51
|
-
|
70
|
+
# cidr or quad dot mask
|
71
|
+
if @new_resource.netmask
|
72
|
+
new_ip = IPAddr.new("#{@new_resource.target}/#{@new_resource.netmask}")
|
73
|
+
else
|
74
|
+
new_ip = IPAddr.new(@new_resource.target)
|
75
|
+
end
|
52
76
|
|
53
|
-
|
54
|
-
|
77
|
+
# pull routes from proc
|
78
|
+
if node[:os] == "linux"
|
79
|
+
route_file = ::File.open("/proc/net/route", "r")
|
80
|
+
while (line = route_file.gets)
|
81
|
+
# proc layout
|
82
|
+
iface,destination,gateway,flags,refcnt,use,metric,mask,mtu,window,irtt = line.split
|
83
|
+
|
84
|
+
# need to convert packed adresses int quad dot
|
85
|
+
# the addrs are reversed hex packed decimal addrs. so this unwraps them. tho you could
|
86
|
+
# do this without ipaddr using unpack. ipaddr has no htoa method.
|
87
|
+
#
|
88
|
+
destination = IPAddr.new(destination.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
89
|
+
gateway = IPAddr.new(gateway.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
90
|
+
mask = IPAddr.new(mask.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
|
91
|
+
Chef::Log.debug( "System has route: dest=#{destination} mask=#{mask} gw=#{gateway}")
|
92
|
+
|
93
|
+
# check if what were trying to configure is already there
|
94
|
+
# use an ipaddr object with ip/mask this way we can have
|
95
|
+
# a new resource be in cidr format (i don't feel like
|
96
|
+
# expanding bitmask by hand.
|
97
|
+
#
|
98
|
+
running_ip = IPAddr.new("#{destination}/#{mask}")
|
99
|
+
Chef::Log.debug( "new ip: #{new_ip.inspect} running ip: #{running_ip.inspect} ")
|
100
|
+
is_running = true if running_ip == new_ip
|
101
|
+
end
|
102
|
+
route_file.close
|
103
|
+
end
|
104
|
+
end
|
55
105
|
|
56
|
-
|
106
|
+
def action_add
|
57
107
|
# check to see if load_current_resource found the route
|
58
|
-
|
59
|
-
|
60
|
-
command = "route add -net #{@new_resource.target}"
|
61
|
-
else
|
62
|
-
command = "route add #{@new_resource.target}"
|
63
|
-
end
|
64
|
-
command << " netmask #{@new_resource.netmask}" if @new_resource.netmask
|
65
|
-
command << " gw #{@new_resource.gateway}" if @new_resource.gateway
|
66
|
-
command << " metric #{@new_resource.metric}" if @new_resource.metric
|
67
|
-
command << " dev #{@new_resource.device}" if @new_resource.device
|
68
|
-
|
69
|
-
run_command(
|
70
|
-
:command => command
|
71
|
-
)
|
72
|
-
@new_resource.updated = true
|
108
|
+
if is_running
|
109
|
+
Chef::Log.debug("Route #{@new_resource.name} already active ")
|
73
110
|
else
|
74
|
-
|
111
|
+
command = "ip route replace #{@new_resource.target}"
|
112
|
+
command << "/#{MASK[@new_resource.netmask.to_s]}" if @new_resource.netmask
|
113
|
+
command << " via #{@new_resource.gateway} "
|
114
|
+
command << " dev #{@new_resource.device} " if @new_resource.device
|
115
|
+
|
116
|
+
Chef::Log.info("Adding route: #{command} ")
|
117
|
+
run_command( :command => command )
|
118
|
+
@new_resource.updated = true
|
75
119
|
end
|
76
|
-
|
120
|
+
|
121
|
+
#for now we always write the file (ugly but its what it is)
|
77
122
|
generate_config
|
78
|
-
end
|
79
123
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
)
|
92
|
-
@new_resource.updated = true
|
124
|
+
end
|
125
|
+
|
126
|
+
def action_delete
|
127
|
+
if is_running
|
128
|
+
command = "ip route delete #{@new_resource.target}"
|
129
|
+
command << "/#{MASK[@new_resource.netmask.to_s]}" if @new_resource.netmask
|
130
|
+
command << " via #{@new_resource.gateway} "
|
131
|
+
|
132
|
+
Chef::Log.info("Removing route: #{command}")
|
133
|
+
run_command( :command => command )
|
134
|
+
@new_resource.updated = true
|
93
135
|
else
|
94
|
-
|
136
|
+
Chef::Log.debug("Route #{@new_resource.name} does not exist")
|
95
137
|
end
|
96
|
-
|
138
|
+
end
|
97
139
|
|
98
|
-
|
99
|
-
|
140
|
+
def generate_config
|
141
|
+
conf = Hash.new
|
100
142
|
case node[:platform]
|
101
143
|
when ("centos" || "redhat" || "fedora")
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
144
|
+
# walk the collection
|
145
|
+
@collection.each do |resource|
|
146
|
+
if resource.is_a? Chef::Resource::Route
|
147
|
+
# default to eth0
|
148
|
+
if resource.device
|
149
|
+
dev = resource.device
|
150
|
+
else
|
151
|
+
dev = "eth0"
|
152
|
+
end
|
153
|
+
|
154
|
+
conf[dev] = String.new if conf[dev].nil?
|
155
|
+
if resource.action == :add
|
156
|
+
conf[dev] << "#{resource.target}"
|
157
|
+
conf[dev] << "/#{resource.netmask}" if resource.netmask
|
158
|
+
conf[dev] << " via #{resource.gateway}\n"
|
159
|
+
else
|
160
|
+
# need to do this for the case when the last route on an int
|
161
|
+
# is removed
|
162
|
+
conf[dev] = ""
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
conf.each do |k, v|
|
167
|
+
network_file = ::File.new("/etc/sysconfig/network-scripts/route-#{k}", "w")
|
168
|
+
network_file.puts(conf[k])
|
169
|
+
Chef::Log.debug("writing route.#{k}\n#{conf[k]}")
|
170
|
+
network_file.close
|
171
|
+
end
|
114
172
|
end
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
173
|
+
end
|
118
174
|
end
|
@@ -1,9 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: AJ Christensen (<aj@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2009 Opscode
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
1
19
|
|
2
20
|
class Chef
|
3
21
|
class Provider
|
4
22
|
class RubyBlock < Chef::Provider
|
5
23
|
def load_current_resource
|
6
|
-
Chef::Log.debug(@new_resource.inspect)
|
7
24
|
true
|
8
25
|
end
|
9
26
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Jan Zimmek (<jan.zimmek@web.de>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Jan Zimmek
|
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/service/init'
|
20
|
+
require 'chef/mixin/command'
|
21
|
+
|
22
|
+
class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
23
|
+
|
24
|
+
def initialize(node, new_resource, collection=nil, definitions=nil, cookbook_loader=nil)
|
25
|
+
super(node, new_resource, collection, definitions, cookbook_loader)
|
26
|
+
@init_command = "/etc/rc.d/#{@new_resource.service_name}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_current_resource
|
30
|
+
|
31
|
+
raise Chef::Exceptions::Service unless ::File.exists?("/etc/rc.conf")
|
32
|
+
raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
|
33
|
+
|
34
|
+
super
|
35
|
+
|
36
|
+
@current_resource.enabled(daemons.include?(@current_resource.service_name))
|
37
|
+
|
38
|
+
@current_resource
|
39
|
+
end
|
40
|
+
|
41
|
+
def daemons
|
42
|
+
entries = []
|
43
|
+
if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
|
44
|
+
entries += $1.split(" ") if $1.length > 0
|
45
|
+
end
|
46
|
+
|
47
|
+
yield(entries) if block_given?
|
48
|
+
|
49
|
+
entries
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_daemons(entries)
|
53
|
+
content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/, "DAEMONS=(#{entries.join(' ')})")
|
54
|
+
::File.open("/etc/rc.conf", "w") do |f|
|
55
|
+
f.write(content)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def enable_service()
|
60
|
+
new_daemons = []
|
61
|
+
entries = daemons
|
62
|
+
|
63
|
+
if entries.include?(new_resource.service_name)
|
64
|
+
# exists and already enabled
|
65
|
+
new_daemons += entries
|
66
|
+
else
|
67
|
+
if entries.include?("!#{new_resource.service_name}")
|
68
|
+
# exists but disabled
|
69
|
+
entries.each do |daemon|
|
70
|
+
if daemon == "!#{new_resource.service_name}"
|
71
|
+
new_daemons << new_resource.service_name
|
72
|
+
else
|
73
|
+
new_daemons << daemon
|
74
|
+
end
|
75
|
+
end
|
76
|
+
else
|
77
|
+
# does not exist
|
78
|
+
new_daemons += entries
|
79
|
+
new_daemons << new_resource.service_name
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
update_daemons(new_daemons)
|
84
|
+
end
|
85
|
+
|
86
|
+
def disable_service()
|
87
|
+
new_daemons = []
|
88
|
+
entries = daemons
|
89
|
+
|
90
|
+
if entries.include?("!#{new_resource.service_name}")
|
91
|
+
# exists and disabled
|
92
|
+
new_daemons += entries
|
93
|
+
else
|
94
|
+
if entries.include?(new_resource.service_name)
|
95
|
+
# exists but enabled
|
96
|
+
entries.each do |daemon|
|
97
|
+
if daemon == new_resource.service_name
|
98
|
+
new_daemons << "!#{new_resource.service_name}"
|
99
|
+
else
|
100
|
+
new_daemons << daemon
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
update_daemons(new_daemons)
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|