|
|
|
|
Импортирование ресурсов в terraform позволяет привести в соответствие состояние terraform (.tfstate) к состоянию ресурса в платформе.
|
|
|
|
|
Необходимость такого приведения возникает в нескольких случаях:
|
|
|
|
|
- Ресурс был создан через портал платформы, работа продолжается через terraform провайдер,
|
|
|
|
|
- Ресурс был создан через terraform провайдер, однако был изменен через портал платформы,
|
|
|
|
|
- Ресурс был создан через terraform провайдер, однако был изменен другим пользователем через terraform провайдер,
|
|
|
|
|
- И так далее
|
|
|
|
|
|
|
|
|
|
Такие расхождения в состоянии ресурсов нередки, путей их решения несколько:
|
|
|
|
|
- Использовать импортирование ресурсов,
|
|
|
|
|
- Использовать общие файлы состояний ресурсов, к которым будут иметь доступ все участники, занятые в работе с платформой.
|
|
|
|
|
В текущем разделе рассматривается первый вариант.
|
|
|
|
|
|
|
|
|
|
## Импортирование ресурсов
|
|
|
|
|
Импортирование ресурсов позволяет совершить запрос к платформе, чтобы сформировать файл состояния.
|
|
|
|
|
Чтобы совершить импортирование ресурсов необходимо ввести сл. команду:
|
|
|
|
|
```bash
|
|
|
|
|
terraform import <resource-name>.<resource-variable> <resource-id>
|
|
|
|
|
```
|
|
|
|
|
## Пример
|
|
|
|
|
Предположим, что у нас ресурс, описывающий диск:
|
|
|
|
|
```terraform
|
|
|
|
|
resource "dynamix_disk" "disk" {
|
|
|
|
|
account_id = 121212
|
|
|
|
|
gid = 3333
|
|
|
|
|
disk_name = "mySuperDisk"
|
|
|
|
|
size_max = 100500
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
Если запустить команду:
|
|
|
|
|
```bash
|
|
|
|
|
terraform apply
|
|
|
|
|
```
|
|
|
|
|
То у нас будет создан новый диск.
|
|
|
|
|
Но, такой диск уже есть на площадке и мы хотели бы сформировать .tfstate для этого ресурса.
|
|
|
|
|
Поэтому, для начала, необходимо получить список дисков:
|
|
|
|
|
```terraform
|
|
|
|
|
data "dynamix_disk_list" "dl"{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
output "test" {
|
|
|
|
|
value = data.dynamix_disk_list.dl
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
В полученных данных необходимо найти требуемый диск, получить его id - параметр disk_id. Пусть это будет - 777777
|
|
|
|
|
Теперь можно выполнить импортирование:
|
|
|
|
|
```bash
|
|
|
|
|
terraform import dynamix_disk.disk 777777
|
|
|
|
|
```
|
|
|
|
|
Команда должна успешно завершиться, появиться файл состояний, который позволит манипулировать ресурсом.
|
|
|
|
|
|
|
|
|
|
## Ошибки при импортировании
|
|
|
|
|
При импортировании ресурса может возникнуть сл. ошибка:
|
|
|
|
|
```bash
|
|
|
|
|
Error: <field-name>: required field is not set
|
|
|
|
|
```
|
|
|
|
|
Где <field-name> - наименование поля.
|
|
|
|
|
Ошибка возникает в том случае, если в описании ресурса отсутствует обязательное поле.
|
|
|
|
|
Например:
|
|
|
|
|
```terraform
|
|
|
|
|
resource "dynamix_disk" "disk" {
|
|
|
|
|
account_id = 121212
|
|
|
|
|
gid = 3333
|
|
|
|
|
size_max = 100500
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
В приведенном выше описании отсутствует поле disk_name, поэтому, при попытке импортирования возникнет ошибка.
|
|
|
|
|
Для ее устранения, необходимо выполнить запрос на получение списка дисков, найти недостающее поле, после чего добавить его в описание ресурса.
|
|
|
|
|
После этого повторить попытку импортирования.
|
|
|
|
|
|
|
|
|
|
## Общий алгоритм устранения ошибок
|
|
|
|
|
1. Выполнить запрос импортирования
|
|
|
|
|
2. В случае ошибки - внести недостающие поля.
|
|
|
|
|
3. Повторить п.1.
|
|
|
|
|
|
|
|
|
|
|