Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
terraform导入:如何避免在自动脚本中重新导入时出错_Terraform_Terraform Provider Gcp - Fatal编程技术网

terraform导入:如何避免在自动脚本中重新导入时出错

terraform导入:如何避免在自动脚本中重新导入时出错,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,目标: 在gcp控制台中永久保留一个静态ip(永久):例如“ip-drupal-1” 在terraform子模块中,“/module_drupal”使用“ip-drupal-1” 调用“terraform destroy”时,ip-drupal-1必须保留在gcp中。如果静态ip被破坏,这将生成另一个新的,我必须更新DNS记录 以下程序没有达到这一目标。有没有任何示例代码 我添加了一个“terraform import-var file=“main.tfvars”google\u compute

目标:

  • 在gcp控制台中永久保留一个静态ip(永久):例如“ip-drupal-1”
  • 在terraform子模块中,“/module_drupal”使用“ip-drupal-1”
  • 调用“terraform destroy”时,ip-drupal-1必须保留在gcp中。如果静态ip被破坏,这将生成另一个新的,我必须更新DNS记录
  • 以下程序没有达到这一目标。有没有任何示例代码

    我添加了一个“terraform import-var file=“main.tfvars”google\u compute\u address.ip-drupal-1ip-drupal-1”

    所以每次我调用shell脚本时,它都会导入静态ip

    如何避免此错误:“要导入到此地址,必须先删除…”


    为了具体解决这个问题,可以在导入之前添加一个
    地形状态rm
    ,后跟对象id

    有关地形状态rm的信息,请参阅


    取决于您如何处理可能工作的自动化。

    以下是我最后要做的

  • 在infra-update.sh中,我在导入之前添加了“地形状态rm”
  • infra-createorupdate.sh

    terraforminit
    地形状态列表
    静态_IP_NAME=“IP基础”
    地形状态rm“谷歌计算地址${STATIC\u IP\u NAME}”
    terraform导入-var file=“main.tfvars”谷歌计算地址。${STATIC\u IP\u NAME}${STATIC\u IP\u NAME}
    阅读-s-n 1-p“按任意键继续…”
    地形平面图-var file=“main.tfvars”-out plan.out
    #echo-ne'\007'
    阅读-s-n 1-p“按任意键应用..按Ctrl C中止”
    回声“”
    地形应用平面图
    #echo-ne'\007'
    
    然后在我的根main.tf中,我将地址定义为prevent\u destroy=true

    main.tf

    
    resource "google_compute_address" "ip-base" { # see terraform import in deploy.sh
      name = "ip-base"
      lifecycle {
        prevent_destroy = true #DO NOT DELETE STATIC-IP
      }
    }
    
    
    # Call vm_micro
    module "vm-base" {
      source = "./_module-vm-micro"
      vm_instance_name = "base"
      custom_static_ip = google_compute_address.ip-base.address 
    
      #from predefined
      #CPU/RAM
      vm_size = var.org_micro
      #where
      deploy_env = var.deploy_env
      zone  = var.zone
      #disk
      boot_image = var.disk_image_coscloud
      disk_type = var.disk_hdd
      disk_size = var.disk_20_gb
      #login
      login_key_file = var.ssh_pubkey_file
      login_user = var.ssh_username
    }
    
    另一种选择:

    也许我也可以省钱,不使用静态ip。相反,在boot-startupscript.sh中,我可以进行动态DNS api调用,将动态api更新为DNS。我必须对此进行实验,希望有一些示例代码


    为什么要重复导入同一资源?这无助于实现我的目标。编辑我的问题以进一步澄清。好的,您可以分享您当前的顺序吗?似乎您应该能够通过从状态文件中删除资源,然后销毁,然后再将其添加回来来实现您想要的。我们实现这一点的方法是在不同的目录中隔离IP地址管理。您将在单独的tf中创建一次,然后让您的模块每次引用该资源,并且不再接触它。