Class: Puppet::Agent
- Includes:
- Disabler, Locker, Util::Splayer
- Defined in:
- lib/puppet/agent.rb
Overview
A general class for triggering a run of another class.
Defined Under Namespace
Constant Summary
Constants included from Disabler
Disabler::DISABLED_MESSAGE_JSON_KEY
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#client_class ⇒ Object
readonly
Returns the value of attribute client_class.
-
#should_fork ⇒ Object
readonly
Returns the value of attribute should_fork.
Instance Method Summary collapse
- #can_fork? ⇒ Boolean
-
#initialize(client_class, should_fork = true) ⇒ Agent
constructor
A new instance of Agent.
- #needing_restart? ⇒ Boolean
-
#run(client_options = {}) ⇒ Object
Perform a run with our client.
- #run_in_fork(forking = true) ⇒ Object
- #stopping? ⇒ Boolean
Methods included from Util::Splayer
Methods included from Disabler
#disable, #disable_message, #disabled?, #enable
Methods included from Locker
#lock, #lockfile_path, #running?
Constructor Details
#initialize(client_class, should_fork = true) ⇒ Agent
Returns a new instance of Agent.
19 20 21 22 |
# File 'lib/puppet/agent.rb', line 19 def initialize(client_class, should_fork=true) @should_fork = can_fork? && should_fork @client_class = client_class end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
17 18 19 |
# File 'lib/puppet/agent.rb', line 17 def client @client end |
#client_class ⇒ Object (readonly)
Returns the value of attribute client_class.
17 18 19 |
# File 'lib/puppet/agent.rb', line 17 def client_class @client_class end |
#should_fork ⇒ Object (readonly)
Returns the value of attribute should_fork.
17 18 19 |
# File 'lib/puppet/agent.rb', line 17 def should_fork @should_fork end |
Instance Method Details
#can_fork? ⇒ Boolean
24 25 26 |
# File 'lib/puppet/agent.rb', line 24 def can_fork? Puppet.features.posix? && RUBY_PLATFORM != 'java' end |
#needing_restart? ⇒ Boolean
28 29 30 |
# File 'lib/puppet/agent.rb', line 28 def needing_restart? Puppet::Application.restart_requested? end |
#run(client_options = {}) ⇒ Object
Perform a run with our client.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/puppet/agent.rb', line 33 def run( = {}) if disabled? Puppet.notice _("Skipping run of %{client_class}; administratively disabled (Reason: '%{disable_message}');\nUse 'puppet agent --enable' to re-enable.") % { client_class: client_class, disable_message: } return end result = nil block_run = Puppet::Application.controlled_run do splay .fetch :splay, Puppet[:splay] result = run_in_fork(should_fork) do with_client([:transaction_uuid], [:job_id]) do |client| begin client_args = .merge(:pluginsync => Puppet::Configurer.should_pluginsync?) lock { client.run(client_args) } rescue Puppet::LockError Puppet.notice _("Run of %{client_class} already in progress; skipping (%{lockfile_path} exists)") % { client_class: client_class, lockfile_path: lockfile_path } return rescue StandardError => detail Puppet.log_exception(detail, _("Could not run %{client_class}: %{detail}") % { client_class: client_class, detail: detail }) 1 end end end true end Puppet.notice _("Shutdown/restart in progress (%{status}); skipping run") % { status: Puppet::Application.run_status.inspect } unless block_run result end |
#run_in_fork(forking = true) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/puppet/agent.rb', line 66 def run_in_fork(forking = true) return yield unless forking or Puppet.features.windows? atForkHandler = Puppet::Util::AtFork.get_handler atForkHandler.prepare begin child_pid = Kernel.fork do atForkHandler.child $0 = _("puppet agent: applying configuration") begin exit(yield) rescue SystemExit exit(-1) rescue NoMemoryError exit(-2) end end ensure atForkHandler.parent end exit_code = Process.waitpid2(child_pid) case exit_code[1].exitstatus when -1 raise SystemExit when -2 raise NoMemoryError end exit_code[1].exitstatus end |
#stopping? ⇒ Boolean
62 63 64 |
# File 'lib/puppet/agent.rb', line 62 def stopping? Puppet::Application.stop_requested? end |