Фон
У меня есть два облачных проекта Google: [project1] и [project2].[project1] имеет экземпляр виртуальной машины с именем my-vm
.Я хочу скопировать my-vm
в [project2].
Шаги, которые я сделал
Итак, я создал этот файл terraform (main.tf
):
provider "google" {
credentials = "${file("service-account.json")}"
project = "[project2]"
region = "us-central1"
}
сохраненоэто в новый каталог.Теперь выполните следующие команды:
$ terraform init
$ terraform import google_compute_instance.my-vm [project1]/us-central1-a/my-vm
Error: resource address "google_compute_instance.my-vm" does not exist in the configuration.
Before importing this resource, please create its configuration in the root module. For example:
resource "google_compute_instance" "my-vm" {
# (resource arguments)
}
В этот момент я понял, что пропустил оператор resource "google_compute_instance" "my-vm"
.Итак, я добавил его в main.tf
.Теперь это выглядит так:
provider "google" {
credentials = "${file("service-account.json")}"
project = "[project2]"
region = "us-central1"
}
resource "google_compute_instance" "my-vm" {
}
Теперь я запустил ту же команду terraform import
, и она прошла успешно.Файл terraform.tfstate
создан.НО, файл main.tf
не был изменен.Я ожидал увидеть в нем импортированные данные vm, но resource "google_compute_instance" "my-vm"
был пуст .Странно ...
Теперь я запустил команду plan
и получил это:
$terraform plan
Error: Insufficient network_interface blocks
on line 0:
(source code not available)
At least 1 "network_interface" blocks are required.
Error: Insufficient boot_disk blocks
on line 0:
(source code not available)
At least 1 "boot_disk" blocks are required.
Error: Missing required argument
on main.tf line 7, in resource "google_compute_instance" "my-vm":
7: resource "google_compute_instance" "my-vm" {
The argument "name" is required, but no definition was found.
Error: Missing required argument
on main.tf line 7, in resource "google_compute_instance" "my-vm":
7: resource "google_compute_instance" "my-vm" {
The argument "machine_type" is required, but no definition was found.
Вопросы:
- Почему после импорта ресурса яневозможно вызвать метод плана?
- Я видел несколько примеров копирования и развертывания с помощью terraform.Все эти примеры дублировали машину, основываясь на ее базовом изображении.Таким образом, если разработчик добавил некоторые изменения в экземпляр виртуальной машины, он не появится в дублированном ресурсе ([project2]).Возможно ли дублировать виртуальный диск вместо виртуального образа?