Class: Chef::Application::Apply
- Inherits:
-
Chef::Application
show all
- Includes:
- LicenseAcceptance::CLIFlags::MixlibCLI
- Defined in:
- lib/chef/application/apply.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
#apply_extra_config_options, #auto_log_level?, #check_license_acceptance, #chef_config, #chef_configfetcher, #configure_chef, #configure_encoding, #configure_log_location, #configure_logging, #configure_stdout_logger, debug_stacktrace, #emit_warnings, exit!, fatal!, #load_config_file, logger, #logger, normalize_exit_code, #resolve_log_level, #run_chef_client, #set_specific_recipes, #setup_application, #setup_signal_handlers, use_separate_defaults?, #using_output_formatter?, #want_additional_logger?
Constructor Details
#initialize ⇒ Apply
Returns a new instance of Apply.
121
122
123
|
# File 'lib/chef/application/apply.rb', line 121
def initialize
super
end
|
Instance Attribute Details
#json_attribs ⇒ Object
Returns the value of attribute json_attribs.
119
120
121
|
# File 'lib/chef/application/apply.rb', line 119
def json_attribs
@json_attribs
end
|
Instance Method Details
#get_recipe_and_run_context ⇒ Object
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
# File 'lib/chef/application/apply.rb', line 155
def get_recipe_and_run_context
Chef::Config[:solo_legacy_mode] = true
@chef_client = Chef::Client.new(@json_attribs)
@chef_client.run_ohai
@chef_client.load_node
@chef_client.build_node
run_context = if @chef_client.events.nil?
Chef::RunContext.new(@chef_client.node, {})
else
Chef::RunContext.new(@chef_client.node, {}, @chef_client.events)
end
recipe = Chef::Recipe.new("(#{Chef::Dist::APPLY} cookbook)", "(#{Chef::Dist::APPLY} recipe)", run_context)
[recipe, run_context]
end
|
#parse_json ⇒ Object
134
135
136
137
138
139
|
# File 'lib/chef/application/apply.rb', line 134
def parse_json
if Chef::Config[:json_attribs]
config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs])
@json_attribs = config_fetcher.fetch_json
end
end
|
#read_recipe_file(file_name) ⇒ Object
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/chef/application/apply.rb', line 141
def read_recipe_file(file_name)
if file_name.nil?
Chef::Application.fatal!("No recipe file was provided", Chef::Exceptions::RecipeNotFound.new)
else
recipe_path = File.expand_path(file_name)
unless File.exist?(recipe_path)
Chef::Application.fatal!("No file exists at #{recipe_path}", Chef::Exceptions::RecipeNotFound.new)
end
recipe_fh = open(recipe_path)
recipe_text = recipe_fh.read
[recipe_text, recipe_fh]
end
end
|
125
126
127
128
129
130
131
132
|
# File 'lib/chef/application/apply.rb', line 125
def reconfigure
parse_options
Chef::Config.merge!(config)
configure_logging
Chef::Config.export_proxies
Chef::Config.init_openssl
parse_json
end
|
#run(enforce_license = false) ⇒ Object
219
220
221
222
223
|
# File 'lib/chef/application/apply.rb', line 219
def run(enforce_license = false)
reconfigure
check_license_acceptance if enforce_license
run_application
end
|
#run_application ⇒ Object
#run_chef_recipe ⇒ Object
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
# File 'lib/chef/application/apply.rb', line 179
def run_chef_recipe
if config[:execute]
@recipe_text = config[:execute]
temp_recipe_file
elsif config[:stdin]
@recipe_text = STDIN.read
temp_recipe_file
else
unless ARGV[0]
puts opt_parser
Chef::Application.exit! "No recipe file provided", Chef::Exceptions::RecipeNotFound.new
end
@recipe_filename = ARGV[0]
@recipe_text, @recipe_fh = read_recipe_file @recipe_filename
end
recipe, run_context = get_recipe_and_run_context
recipe.instance_eval(@recipe_text, @recipe_filename, 1)
runner = Chef::Runner.new(run_context)
catch(:end_client_run_early) do
begin
runner.converge
ensure
@recipe_fh.close
end
end
Chef::Platform::Rebooter.reboot_if_needed!(runner)
end
|
#temp_recipe_file ⇒ Object
write recipe to temp file, so in case of error, user gets error w/ context
172
173
174
175
176
177
|
# File 'lib/chef/application/apply.rb', line 172
def temp_recipe_file
@recipe_fh = Tempfile.open("recipe-temporary-file")
@recipe_fh.write(@recipe_text)
@recipe_fh.rewind
@recipe_filename = @recipe_fh.path
end
|