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

Expand
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.
Note

All parameter default: values pre-populate the wizard form. Users can override any value at runtime.