> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.itential.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.itential.com/_mcp/server.

# Create an executable service

> Create executable services to run scripts or applications stored in a Git repository using a pre-defined executable object.

You can create an executable service to run scripts or applications stored in a Git repository. Executable services use a pre-defined executable object to determine how to run your script.

## Prerequisites

* An executable object that defines the command to run your script
* A Git repository that contains your script or application
* Operator role permissions
* Repository authentication configured (if using a private repository)

## Create a basic executable service

Use the `iagctl create service` executable command to create a new executable service.

**Syntax:**

```bash
iagctl create service executable <service-name> \
  --executable-object <object-name> \
  --repository <repository-name> \
  --working-dir <directory-path> \
  --filename <script-filename>
```

**Parameters:**

* `<service-name>`: A unique name for the executable service
* `--executable-object`: The name of the executable object that runs your script
* `--repository`: The name of the Git repository that contains your script
* `--working-dir`: The path within the repository where your script is located
* `--filename`: The name of the script file to execute

**Example:**

Create an executable service that runs a Bash script:

```bash
iagctl create service executable simple-bash \
  --executable-object my-obj \
  --repository gateway-resources \
  --working-dir executable_services/simple-script \
  --filename test.sh
```

This example uses the executable object named `my-obj` (which would be configured to use `/usr/bin/bash`) to run the `test.sh` script.

## Create an executable service with argument formatting

Add the `--arg-format` parameter to define how Gateway passes arguments to your script at runtime.

**Syntax:**

```bash
iagctl create service executable <service-name> \
  --executable-object <object-name> \
  --repository <repository-name> \
  --working-dir <directory-path> \
  --filename <script-filename> \
  --arg-format "<format-template>"
```

**Example:**

Create an executable service with custom argument formatting:

```bash
iagctl create service executable simple-executable \
  --executable-object my-obj \
  --arg-format "{{.Key}} {{.Value}}" \
  --repository gateway-resources \
  --working-dir executable_services/simple-script \
  --filename test.sh
```

## Additional examples

### Create an executable service for a Terraform script

```bash
iagctl create service executable terraform-deploy \
  --executable-object terraform-latest \
  --repository infrastructure-repo \
  --working-dir terraform/production \
  --filename main.tf \
  --description "Deploy production infrastructure"
```

### Create an executable service for a Python script

```bash
iagctl create service executable python-util \
  --executable-object python311-standard \
  --repository utility-scripts \
  --working-dir python \
  --filename data-processor.py \
  --description "Process daily data files"
```

### Create an executable service with complex argument formatting

```bash
iagctl create service executable advanced-script \
  --executable-object bash-standard \
  --repository gateway-resources \
  --working-dir scripts \
  --filename process.sh \
  --arg-format "--{{.Key}}={{.Value}}" \
  --description "Process data with custom flags"
```