#parsing #terraform #hcl
Вопрос:
У нас есть требование редактировать .tf
файлы и предоставлять их обратно пользователю в одном из наших приложений. Язык нашего приложения-PHP, но мы можем использовать интерфейс командной строки для анализа файлов.
Подход, который мы применяем для выполнения этого требования, описан ниже:
Бери.файлы tf в качестве входных данных Анализируйте файлы .tf в формате JSON, чтобы приложение могло легко читать и редактировать JSON. Проанализируйте этот JSON обратно в файлы .tf и предоставьте его пользователю Теперь мы можем анализировать файлы .tf в JSON, используя эту замечательную библиотеку: https://github.com/alecthomas/hcl Но не удалось найти решение, которое может анализировать файлы JSON в .tf.
Мы попытались использовать приведенные ниже методы, но не достигли удовлетворения.
hclparse.NewParser().ParseJSONFile Этот метод возвращает hcl.File. Теперь мы не уверены, является ли hcl.Файл может быть преобразован в .tf эквивалентный код?
JsonParser.Разбор (JsonParser: github.com/hashicorp/hcl/json/parser) Мы получили эту ссылку от https://github.com/kvz/json2hcl. Да, мы знаем, что это работает только с HCL1, но попробовать не так уж плохо. Этот метод возвращает файл ast. Теперь мы не уверены, можно ли преобразовать файл ast в эквивалентный код .tf?
Для начальной разработки мы стараемся использовать самые простые outputs.tf файл, но наша цель состоит в том, чтобы редактировать гораздо более сложные и полноценные файлы terraform.
outputs.tf:
output "virtual_machine_id" {
value = azurerm_linux_virtual_machine.main.id
}
output "private_ip_address" {
value = azurerm_network_interface.main.private_ip_address
}
выходы.json (из alecthomas/hcl с небольшими изменениями, удалено ${} из выражения):
{
"output": {
"private_ip_address": [
{
"value": "azurerm_network_interface.main.private_ip_address"
}
],
"virtual_machine_id": [
{
"value": "azurerm_linux_virtual_machine.main.id"
}
]
}
}
Нам нужна помощь для достижения этой цели, поскольку мы новички в Голанге и не можем найти удовлетворительного решения.