我正在尝试使用任务FileTransform来修改grafana-json模板的值。它以以下方式修改somes密钥的值:
- task: FileTransform@2
displayName: "Transform Jsons"
inputs:
folderPath: 'metrics/dashboards/**/'
xmlTransformationRules: ''
jsonTargetFiles: '**/*.json'
并且已经用要替换的密钥声明了变量:
templating.list.0.query: $(azureClusterName)
templating.list.0.current.text: $(azureClusterName)
templating.list.0.current.value: $(azureClusterName)
templating.list.0.options.0.text: $(azureClusterName)
templating.list.0.options.0.value: $(azureClusterName)
如果在jsonTargetFiles中,我只声明一个文件,它可以完美地工作,但我想知道如何为具有相同键的文件分配不同的值。
我试过用";replaceTokens";,在jsons文件中有不同的变量名:
- task: replacetokens@3
displayName: 'Replace tokens'
inputs:
rootDirectory: 'metrics/dashboards'
targetFiles: '**/*.json'
encoding: 'auto'
verbosity: 'detailed'
actionOnMissing: 'fail'
tokenPrefix: '#{'
tokenSuffix: '}#'
但是有了替换令牌,grafana中的模板就不起作用了,即使它说值已经被正确替换了。
最佳
如何为具有相同键的文件分配不同的值。
您可以使用名为Magic Chunks 的扩展
这里有一个例子:
在transformations
中,使用{Node A}/{Node B}/...
查找要分配给的变量,并指定变量的值
- task: MagicChunks@2
inputs:
sourcePath: '{target json file path}'
fileType: 'Auto'
targetPathType: 'source'
transformationType: 'json'
transformations: |
{
"ConnectionStrings/DefaultConnection": "Data Source=10.0.0.5;Initial Catalog=Db1"
}
目标JSON文件:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=webapp"
}
}
输出JSON文件:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=10.0.0.5;Initial Catalog=Db1"
}
}
但是有了替换令牌,grafana中的模板就不起作用了,即使它说值已经被正确替换。
使用替换令牌任务的逻辑与使用文件转换任务的逻辑不同。在替换令牌任务中,需要将要替换的字符串放置在特定令牌中(在tokenPrefix
和tokenSuffix
中定义(。此外,在variables
中,需要将需要替换的字符串放在左侧,将用于替换的字符串放置在右侧。这里有一个例子:
variables:
enabled: disabled
- task: replacetokens@3
inputs:
targetFiles: 'A.json'
encoding: 'auto'
writeBOM: true
verbosity: 'detailed'
actionOnMissing: 'fail'
keepToken: false
tokenPrefix: '#{'
tokenSuffix: '}'
useLegacyPattern: false
enableTelemetry: true
目标JSON文件:
{
"B": "#{enabled}"
}
输出JSON文件:
{
"B": "disabled"
}