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:
  1. Click Node groups > PE Infrastructure > PE Orchestrator.
  2. Select the Classes tab and locate the puppet_enterprise::profile::orchestrator class.
  3. From the Parameter name dropdown, select plan_runner_active and enter true as the value.
  4. 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.