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 list
module.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 list
remote module
리모트 모듈에서는 block이 안된다. 꼭 확인해야한다.
terraform state mv #으로 처리해야한다.
tfautomv
https://github.com/padok-team/tfautomv
자동으로 moved block을 만들어준다.
brew install padok-team/tap/tfautomv
tfautomv
moved 블락을 지우고 명령어를 실행해보자.

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

moves.tf파일이 생성된다.

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