Фон
У меня есть два облачных проекта Google: [project1] и [project2]. [project1] имеет экземпляр виртуальной машины с именем my-vm
. Я хочу скопировать my-vm
в [проект2].
Шаги, которые я сделал
Итак, я создал этот файл терраформа (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
команду agian, и она имела успех. Создан 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]). Можно ли дублировать виртуальный диск вместо виртуального образа?