Running plans with pe-plan-runner
The pe-plan-runner
service improves scalability and
performance compared to the existing Puppet orchestrator service. Disabled by default, the
pe-plan-runner
service runs on the primary server,
allowing concurrent execution of up to 100 plans, with potential for further scaling based
on available primary server memory.
With pe-plan-runner
enabled, you can continue to schedule
and run plans using existing PE console workflows or orchestrator APIs, and any
previously scheduled plans are automatically executed by pe-plan-runner
.
To start running plans with
pe-plan-runner
instead of the
orchestrator service:- Click Node groups > PE Infrastructure > PE Orchestrator.
- Select the Classes tab and locate the
puppet_enterprise::profile::orchestrator
class. - From the Parameter name dropdown, select
plan_runner_active
and enter true as the value. - Click Add to node group and commit your changes.
Tip: After enabling
pe-plan-runner
, monitor
memory usage on the primary server, as poorly optimized plans may adversely affect
performance.
Important: When
pe-plan-runner
is active:- Plans run from a Ruby process directly on the primary server (i.e. not in the
JVM or inside Puppet orchestrator). This is the
pe-plan-runner
service. - When an individual plan starts, the Ruby process controlling plans perform a
fork()
to isolate that plan’s runtime environment. - When a plan runs an action on targets, such as a task, it makes a request to the orchestrator, which spawns execution of that action on each target’s agent. The results of every single target are returned to the plan’s Ruby process and the plan loads the full result for each target into memory all at the same time. The results stay in memory for the lifetime of the plan.
- Once the plan finishes, the Ruby process joins the plan’s individual
fork()
and Ruby cleans up all the objects from the plan run, including all the target action results stored in memory.