--- layout: docs page_title: action block in the job specification description: |- Configure custom commands in the `action` block of the Nomad job specification. Operators may execute these commands on a running allocation as a controlled way to interact with tasks. Review examples that use actions with arguments and templates. --- # `action` block in the job specification The `action` block allows job authors to define custom commands. These commands can be executed by operators with the necessary permissions on a running allocation, offering a controlled way to interact with tasks. The name of the action can contain alphanumeric characters and dashes. This name must be unique within its task and must not exceed 128 characters. ## `action` Parameters - `command` `(string: )` - Specifies the command to be executed. - `args` `(array: [])` - Provides a list of arguments to pass to the command. ```hcl job "my-job" { group "my-group" { task "my-task" { action "get-changelog" { command = "/usr/bin/curl" args = [ "-s", "https://raw.githubusercontent.com/hashicorp/nomad/main/CHANGELOG.md" ] } # ... } } } ``` ## `action` Examples ### Basic Action This example demonstrates a simple action that prints the current date and time: ```hcl job "example" { # ... group "demo" { # ... task "show-date" { # ... action "current-date" { command = "/bin/date" } } } } ``` ### Action with Arguments Here, an action uses arguments to perform a specific task: ```hcl job "example" { # ... group "demo" { # ... task "list-files" { # ... action "list-tmp" { command = "/bin/ls" args = ["-l", "/tmp"] } } } } ``` ### Action with Template This advanced example demonstrates an action that fetches and formats the latest changelog from the Nomad GitHub repository using a shell script. It showcases the use of templating with embedded environment variables and a multi-line script. ```hcl action "fetch-latest-nomad-changelog" { command = "/bin/sh" args = ["-c", < 1){ # Splitting the version line into components split($1, versionInfo, /[()]/); version=versionInfo[1]; gsub(" ", "", version); # Removing spaces from version releaseDate=versionInfo[2]; # Formatting URL components urlVersion=version; gsub("\\.", "", urlVersion); # Remove dots from version urlDate=releaseDate; gsub(" ", "-", urlDate); gsub(",", "", urlDate); # Replace spaces with hyphens and remove comma # Counting items under each section for(i=1; i<=NF; i++){ if($i ~ /^[A-Z ]+:$/){ gsub(":", "", $i); section=$i; itemCount[section]=0; } if(section && $i ~ /^\*/){ itemCount[section]++; } } # Printing the extracted information printf "Version: %s\nRelease Date: %s\n", version, releaseDate; for (s in itemCount) { printf "%d %s, ", itemCount[s], s; } printf "\nLink: https://github.com/hashicorp/nomad/blob/main/CHANGELOG.md#%s-%s\n\n", urlVersion, tolower(urlDate); delete itemCount; # Clear the itemCount array for the next version count++; } }' EOT ] } ```