chef 0.10.2 → 0.10.4.rc.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.
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +5 -3
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/man/man1/knife-cookbook.1 +5 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +3 -3
- data/distro/common/markdown/man1/knife-cookbook.mkd +7 -0
- data/distro/common/markdown/man1/knife-node.mkd +4 -3
- data/distro/common/markdown/man1/knife-ssh.mkd +2 -0
- data/lib/chef/application.rb +1 -0
- data/lib/chef/cookbook_loader.rb +18 -0
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/data_bag.rb +14 -2
- data/lib/chef/data_bag_item.rb +8 -2
- data/lib/chef/encrypted_data_bag_item.rb +19 -6
- data/lib/chef/environment.rb +12 -6
- data/lib/chef/exceptions.rb +1 -0
- data/lib/chef/knife.rb +0 -28
- data/lib/chef/knife/bootstrap.rb +7 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +14 -12
- data/lib/chef/knife/bootstrap/centos5-gems.erb +8 -5
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +16 -9
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -3
- data/lib/chef/knife/client_bulk_delete.rb +28 -6
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/cookbook_upload.rb +71 -0
- data/lib/chef/knife/core/bootstrap_context.rb +13 -3
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -3
- data/lib/chef/knife/core/node_presenter.rb +5 -2
- data/lib/chef/knife/help.rb +13 -12
- data/lib/chef/knife/help_topics.rb +4 -0
- data/lib/chef/knife/ssh.rb +25 -4
- data/lib/chef/mixin/create_path.rb +3 -2
- data/lib/chef/mixin/get_source_from_package.rb +42 -0
- data/lib/chef/mixin/language.rb +8 -11
- data/lib/chef/monkey_patches/numeric.rb +9 -1
- data/lib/chef/monkey_patches/string.rb +21 -0
- data/lib/chef/platform.rb +2 -1
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/git.rb +16 -3
- data/lib/chef/provider/group/suse.rb +53 -0
- data/lib/chef/provider/mount/mount.rb +28 -20
- data/lib/chef/provider/package/apt.rb +39 -24
- data/lib/chef/provider/package/dpkg.rb +5 -2
- data/lib/chef/provider/package/easy_install.rb +2 -2
- data/lib/chef/provider/package/freebsd.rb +5 -2
- data/lib/chef/provider/package/macports.rb +4 -4
- data/lib/chef/provider/package/rpm.rb +4 -1
- data/lib/chef/provider/package/rubygems.rb +3 -0
- data/lib/chef/provider/package/solaris.rb +3 -0
- data/lib/chef/provider/package/yum-dump.py +239 -81
- data/lib/chef/provider/package/yum.rb +977 -110
- data/lib/chef/provider/package/zypper.rb +20 -3
- data/lib/chef/provider/remote_directory.rb +0 -1
- data/lib/chef/provider/service/arch.rb +35 -28
- data/lib/chef/provider/service/systemd.rb +102 -0
- data/lib/chef/provider/service/upstart.rb +8 -2
- data/lib/chef/providers.rb +2 -0
- data/lib/chef/resource.rb +31 -2
- data/lib/chef/resource/git.rb +9 -0
- data/lib/chef/resource/mount.rb +1 -2
- data/lib/chef/resource/yum_package.rb +20 -0
- data/lib/chef/rest.rb +1 -1
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +3 -3
- data/lib/chef/runner.rb +15 -2
- data/lib/chef/shell_out.rb +1 -1
- data/lib/chef/shell_out/windows.rb +2 -2
- data/lib/chef/solr_query.rb +1 -1
- data/lib/chef/tasks/chef_repo.rake +1 -1
- data/lib/chef/version.rb +1 -1
- metadata +425 -441
@@ -78,9 +78,18 @@ class Chef
|
|
78
78
|
|
79
79
|
@current_resource
|
80
80
|
end
|
81
|
+
|
82
|
+
#Gets the zypper Version from command output (Returns Floating Point number)
|
83
|
+
def zypper_version()
|
84
|
+
`zypper -V 2>&1`.scan(/\d+/).join(".").to_f
|
85
|
+
end
|
81
86
|
|
82
87
|
def install_package(name, version)
|
83
|
-
if
|
88
|
+
if zypper_version < 1.0
|
89
|
+
run_command(
|
90
|
+
:command => "zypper install -y #{name}"
|
91
|
+
)
|
92
|
+
elsif version
|
84
93
|
run_command(
|
85
94
|
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
86
95
|
)
|
@@ -92,7 +101,11 @@ class Chef
|
|
92
101
|
end
|
93
102
|
|
94
103
|
def upgrade_package(name, version)
|
95
|
-
if
|
104
|
+
if zypper_version < 1.0
|
105
|
+
run_command(
|
106
|
+
:command => "zypper install -y #{name}"
|
107
|
+
)
|
108
|
+
elsif version
|
96
109
|
run_command(
|
97
110
|
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
98
111
|
)
|
@@ -104,7 +117,11 @@ class Chef
|
|
104
117
|
end
|
105
118
|
|
106
119
|
def remove_package(name, version)
|
107
|
-
if
|
120
|
+
if zypper_version < 1.0
|
121
|
+
run_command(
|
122
|
+
:command => "zypper remove -y #{name}"
|
123
|
+
)
|
124
|
+
elsif version
|
108
125
|
run_command(
|
109
126
|
:command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
|
110
127
|
)
|
@@ -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=\((.*)\)/)
|
32
|
+
raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
|
33
33
|
|
34
34
|
super
|
35
35
|
|
@@ -38,38 +38,46 @@ 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
|
+
# )
|
41
48
|
def daemons
|
42
49
|
entries = []
|
43
|
-
if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
|
44
|
-
entries += $1.split(
|
50
|
+
if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
|
51
|
+
entries += $1.gsub(/\\?[\r\n]/, ' ').gsub(/# *[^ ]+/,' ').split(' ') if $1.length > 0
|
45
52
|
end
|
46
|
-
|
53
|
+
|
47
54
|
yield(entries) if block_given?
|
48
|
-
|
55
|
+
|
49
56
|
entries
|
50
57
|
end
|
51
|
-
|
58
|
+
|
59
|
+
# FIXME: Multiple entries of DAEMONS will cause very bad results :)
|
52
60
|
def update_daemons(entries)
|
53
|
-
content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)
|
61
|
+
content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/m, "DAEMONS=(#{entries.join(' ')})")
|
54
62
|
::File.open("/etc/rc.conf", "w") do |f|
|
55
63
|
f.write(content)
|
56
64
|
end
|
57
65
|
end
|
58
|
-
|
66
|
+
|
59
67
|
def enable_service()
|
60
68
|
new_daemons = []
|
61
69
|
entries = daemons
|
62
|
-
|
63
|
-
if entries.include?(new_resource.service_name)
|
64
|
-
# exists and already enabled
|
65
|
-
new_daemons += entries
|
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
|
66
74
|
else
|
67
75
|
if entries.include?("!#{new_resource.service_name}")
|
68
76
|
# exists but disabled
|
69
77
|
entries.each do |daemon|
|
70
|
-
if daemon == "!#{new_resource.service_name}"
|
78
|
+
if daemon == "!#{new_resource.service_name}"
|
71
79
|
new_daemons << new_resource.service_name
|
72
|
-
else
|
80
|
+
else
|
73
81
|
new_daemons << daemon
|
74
82
|
end
|
75
83
|
end
|
@@ -78,32 +86,31 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
78
86
|
new_daemons += entries
|
79
87
|
new_daemons << new_resource.service_name
|
80
88
|
end
|
89
|
+
update_daemons(new_daemons)
|
81
90
|
end
|
82
|
-
|
83
|
-
update_daemons(new_daemons)
|
84
91
|
end
|
85
|
-
|
92
|
+
|
86
93
|
def disable_service()
|
87
94
|
new_daemons = []
|
88
95
|
entries = daemons
|
89
|
-
|
96
|
+
|
90
97
|
if entries.include?("!#{new_resource.service_name}")
|
91
98
|
# exists and disabled
|
92
|
-
new_daemons += entries
|
99
|
+
# new_daemons += entries
|
93
100
|
else
|
94
|
-
if entries.include?(new_resource.service_name)
|
95
|
-
# exists but enabled
|
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 ?
|
96
104
|
entries.each do |daemon|
|
97
|
-
if
|
105
|
+
if [new_resource.service_name, "@#{new_resource.service_name}"].include?(daemon)
|
98
106
|
new_daemons << "!#{new_resource.service_name}"
|
99
|
-
else
|
107
|
+
else
|
100
108
|
new_daemons << daemon
|
101
109
|
end
|
102
110
|
end
|
103
111
|
end
|
112
|
+
update_daemons(new_daemons)
|
104
113
|
end
|
105
|
-
|
106
|
-
update_daemons(new_daemons)
|
107
114
|
end
|
108
115
|
|
109
116
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stephen Haynes (<sh@nomitor.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 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/service'
|
20
|
+
require 'chef/provider/service/simple'
|
21
|
+
require 'chef/mixin/command'
|
22
|
+
|
23
|
+
class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
|
24
|
+
def load_current_resource
|
25
|
+
@current_resource = Chef::Resource::Service.new(@new_resource.name)
|
26
|
+
@current_resource.service_name(@new_resource.service_name)
|
27
|
+
|
28
|
+
if @new_resource.status_command
|
29
|
+
Chef::Log.debug("#{@new_resource} you have specified a status command, running..")
|
30
|
+
|
31
|
+
begin
|
32
|
+
if run_command_with_systems_locale(:command => @new_resource.status_command) == 0
|
33
|
+
@current_resource.running(true)
|
34
|
+
end
|
35
|
+
rescue Chef::Exceptions::Exec
|
36
|
+
@current_resource.running(false)
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
else
|
40
|
+
@current_resource.running(is_active?)
|
41
|
+
end
|
42
|
+
|
43
|
+
@current_resource.enabled(is_enabled?)
|
44
|
+
@current_resource
|
45
|
+
end
|
46
|
+
|
47
|
+
def start_service
|
48
|
+
if @current_resource.running
|
49
|
+
Chef::Log.debug("#{@new_resource} already running, not starting")
|
50
|
+
else
|
51
|
+
if @new_resource.start_command
|
52
|
+
super
|
53
|
+
else
|
54
|
+
run_command_with_systems_locale(:command => "/bin/systemctl start #{@new_resource.service_name}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def stop_service
|
60
|
+
unless @current_resource.running
|
61
|
+
Chef::Log.debug("#{@new_resource} not running, not stopping")
|
62
|
+
else
|
63
|
+
if @new_resource.stop_command
|
64
|
+
super
|
65
|
+
else
|
66
|
+
run_command_with_systems_locale(:command => "/bin/systemctl stop #{@new_resource.service_name}")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def restart_service
|
72
|
+
if @new_resource.restart_command
|
73
|
+
super
|
74
|
+
else
|
75
|
+
run_command_with_systems_locale(:command => "/bin/systemctl restart #{@new_resource.service_name}")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def reload_service
|
80
|
+
if @new_resource.reload_command
|
81
|
+
super
|
82
|
+
else
|
83
|
+
run_command_with_systems_locale(:command => "/bin/systemctl reload #{@new_resource.service_name}")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def enable_service
|
88
|
+
run_command_with_systems_locale(:command => "/bin/systemctl enable #{@new_resource.service_name}")
|
89
|
+
end
|
90
|
+
|
91
|
+
def disable_service
|
92
|
+
run_command_with_systems_locale(:command => "/bin/systemctl disable #{@new_resource.service_name}")
|
93
|
+
end
|
94
|
+
|
95
|
+
def is_active?
|
96
|
+
run_command_with_systems_locale({:command => "/bin/systemctl is-active #{@new_resource.service_name}", :ignore_failure => true}) == 0
|
97
|
+
end
|
98
|
+
|
99
|
+
def is_enabled?
|
100
|
+
run_command_with_systems_locale({:command => "/bin/systemctl is-enabled #{@new_resource.service_name}", :ignore_failure => true}) == 0
|
101
|
+
end
|
102
|
+
end
|
@@ -140,8 +140,14 @@ class Chef
|
|
140
140
|
def restart_service
|
141
141
|
if @new_resource.restart_command
|
142
142
|
super
|
143
|
-
|
144
|
-
|
143
|
+
# Upstart always provides restart functionality so we don't need to mimic it with stop/sleep/start.
|
144
|
+
# Older versions of upstart would fail on restart if the service was currently stopped, check for that. LP:430883
|
145
|
+
else @new_resource.supports[:restart]
|
146
|
+
if @current_resource.running
|
147
|
+
run_command_with_systems_locale(:command => "/sbin/restart #{@new_resource.service_name}")
|
148
|
+
else
|
149
|
+
start_service
|
150
|
+
end
|
145
151
|
end
|
146
152
|
end
|
147
153
|
|
data/lib/chef/providers.rb
CHANGED
@@ -69,6 +69,7 @@ require 'chef/provider/service/init'
|
|
69
69
|
require 'chef/provider/service/insserv'
|
70
70
|
require 'chef/provider/service/redhat'
|
71
71
|
require 'chef/provider/service/simple'
|
72
|
+
require 'chef/provider/service/systemd'
|
72
73
|
require 'chef/provider/service/upstart'
|
73
74
|
require 'chef/provider/service/windows'
|
74
75
|
require 'chef/provider/service/solaris'
|
@@ -83,6 +84,7 @@ require 'chef/provider/group/dscl'
|
|
83
84
|
require 'chef/provider/group/gpasswd'
|
84
85
|
require 'chef/provider/group/groupadd'
|
85
86
|
require 'chef/provider/group/pw'
|
87
|
+
require 'chef/provider/group/suse'
|
86
88
|
require 'chef/provider/group/usermod'
|
87
89
|
require 'chef/provider/group/windows'
|
88
90
|
|
data/lib/chef/resource.rb
CHANGED
@@ -87,6 +87,8 @@ F
|
|
87
87
|
attr_accessor :recipe_name
|
88
88
|
attr_accessor :enclosing_provider
|
89
89
|
attr_accessor :source_line
|
90
|
+
attr_accessor :retries
|
91
|
+
attr_accessor :retry_delay
|
90
92
|
|
91
93
|
attr_reader :updated
|
92
94
|
|
@@ -112,6 +114,8 @@ F
|
|
112
114
|
@updated_by_last_action = false
|
113
115
|
@supports = {}
|
114
116
|
@ignore_failure = false
|
117
|
+
@retries = 0
|
118
|
+
@retry_delay = 2
|
115
119
|
@not_if = nil
|
116
120
|
@not_if_args = {}
|
117
121
|
@only_if = nil
|
@@ -224,6 +228,22 @@ F
|
|
224
228
|
)
|
225
229
|
end
|
226
230
|
|
231
|
+
def retries(arg=nil)
|
232
|
+
set_or_return(
|
233
|
+
:retries,
|
234
|
+
arg,
|
235
|
+
:kind_of => Integer
|
236
|
+
)
|
237
|
+
end
|
238
|
+
|
239
|
+
def retry_delay(arg=nil)
|
240
|
+
set_or_return(
|
241
|
+
:retry_delay,
|
242
|
+
arg,
|
243
|
+
:kind_of => Integer
|
244
|
+
)
|
245
|
+
end
|
246
|
+
|
227
247
|
def epic_fail(arg=nil)
|
228
248
|
ignore_failure(arg)
|
229
249
|
end
|
@@ -468,8 +488,8 @@ F
|
|
468
488
|
set_or_return(attr_name.to_sym, arg, validation_opts)
|
469
489
|
end
|
470
490
|
end
|
471
|
-
|
472
|
-
def build_from_file(cookbook_name, filename)
|
491
|
+
|
492
|
+
def build_from_file(cookbook_name, filename, run_context)
|
473
493
|
rname = filename_to_qualified_string(cookbook_name, filename)
|
474
494
|
|
475
495
|
# Add log entry if we override an existing light-weight resource.
|
@@ -490,6 +510,12 @@ F
|
|
490
510
|
|
491
511
|
class << cls
|
492
512
|
include Chef::Mixin::FromFile
|
513
|
+
|
514
|
+
attr_accessor :run_context
|
515
|
+
|
516
|
+
def node
|
517
|
+
self.run_context.node
|
518
|
+
end
|
493
519
|
|
494
520
|
def actions_to_create
|
495
521
|
@actions_to_create
|
@@ -500,6 +526,9 @@ F
|
|
500
526
|
end
|
501
527
|
end
|
502
528
|
|
529
|
+
# set the run context in the class instance variable
|
530
|
+
cls.run_context = run_context
|
531
|
+
|
503
532
|
# load resource definition from file
|
504
533
|
cls.class_from_file(filename)
|
505
534
|
|
data/lib/chef/resource/git.rb
CHANGED
@@ -26,6 +26,15 @@ class Chef
|
|
26
26
|
super
|
27
27
|
@resource_name = :git
|
28
28
|
@provider = Chef::Provider::Git
|
29
|
+
@additional_remotes = Hash[]
|
30
|
+
end
|
31
|
+
|
32
|
+
def additional_remotes(arg=nil)
|
33
|
+
set_or_return(
|
34
|
+
:additional_remotes,
|
35
|
+
arg,
|
36
|
+
:kind_of => Hash
|
37
|
+
)
|
29
38
|
end
|
30
39
|
|
31
40
|
alias :branch :revision
|
data/lib/chef/resource/mount.rb
CHANGED
@@ -27,6 +27,8 @@ class Chef
|
|
27
27
|
super
|
28
28
|
@resource_name = :yum_package
|
29
29
|
@provider = Chef::Provider::Package::Yum
|
30
|
+
@flush_cache = { :before => false, :after => false }
|
31
|
+
@allow_downgrade = false
|
30
32
|
end
|
31
33
|
|
32
34
|
# Install a specific arch
|
@@ -38,6 +40,24 @@ class Chef
|
|
38
40
|
)
|
39
41
|
end
|
40
42
|
|
43
|
+
def flush_cache(args={})
|
44
|
+
if args.is_a? Array
|
45
|
+
args.each { |arg| @flush_cache[arg] = true }
|
46
|
+
elsif args.any?
|
47
|
+
@flush_cache = args
|
48
|
+
else
|
49
|
+
@flush_cache
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def allow_downgrade(arg=nil)
|
54
|
+
set_or_return(
|
55
|
+
:allow_downgrade,
|
56
|
+
arg,
|
57
|
+
:kind_of => [ TrueClass, FalseClass ]
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
41
61
|
end
|
42
62
|
end
|
43
63
|
end
|