Class: Chef::Application::Client
- Inherits:
-
Chef::Application
- Object
- Chef::Application
- Chef::Application::Client
- Defined in:
- lib/chef/application/client.rb
Constant Summary collapse
- SELF_PIPE =
Mimic self_pipe sleep from Unicorn to capture signals safely
[]
- IMMEDIATE_RUN_SIGNAL =
"1".freeze
- GRACEFUL_EXIT_SIGNAL =
"2".freeze
Instance Attribute Summary collapse
-
#chef_client_json ⇒ Object
readonly
Returns the value of attribute chef_client_json.
Instance Method Summary collapse
- #configure_logging ⇒ Object
- #load_config_file ⇒ Object
-
#reconfigure ⇒ Object
Reconfigure the chef client Re-open the JSON attributes and load them into the node.
-
#run_application ⇒ Object
Run the chef client, optionally daemonizing or looping at intervals.
- #setup_application ⇒ Object
Methods inherited from Chef::Application
#auto_log_level?, #configure_chef, #configure_stdout_logger, debug_stacktrace, destroy_server_connectivity, exit!, fatal!, #initialize, #resolve_log_level, #run, #run_chef_client, setup_server_connectivity, #using_output_formatter?, #want_additional_logger?
Constructor Details
This class inherits a constructor from Chef::Application
Instance Attribute Details
#chef_client_json ⇒ Object (readonly)
Returns the value of attribute chef_client_json.
233 234 235 |
# File 'lib/chef/application/client.rb', line 233 def chef_client_json @chef_client_json end |
Instance Method Details
#configure_logging ⇒ Object
278 279 280 281 282 |
# File 'lib/chef/application/client.rb', line 278 def configure_logging super Mixlib::Authentication::Log.use_log_devices( Chef::Log ) Ohai::Log.use_log_devices( Chef::Log ) end |
#load_config_file ⇒ Object
265 266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/chef/application/client.rb', line 265 def load_config_file Chef::Config.config_file_jail = config[:config_file_jail] if config[:config_file_jail] if !config.has_key?(:config_file) if config[:local_mode] require 'chef/knife' config[:config_file] = Chef::Knife.locate_config_file else config[:config_file] = Chef::Config.platform_specific_path("/etc/chef/client.rb") end end super end |
#reconfigure ⇒ Object
Reconfigure the chef client Re-open the JSON attributes and load them into the node
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 |
# File 'lib/chef/application/client.rb', line 237 def reconfigure super Chef::Config[:specific_recipes] = cli_arguments.map { |file| File.(file) } Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url Chef::Config.local_mode = config[:local_mode] if config.has_key?(:local_mode) if Chef::Config.local_mode && !Chef::Config.has_key?(:cookbook_path) && !Chef::Config.has_key?(:chef_repo_path) Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd) end Chef::Config.chef_zero.port = config[:chef_zero_port] if config[:chef_zero_port] if Chef::Config[:daemonize] Chef::Config[:interval] ||= 1800 end if Chef::Config[:once] Chef::Config[:interval] = nil Chef::Config[:splay] = nil end if Chef::Config[:json_attribs] config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs]) @chef_client_json = config_fetcher.fetch_json end end |
#run_application ⇒ Object
Run the chef client, optionally daemonizing or looping at intervals.
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 |
# File 'lib/chef/application/client.rb', line 289 def run_application unless Chef::Platform.windows? SELF_PIPE.replace IO.pipe trap("USR1") do Chef::Log.info("SIGUSR1 received, waking up") SELF_PIPE[1].putc(IMMEDIATE_RUN_SIGNAL) # wakeup master process from select end # see CHEF-5172 if Chef::Config[:daemonize] || Chef::Config[:interval] trap("TERM") do Chef::Log.info("SIGTERM received, exiting gracefully") SELF_PIPE[1].putc(GRACEFUL_EXIT_SIGNAL) end end end if Chef::Config[:version] puts "Chef version: #{::Chef::VERSION}" end if Chef::Config[:daemonize] Chef::Daemon.daemonize("chef-client") end signal = nil loop do begin Chef::Application.exit!("Exiting", 0) if signal == GRACEFUL_EXIT_SIGNAL if Chef::Config[:splay] and signal != IMMEDIATE_RUN_SIGNAL splay = rand Chef::Config[:splay] Chef::Log.debug("Splay sleep #{splay} seconds") sleep splay end signal = nil run_chef_client(Chef::Config[:specific_recipes]) if Chef::Config[:interval] Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds") signal = interval_sleep else Chef::Application.exit! "Exiting", 0 end rescue SystemExit => e raise rescue Exception => e if Chef::Config[:interval] Chef::Log.error("#{e.class}: #{e}") Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again") signal = interval_sleep retry else Chef::Application.fatal!("#{e.class}: #{e.message}", 1) end end end end |
#setup_application ⇒ Object
284 285 286 |
# File 'lib/chef/application/client.rb', line 284 def setup_application Chef::Daemon.change_privilege end |