chef 0.10.0.beta.2 → 0.10.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/chef/knife/data_bag_edit.rb +1 -1
- data/lib/chef/knife/data_bag_show.rb +15 -15
- data/lib/chef/knife/ui.rb +3 -5
- data/lib/chef/mixin/command.rb +1 -0
- data/lib/chef/mixin/command/windows.rb +5 -1
- data/lib/chef/mixin/shell_out.rb +8 -6
- data/lib/chef/provider/execute.rb +29 -27
- data/lib/chef/provider/git.rb +9 -23
- data/lib/chef/resource/git.rb +1 -0
- data/lib/chef/shell_out.rb +1 -2
- data/lib/chef/shell_out/unix.rb +0 -1
- data/lib/chef/shell_out/windows.rb +5 -2
- data/lib/chef/version.rb +1 -1
- metadata +1 -1
@@ -84,7 +84,7 @@ class Chef
|
|
84
84
|
output = edit_item(item)
|
85
85
|
rest.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", output)
|
86
86
|
stdout.puts("Saved data_bag_item[#{@name_args[1]}]")
|
87
|
-
output(format_for_display(object)) if config[:print_after]
|
87
|
+
output(format_for_display(object.raw_data)) if config[:print_after]
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -58,21 +58,21 @@ class Chef
|
|
58
58
|
|
59
59
|
def run
|
60
60
|
display = case @name_args.length
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
61
|
+
when 2
|
62
|
+
if use_encryption
|
63
|
+
raw = Chef::EncryptedDataBagItem.load(@name_args[0],
|
64
|
+
@name_args[1],
|
65
|
+
read_secret)
|
66
|
+
format_for_display(raw.to_hash)
|
67
|
+
else
|
68
|
+
format_for_display(Chef::DataBagItem.load(@name_args[0], @name_args[1]).raw_data)
|
69
|
+
end
|
70
|
+
when 1
|
71
|
+
format_list_for_display(Chef::DataBag.load(@name_args[0]))
|
72
|
+
else
|
73
|
+
stdout.puts opt_parser
|
74
|
+
exit(1)
|
75
|
+
end
|
76
76
|
output(display)
|
77
77
|
end
|
78
78
|
end
|
data/lib/chef/knife/ui.rb
CHANGED
@@ -114,9 +114,7 @@ class Chef
|
|
114
114
|
config[:with_uri] ? list : list.keys.sort { |a,b| a <=> b }
|
115
115
|
end
|
116
116
|
|
117
|
-
def format_for_display(
|
118
|
-
data = item.kind_of?(Chef::DataBagItem) ? item.raw_data : item
|
119
|
-
|
117
|
+
def format_for_display(data)
|
120
118
|
if config[:attribute]
|
121
119
|
config[:attribute].split(".").each do |attr|
|
122
120
|
if data.respond_to?(:[])
|
@@ -127,12 +125,12 @@ class Chef
|
|
127
125
|
data = data.send(attr.to_sym)
|
128
126
|
end
|
129
127
|
end
|
130
|
-
{ config[:attribute] => data.
|
128
|
+
{ config[:attribute] => data.respond_to?(:to_hash) ? data.to_hash : data }
|
131
129
|
elsif config[:run_list]
|
132
130
|
data = data.run_list.run_list
|
133
131
|
{ "run_list" => data }
|
134
132
|
elsif config[:environment]
|
135
|
-
if data.
|
133
|
+
if data.respond_to?(:chef_environment)
|
136
134
|
{"chef_environment" => data.chef_environment}
|
137
135
|
else
|
138
136
|
# this is a place holder for now. Feel free to modify (i.e. add other cases). [nuo]
|
data/lib/chef/mixin/command.rb
CHANGED
@@ -118,6 +118,7 @@ class Chef
|
|
118
118
|
args[:ignore_failure] ||= false
|
119
119
|
args[:output_on_failure] ||= false
|
120
120
|
|
121
|
+
# TODO: This is the wrong place for this responsibility.
|
121
122
|
if args.has_key?(:creates)
|
122
123
|
if File.exists?(args[:creates])
|
123
124
|
Chef::Log.debug("Skipping #{args[:command]} - creates #{args[:creates]} exists.")
|
data/lib/chef/mixin/shell_out.rb
CHANGED
@@ -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.
|
@@ -20,16 +20,18 @@ require 'chef/shell_out'
|
|
20
20
|
class Chef
|
21
21
|
module Mixin
|
22
22
|
module ShellOut
|
23
|
-
|
23
|
+
|
24
24
|
def shell_out(*command_args)
|
25
25
|
cmd = Chef::ShellOut.new(*command_args)
|
26
|
+
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info?
|
27
|
+
cmd.live_stream ||= STDOUT
|
28
|
+
end
|
26
29
|
cmd.run_command
|
27
30
|
cmd
|
28
31
|
end
|
29
|
-
|
32
|
+
|
30
33
|
def shell_out!(*command_args)
|
31
|
-
cmd
|
32
|
-
cmd.run_command
|
34
|
+
cmd= shell_out(*command_args)
|
33
35
|
cmd.error!
|
34
36
|
cmd
|
35
37
|
end
|
@@ -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.
|
@@ -16,43 +16,45 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/mixin/
|
19
|
+
require 'chef/mixin/shell_out'
|
20
20
|
require 'chef/log'
|
21
21
|
require 'chef/provider'
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Provider
|
25
25
|
class Execute < Chef::Provider
|
26
|
-
|
27
|
-
include Chef::Mixin::
|
28
|
-
|
26
|
+
|
27
|
+
include Chef::Mixin::ShellOut
|
28
|
+
|
29
29
|
def load_current_resource
|
30
30
|
true
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def action_run
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
command_args[:timeout] = @new_resource.timeout if @new_resource.timeout
|
42
|
-
command_args[:returns] = @new_resource.returns if @new_resource.returns
|
43
|
-
command_args[:environment] = @new_resource.environment if @new_resource.environment
|
44
|
-
command_args[:user] = @new_resource.user if @new_resource.user
|
45
|
-
command_args[:group] = @new_resource.group if @new_resource.group
|
46
|
-
command_args[:cwd] = @new_resource.cwd if @new_resource.cwd
|
47
|
-
command_args[:umask] = @new_resource.umask if @new_resource.umask
|
48
|
-
|
49
|
-
status = run_command(command_args)
|
50
|
-
if status
|
51
|
-
@new_resource.updated_by_last_action(true)
|
52
|
-
Chef::Log.info("Ran #{@new_resource} successfully")
|
34
|
+
opts = {}
|
35
|
+
|
36
|
+
if sentinel_file = @new_resource.creates
|
37
|
+
if File.exists?(sentinel_file)
|
38
|
+
Chef::Log.info("Skipping #{self} - sentinel file #{sentinel_file} exists.")
|
39
|
+
return false
|
40
|
+
end
|
53
41
|
end
|
42
|
+
|
43
|
+
# original implementation did not specify a timeout, but ShellOut
|
44
|
+
# *always* times out. So, set a very long default timeout
|
45
|
+
opts[:timeout] = @new_resource.timeout || 3600
|
46
|
+
opts[:returns] = @new_resource.returns if @new_resource.returns
|
47
|
+
opts[:environment] = @new_resource.environment if @new_resource.environment
|
48
|
+
opts[:user] = @new_resource.user if @new_resource.user
|
49
|
+
opts[:group] = @new_resource.group if @new_resource.group
|
50
|
+
opts[:cwd] = @new_resource.cwd if @new_resource.cwd
|
51
|
+
opts[:umask] = @new_resource.umask if @new_resource.umask
|
52
|
+
|
53
|
+
result = shell_out!(@new_resource.command, opts)
|
54
|
+
@new_resource.updated_by_last_action(true)
|
55
|
+
Chef::Log.info("Ran #{@new_resource} successfully")
|
54
56
|
end
|
55
|
-
|
57
|
+
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
data/lib/chef/provider/git.rb
CHANGED
@@ -19,14 +19,14 @@
|
|
19
19
|
|
20
20
|
require 'chef/log'
|
21
21
|
require 'chef/provider'
|
22
|
-
require 'chef/mixin/
|
22
|
+
require 'chef/mixin/shell_out'
|
23
23
|
require 'fileutils'
|
24
24
|
|
25
25
|
class Chef
|
26
26
|
class Provider
|
27
27
|
class Git < Chef::Provider
|
28
28
|
|
29
|
-
include Chef::Mixin::
|
29
|
+
include Chef::Mixin::ShellOut
|
30
30
|
|
31
31
|
def load_current_resource
|
32
32
|
@current_resource = Chef::Resource::Git.new(@new_resource.name)
|
@@ -91,12 +91,8 @@ class Chef
|
|
91
91
|
|
92
92
|
def find_current_revision
|
93
93
|
if ::File.exist?(::File.join(cwd, ".git"))
|
94
|
-
status, result, error_message = output_of_command("git rev-parse HEAD", run_options(:cwd=>cwd))
|
95
|
-
|
96
94
|
# 128 is returned when we're not in a git repo. this is fine
|
97
|
-
|
98
|
-
handle_command_failures(status, "STDOUT: #{result}\nSTDERR: #{error_message}")
|
99
|
-
end
|
95
|
+
result = shell_out!('git rev-parse HEAD', :cwd => cwd, :returns => [0,128]).stdout.strip
|
100
96
|
end
|
101
97
|
sha_hash?(result) ? result : nil
|
102
98
|
end
|
@@ -111,21 +107,21 @@ class Chef
|
|
111
107
|
Chef::Log.info "Cloning repo #{@new_resource.repository} to #{@new_resource.destination}"
|
112
108
|
|
113
109
|
clone_cmd = "git clone #{args.join(' ')} #{@new_resource.repository} #{@new_resource.destination}"
|
114
|
-
|
110
|
+
shell_out!(clone_cmd, run_options)
|
115
111
|
end
|
116
112
|
|
117
113
|
def checkout
|
118
114
|
sha_ref = target_revision
|
119
115
|
Chef::Log.info "Checking out branch: #{@new_resource.revision} reference: #{sha_ref}"
|
120
116
|
# checkout into a local branch rather than a detached HEAD
|
121
|
-
|
117
|
+
shell_out!("git checkout -b deploy #{sha_ref}", run_options(:cwd => @new_resource.destination))
|
122
118
|
end
|
123
119
|
|
124
120
|
def enable_submodules
|
125
121
|
if @new_resource.enable_submodules
|
126
122
|
Chef::Log.info "Enabling git submodules"
|
127
123
|
command = "git submodule init && git submodule update"
|
128
|
-
|
124
|
+
shell_out!(command, run_options(:cwd => @new_resource.destination))
|
129
125
|
end
|
130
126
|
end
|
131
127
|
|
@@ -135,7 +131,7 @@ class Chef
|
|
135
131
|
# since we're in a local branch already, just reset to specified revision rather than merge
|
136
132
|
fetch_command = "git fetch #{@new_resource.remote} && git fetch #{@new_resource.remote} --tags && git reset --hard #{target_revision}"
|
137
133
|
Chef::Log.debug "Fetching updates from #{new_resource.remote} and resetting to revison #{target_revision}"
|
138
|
-
|
134
|
+
shell_out!(fetch_command, run_options(:cwd => @new_resource.destination))
|
139
135
|
end
|
140
136
|
|
141
137
|
# Use git-config to setup a remote tracking branches. Could use
|
@@ -151,7 +147,7 @@ class Chef
|
|
151
147
|
"at remote #{@new_resource.remote}"
|
152
148
|
command << "git config remote.#{@new_resource.remote}.url #{@new_resource.repository}"
|
153
149
|
command << "git config remote.#{@new_resource.remote}.fetch +refs/heads/*:refs/remotes/#{@new_resource.remote}/*"
|
154
|
-
|
150
|
+
shell_out!(command.join(" && "), run_options(:cwd => @new_resource.destination))
|
155
151
|
end
|
156
152
|
|
157
153
|
def current_revision_matches_target_revision?
|
@@ -175,17 +171,7 @@ class Chef
|
|
175
171
|
|
176
172
|
def remote_resolve_reference
|
177
173
|
command = git('ls-remote', @new_resource.repository, @new_resource.revision)
|
178
|
-
|
179
|
-
begin
|
180
|
-
status, result, error_message = output_of_command(command, run_options)
|
181
|
-
handle_command_failures(status, "STDOUT: #{result}\nSTDERR: #{error_message}")
|
182
|
-
rescue Chef::Exceptions::Exec => e
|
183
|
-
msg = "Could not access the remote Git repository. If this is a private repository, "
|
184
|
-
msg << "verify that the deploy key for your application has been added to your remote Git account.\n"
|
185
|
-
msg << e.message
|
186
|
-
raise Chef::Exceptions::Exec, msg
|
187
|
-
end
|
188
|
-
result
|
174
|
+
shell_out!(command, run_options).stdout
|
189
175
|
end
|
190
176
|
|
191
177
|
private
|
data/lib/chef/resource/git.rb
CHANGED
data/lib/chef/shell_out.rb
CHANGED
@@ -169,8 +169,7 @@ class Chef
|
|
169
169
|
# * Chef::Exceptions::CommandTimeout when the command does not complete
|
170
170
|
# within +timeout+ seconds (default: 60s)
|
171
171
|
def run_command
|
172
|
-
#
|
173
|
-
# here for documentation purposes
|
172
|
+
Chef::Log.info("sh(#{@command})")
|
174
173
|
super
|
175
174
|
end
|
176
175
|
|
data/lib/chef/shell_out/unix.rb
CHANGED
@@ -14,7 +14,6 @@ class Chef
|
|
14
14
|
# * Chef::Exceptions::CommandTimeout when the command does not complete
|
15
15
|
# within +timeout+ seconds (default: 60s)
|
16
16
|
def run_command
|
17
|
-
Chef::Log.debug("sh(#{@command})")
|
18
17
|
@child_pid = fork_subprocess
|
19
18
|
|
20
19
|
configure_parent_process_file_descriptors
|
@@ -17,7 +17,11 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require 'timeout'
|
20
|
-
|
20
|
+
if RUBY_VERSION =~ /^1\.8/
|
21
|
+
require 'win32/open3'
|
22
|
+
else
|
23
|
+
require 'open3'
|
24
|
+
end
|
21
25
|
|
22
26
|
class Chef
|
23
27
|
class ShellOut
|
@@ -27,7 +31,6 @@ class Chef
|
|
27
31
|
# Missing lots of features from the UNIX version, such as
|
28
32
|
# environment, cwd, etc.
|
29
33
|
def run_command
|
30
|
-
Chef::Log.debug("sh(#{@command})")
|
31
34
|
# win32 open4 is really just open3.
|
32
35
|
Open3.popen3(@command) do |stdin,stdout,stderr|
|
33
36
|
@finished_stdout = false
|
data/lib/chef/version.rb
CHANGED