I keep catching myself mindlessly copying and reusing parts of yaml files. Now I have several files with partially identical sections, such as the following, which is found in more than 15 files in a project, and copy pasted.
parameters:
- name: stage
type: string
default: 'dev'
values:
- 'dev'
- 'prelive'
- 'live'
- name: environment
type: string
default: ‘eu’
values:
- ‘na’
- ‘eu’
- ‘me’
variables:
- name: Subscription
${{ if and(eq(parameters.stage, 'dev') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Dev
${{ if and(eq(parameters.stage, 'prelive') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Qa
${{ if and(eq(parameters.stage, 'live') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Live
${{ if and(eq(parameters.stage, 'prelive') , eq(parameters.environment, ‘na’)) }}:
value: APP NA-Preprod
${{ if and(eq(parameters.stage, 'live') , eq(parameters.environment, ‘na’)) }}:
value: APP NA-Prod
The above section is found unchanged in several files. Is there a way to avoid this and somehow centralize it?
You should be able to do something like:
reusable-template-param.yml:
parameters:
- name: stage
type: string
default: 'dev'
values:
- 'dev'
- 'prelive'
- 'live'
- name: environment
type: string
default: ‘eu’
values:
- ‘na’
- ‘eu’
- ‘me’
variables:
- name: Subscription
${{ if and(eq(parameters.stage, 'dev') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Dev
${{ if and(eq(parameters.stage, 'prelive') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Qa
${{ if and(eq(parameters.stage, 'live') , eq(parameters.environment, ‘eu’)) }}:
value: APP EU-Live
${{ if and(eq(parameters.stage, 'prelive') , eq(parameters.environment, ‘na’)) }}:
value: APP NA-Preprod
${{ if and(eq(parameters.stage, 'live') , eq(parameters.environment, ‘na’)) }}:
value: APP NA-Prod
concrete-azure-pipeline:
trigger:
- main
extends:
template: reusable-template-param.yml
You can refer to the documentation on this feature for more detail here.