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?, chef_zero_server, #configure_chef, #configure_proxy_environment_variables, #configure_stdout_logger, debug_stacktrace, destroy_server_connectivity, exit!, fatal!, #initialize, #resolve_log_level, #run, #run_chef_client, setup_server_connectivity, #setup_signal_handlers, #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.
242 243 244 |
# File 'lib/chef/application/client.rb', line 242 def chef_client_json @chef_client_json end |
Instance Method Details
#configure_logging ⇒ Object
288 289 290 291 292 |
# File 'lib/chef/application/client.rb', line 288 def configure_logging super Mixlib::Authentication::Log.use_log_devices( Chef::Log ) Ohai::Log.use_log_devices( Chef::Log ) end |
#load_config_file ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/chef/application/client.rb', line 275 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
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/chef/application/client.rb', line 246 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.host = config[:chef_zero_host] if config[:chef_zero_host] 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.
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 350 351 352 353 354 355 356 357 358 359 |
# File 'lib/chef/application/client.rb', line 299 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
294 295 296 |
# File 'lib/chef/application/client.rb', line 294 def setup_application Chef::Daemon.change_privilege end |