Defining parameters in tasks
Allow your task to accept parameters as either environment variables or as a JSON hash on standard input.
Tasks can receive input as either environment variables, a JSON hash on
standard input, or as PowerShell arguments. By default, the
task runner submits parameters as both environment variables and as JSON on stdin.
If your task needs to receive parameters only in a certain way, such as
stdin only, you can set the
input method in your task metadata. For Windows tasks, it's
usually better to use tasks written in PowerShell. See the
related topic about task metadata for information about setting the input method.
Environment variables are the easiest way to implement parameters, and
they work well for simple JSON types such as strings and numbers. For arrays and hashes, use
structured input instead because parameters with undefined values (nil, undef) passed
as environment variables have the String
value null. For more information, see Structured input and output.
To add parameters to your task as environment variables, pass the argument
prefixed with the Puppet task prefix PT_ .
For example, to add a message parameter to your task, read it from the environment in task
code as PT_message. When the
user runs the task, they can specify the value for the parameter on the command line as
message=hello, and the task runner submits the value hello to the PT_message variable.
#!/usr/bin/env bash echo your message is $PT_message
Defining parameters in Windows
For Windows tasks, you can pass parameters as environment
variables, but it's easier to write your task in PowerShell
and use named arguments. By default tasks with a .ps1
extension use PowerShell standard argument handling.
For example, this PowerShell task takes a process name as an argument and returns information about the process. If no parameter is passed by the user, the task returns all of the processes.
[CmdletBinding()]
Param(
[Parameter(Mandatory = $False)]
[String]
$Name
)
if ($Name -eq $null -or $Name -eq "") {
Get-Process
} else {
$processes = Get-Process -Name $Name
$result = @()
foreach ($process in $processes) {
$result += @{"Name" = $process.ProcessName;
"CPU" = $process.CPU;
"Memory" = $process.WorkingSet;
"Path" = $process.Path;
"Id" = $process.Id}
}
if ($result.Count -eq 1) {
ConvertTo-Json -InputObject $result[0] -Compress
} elseif ($result.Count -gt 1) {
ConvertTo-Json -InputObject @{"_items" = $result} -Compress
}
}
To pass parameters in your task as environment variables (PT_parameter), you must set input_method in your
task metadata to environment. To run Ruby tasks on Windows, the Puppet agent must be installed on the target nodes.






