I want to set database name in source.yml file dynamically in DBT
Currently, I am executing it via AzureADO
current source file is
version: 2
sources:
- name: source
database: db1
I want to make this database name dynamic.
I tried using target but since it use profile.yml which is statis in repository, its not possible
I tried using env variables as well
- script: |
echo "##vso[task.setvariable variable=database_name]PREPROD"
displayName: 'Set DB Variables'
version: 2
sources:
- name: src_1
database: "{{ env_var('database_name') }}"
but gets error as Env var required but not provided
3
You can use the Replace Tokens task to replace the database name in source.yml
file dynamically.
Use the Token pattern #{database_name}#
in source.yml
:
version: 2
sources:
- name: source
database: #{database_name}#
Set the variable in the pipeline variables section:
variables:
- name: database_name
value: testname
steps:
- task: replacetokens@6
inputs:
root: '$(System.DefaultWorkingDirectory)/your file folder'
sources: 'source.yml'
Or set the variable in a script in the pipeline:
steps:
- script: |
echo "##vso[task.setvariable variable=database_name]testname"
displayName: 'Set DB Variables'
- task: replacetokens@6
inputs:
root: '$(System.DefaultWorkingDirectory)/your file folder'
sources: 'source.yml'
It will replace the #{database_name}#
with the variable you set in the pipeline.
You can also use the parameters in the pipeline. When the pipeline runs, you can select the database_name
.
Sample pipeline yaml:
parameters:
- name: database_name
values:
- database_name1
- database_name2
- database_name3
default: database_name1
variables:
- name: database_name
value: ${{ parameters.database_name }}
steps:
- task: replacetokens@6
inputs:
root: '$(System.DefaultWorkingDirectory)/your file folder'
sources: 'source.yml'