Complete execution environment template reference
The full structure of a team execution environment template as generated by execution environment builder, with key fields and customization options.
Template structure
Use this as a reference when customizing templates for your teams.
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: team-ops-ee
title: Team Ops EE
description: "Pre-configured EE for the operations team"
annotations:
ansible.io/saved-template: 'true'
tags:
- execution-environment
- team-ops
spec:
type: execution-environment
parameters:
# Step 1: Base Image
- title: Base Image
properties:
baseImage:
default: registry.redhat.io/ansible-automation-platform-25/ee-minimal-rhel9:latest
customBaseImage:
default: ''
# Step 2: Configuration
- title: Configuration
properties:
collections:
default:
- name: ansible.netcommon
version: ">=2.0.0"
source: rh-certified
- name: ansible.utils
version: ">=1.5.0"
source: rh-certified
advancedConfiguration:
properties:
specifyRequirements:
default: true
pythonRequirements:
default:
- jmespath>=1.0.0
systemPackages:
default:
- python3-devel
addBuildSteps:
default: false
additionalBuildSteps:
default: []
# Step 3: Destination and Build
- title: Destination and Build
properties:
eeFileName:
default: team-ops-ee
templateDescription:
default: "Pre-configured EE for the operations team"
tags:
default:
- execution-environment
- team-ops
publishAndBuild:
properties:
publishToSCM:
default: true
buildExecutionEnvironment:
default: true
buildRegistry:
default: 'Private Automation Hub (PAH)'
buildImageName:
default: team-ops/team-ops-ee
buildImageTag:
default: latest
registryTlsVerify:
default: true
steps:
- id: create-ee-definition
name: Create Execution Environment Definition
action: ansible:create:ee-definition
input:
values:
eeFileName: ${{ parameters.eeFileName }}
eeDescription: ${{ parameters.templateDescription }}
tags: ${{ parameters.tags or [] }}
publishToSCM: ${{ parameters.publishAndBuild.publishToSCM }}
baseImage: ${{ parameters.baseImage === 'custom' and parameters.customBaseImage or parameters.baseImage }}
customBaseImage: ${{ parameters.customBaseImage or '' }}
collections: ${{ parameters.collections or [] }}
pythonRequirements: ${{ parameters.advancedConfiguration.pythonRequirements or [] }}
systemPackages: ${{ parameters.advancedConfiguration.systemPackages or [] }}
additionalBuildSteps: ${{ parameters.advancedConfiguration.additionalBuildSteps or [] }}
buildRegistry: ${{ parameters.publishAndBuild.buildRegistry === 'Custom Registry' and parameters.publishAndBuild.customRegistryUrl or parameters.publishAndBuild.buildRegistry or '' }}
buildImageName: ${{ parameters.publishAndBuild.buildImageName or '' }}
buildImageTag: ${{ parameters.publishAndBuild.buildImageTag or '' }}
registryTlsVerify: ${{ parameters.publishAndBuild.registryTlsVerify }}
sourceControlProvider: ${{ parameters.sourceControlProvider }}
repositoryOwner: ${{ parameters.repositoryOwner }}
repositoryName: ${{ parameters.repositoryName }}
- id: prepare-publish
action: ansible:prepare:publish
name: Prepare for publishing
if: ${{ parameters.publishToSCM }}
input:
sourceControlProvider: ${{ parameters.sourceControlProvider }}
repositoryOwner: ${{ parameters.repositoryOwner }}
repositoryName: ${{ parameters.repositoryName }}
createNewRepository: ${{ parameters.createNewRepository }}
eeFileName: ${{ parameters.eeFileName }}
contextDirName: ${{ steps['create-ee-definition'].output.contextDirName }}
- id: create-catalog-info-file
action: catalog:write
if: ${{ parameters.publishToSCM }}
name: Create catalog component file for the EE Definition
input:
filePath: ${{ steps['create-ee-definition'].output.catalogInfoPath }}
entity:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: ${{ parameters.eeFileName }}
description: ${{ parameters.templateDescription }}
tags: ${{ parameters.tags or [] }}
annotations:
backstage.io/techdocs-ref: dir:.
backstage.io/managed-by-location: ${{ steps['prepare-publish'].output.generatedRepoUrl }}
ansible.io/scm-provider: ${{ parameters.sourceControlProvider }}
spec:
type: execution-environment
owner: ${{ steps['create-ee-definition'].output.owner }}
lifecycle: production
- id: publish-github
name: Create and publish to a new GitHub Repository
action: publish:github
if: ${{ (parameters.publishToSCM) and (steps['prepare-publish'].output.createNewRepo) and (parameters.sourceControlProvider == 'Github') }}
input:
description: ${{ parameters.templateDescription }}
repoUrl: ${{ steps['prepare-publish'].output.generatedRepoUrl }}
defaultBranch: 'main'
repoVisibility: 'public'
- id: publish-github-pull-request
name: Publish generated files as a Github Pull Request
action: publish:github:pull-request
if: ${{ parameters.publishToSCM and (not steps['prepare-publish'].output.createNewRepo) and (parameters.sourceControlProvider == 'Github') }}
input:
repoUrl: ${{ steps['prepare-publish'].output.generatedRepoUrl }}
branchName: ${{ steps['prepare-publish'].output.generatedBranchName }}
title: ${{ steps['prepare-publish'].output.generatedTitle }}
description: ${{ steps['prepare-publish'].output.generatedDescription }}
- id: register-catalog-component
name: Register published EE as a Catalog Component
action: catalog:register
if: ${{ parameters.publishToSCM }}
input:
catalogInfoUrl: ${{ steps['prepare-publish'].output.generatedCatalogInfoUrl }}
optional: true
Key fields
| Field | Purpose |
|---|---|
metadata.annotations.ansible.io/saved-template: 'true' |
Marks this as a user-saved template in the catalog. |
metadata.annotations.ansible.io/download-experience: 'true' |
Use instead of saved-template for download-only templates (teams build locally with ansible-builder). Changes the UI to show Download and Delete actions. |
collections[].source |
Specifies which automation hub repository to pull each collection from during builds. |
buildRegistry |
'Private Automation Hub (PAH)' or 'Custom Registry' (with customRegistryUrl). |
registryTlsVerify |
Set to false for registries with self-signed certificates. |
customBaseImage |
Pre-fill with your organization's internal base image URL when teams use private registries. |
All parameter default: values pre-populate the wizard form. Users can override any value at runtime.