moved block
리팩토링 할때 꼭 필요한 기능이다.
기존에 있는코드를 모듈로 보내보자.
현재 디렉토리 구조

main.tf
module "instance_nonflex" {
source = "oracle-terraform-modules/compute-instance/oci"
compartment_ocid = var.compartment_id
# compute instance parameters
ad_number = var.instance_ad_number
instance_count = var.instance_count
instance_display_name = var.instance_display_name
instance_state = var.instance_state
shape = var.shape
source_ocid = var.source_ocid
source_type = var.source_type
ssh_public_keys = var.ssh_public_keys
public_ip = var.public_ip
subnet_ocids = [local.private_subnet_id]
primary_vnic_nsg_ids = null
boot_volume_backup_policy = var.boot_volume_backup_policy
block_storage_sizes_in_gbs = var.block_storage_sizes_in_gbs
}terraform plan
terraform apply --auto-approve
terraform state listmodule.instance_nonflex.data.oci_identity_availability_domains.ad
module.instance_nonflex.oci_core_instance.instance[0]
module.instance_nonflex.oci_core_instance.instance[1]
module.instance_nonflex.oci_core_instance.instance[2]
module.instance_nonflex.oci_core_volume.volume[0]
module.instance_nonflex.oci_core_volume.volume[1]
module.instance_nonflex.oci_core_volume.volume[2]
module.instance_nonflex.oci_core_volume_attachment.volume_attachment[0]
module.instance_nonflex.oci_core_volume_attachment.volume_attachment[1]
module.instance_nonflex.oci_core_volume_attachment.volume_attachment[2]모듈로 바꿔보자
이제 모듈로 변경해본다.
폴더를 만들고 main.tf를 만들고 코드를 이동한다.

그리고 기존 main에서 이 모듈을 사용해보자.
module "instance" {
compartment_id = var.compartment_id
source = "./base/instance"
source_ocid = "ocid1.image.oc1.us-sanjose-1.ga5ohbkd3nwa"
instance_state = "RUNNING"
instance_count = 3
ssh_public_keys = var.ssh_public_keys
}terraform plan
9개를 삭제하고 다시 만든다. 이러면 문젝 된다. 실행중인 서버를 없애버리게 된다.
terraform state mv
terraform state mv module.instance_nonflex.oci_core_instance.instance[0] module.instance.oci_core_instance.instance[0]이걸로 가능하시도 하다.
moved block
사실 코드에 넣어야 좋기는 하다.
moved {
from = OLD
to = NEW
}이걸 추가하였다.
moved {
from = module.instance_nonflex.oci_core_instance.instance
to = module.instance.module.instance_nonflex.oci_core_instance.instance
}
moved {
from = module.instance_nonflex.oci_core_volume.volume
to = module.instance.module.instance_nonflex.oci_core_volume.volume
}
moved {
from = module.instance_nonflex.oci_core_volume_attachment.volume_attachment
to = module.instance.module.instance_nonflex.oci_core_volume_attachment.volume_attachment
}terraform plan
0개가 바귀는것을 알수 있다.
terraform apply --auto-approve
terraform state listremote module
리모트 모듈에서는 block이 안된다. 꼭 확인해야한다.
terraform state mv #으로 처리해야한다.tfautomv
https://github.com/padok-team/tfautomv
자동으로 moved block을 만들어준다.
brew install padok-team/tap/tfautomv
tfautomvmoved 블락을 지우고 명령어를 실행해보자.

9개가 추가되고 9개가 삭제된다고한다. 예상하던 결과이다.
이제 명령어를 실행해보자.
tfautomv
moves.tf파일이 생성된다.

좋다.
todo
moved가 계속 잇어야하나?
terraform state mv로 처리해도 된다.
Last updated
Was this helpful?