Я пытаюсь использовать задачу FileTransform для изменения значений шаблонов grafana json. И он работает для изменения значений некоторых ключей следующим образом:
- 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"
}
@Javi Hernandez Привет, я обновил свой ответ на первый вопрос. Пожалуйста, проверьте, может ли это помочь вам. Я попробовал задачу «Заменить токен» на своей стороне, и она работает хорошо. Есть ли 0 tokens replaced out of 0
в журнале выполнения этой задачи? Или он правильно показывает количество строк, которые должны быть заменены, но фактически не заменены в результате?
Здравствуйте, спасибо за ваш ответ. В первом вопросе, который вы зададите, после замены ключи в файле A.json и B.json будут иметь одинаковое значение. Есть ли способ использовать File Transform для присвоения A.json и B.json разных значений одинаковым ключам? Я пробовал заменить токены так, как вы упомянули, но шаблон в grafana не работает, даже если он имеет правильные значения. У меня работает только с File Transform