Изменение файла Terraform с помощью hclwrite в golang - PullRequest
0 голосов
/ 26 апреля 2020

В дополнение к сообщению, которое я поместил Шаблон регулярного выражения, соответствующий коду модуля terraform , было предложено посмотреть на модуль hclwrite golang, если мы хотим выполнить хирургическую запись в файл terraform.

Я потратил некоторое время на изучение go и переписал скрипт python на go. Скрипт охватывает начальную часть, где он ищет файл со строкой 'module' в файле terraform. Поскольку функции hclwrite запрашивают байтовый массив, я также преобразовал содержимое файла в байтовый массив.

нам нужно захватить блок terraform, начиная с модуля, а затем записать его обратно с соответствующими элементами ресурса. Для этого я запрашиваю в словаре модуль и затем записываю ресурс обратно. Как мы делаем это с помощью hclwrite? Вот некоторые ссылки, которые я использовал: 1. Пример https://xuanwo.io/2020/04/13/get-started-with-hcl2/ 2. Пакет для синтаксиса hcl https://godoc.org/github.com/hashicorp/terraform/vendor/github.com/hashicorp/hcl/v2/hclsyntax#ParseConfig

Изменение

module mymodule {

}
To resource resource_name {
}

Код, который я написал до сих пор в go

func main() {
    var text string = "module"
    var dirpath = "<path to the files>/*.tf"
    //Get the terraform files in the directory and select files with string 'module'
    matches, _ := filepath.Glob(dirpath)
    for _, match := range matches {
        if IsExist(text, match) {
            fmt.Println(match)
            var chunk []byte

            file, err := os.Open(match)
            if err != nil {
                panic(err.Error())
            }
            defer file.Close()
            reader := bufio.NewReader(file)
            buffer := bytes.NewBuffer(make([]byte, 0))
            // var chunk []byte
            var eol bool
            var str_array []string
            for {
                if chunk, eol, err = reader.ReadLine(); err != nil {
                    break
                }
                buffer.Write(chunk)
                if !eol {
                    str_array = append(str_array, buffer.String())
                    buffer.Reset()
                }
            }

            if err == io.EOF {
                err = nil
            }

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...