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-27/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 ofsaved-template for download-only templates (teams build locally withansible-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' (withcustomRegistryUrl).
registryTlsVerify Set tofalse 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.