sacloud / terraform-provider-sakuracloud

Terraform provider for SakuraCloud
https://docs.usacloud.jp/terraform
Apache License 2.0
71 stars 22 forks source link

Disk情報, IPアドレスが変更されない #179

Closed Masatoshi-Kouda closed 6 years ago

Masatoshi-Kouda commented 7 years ago

事象

さくらクラウドパブリックアーカイブ(ubuntu)を元にPackerでアーカイブ作成後、 Terraformで対象のアーカイブIDを指定し実行したところ、ディスクで定義した内容や OS側ethのIPアドレスが変更されない状況が発生しました。

パブリックアーカイブ(ubuntu)を指定した場合は正常に変更される。

カスタマイズしたアーカイブからサーバ作成する場合、下記ドキュメントの注2に記載されている ようにOSによっては変更できないのでしょうか?

https://sacloud.github.io/terraform-provider-sakuracloud/configuration/resources/disk/

対処方法あれば教えて頂ければ幸いでございます :bow:

バージョン情報

Terraform

Packer

さくらクラウド パブリックアーカイブ

利用したファイルの内容

Packer

{
  "builders": [{
    "type": "sakuracloud",
    "zone": "is1b",
    "os_type": "ubuntu",
    "user_name": "ubuntu",
    "password": "password",
    "core" : 2,
    "memory_size": 4
  }],
  "provisioners":[
  {
    "type": "shell",
    "execute_command": "echo 'password' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'",
    "inline": [
      "apt-get update -y",
      "echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/ubuntu",
      "chmod 0440 /etc/sudoers.d/ubuntu"
    ]
  }]
}

Terraform

sakuracloud_disksource_archive_idは上記のPackerで払い出されたIDを指定

##################################
# Provider
##################################
# 対象ゾーンを指定
provider sakuracloud {
  zone = "is1b"
}

##################################
# SSH KEY
##################################
# 公開鍵(さくらのクラウド上で生成)
resource "sakuracloud_ssh_key_gen" "key" {
  name = "foobar"

  provisioner "local-exec" {
    command = "echo \"${self.private_key}\" > id_rsa; chmod 0600 id_rsa"
  }

  provisioner "local-exec" {
    when    = "destroy"
    command = "rm -f id_rsa"
  }
}

##################################
# Startup Script
##################################
resource "sakuracloud_note" "startup-script" {
  name = "startup-script"
  content = <<EOF
#!/bin/bash
echo "127.0.0.1    $(hostname)" >> /etc/hosts
EOF
}

##################################
# DISK
##################################
# サーバーの管理者パスワードの定義
variable "password" {
  default = "password"
}

# ディスク定義
resource "sakuracloud_disk" "disk01" {
  name              = "disk01"
  source_archive_id = "112901177228"
  ssh_key_ids       = ["${sakuracloud_ssh_key_gen.key.id}"]
  password          = "${var.password}"
  disable_pw_auth   = true
  note_ids          = ["${sakuracloud_note.startup-script.id}"]
  hostname          = "server01"
}

##################################
# SERVER
##################################
# サーバー定義
resource "sakuracloud_server" "server01" {
  name  = "server01"
  disks = ["${sakuracloud_disk.disk01.id}"]
}

##################################
# OUTPUT
##################################
# サーバへのSSH接続を表示するアウトプット定義
output "ssh_to_server" {
  value = "ssh -i id_rsa ubuntu@${sakuracloud_server.server01.ipaddress}"
}
yamamoto-febc commented 7 years ago

ご連絡ありがとうございます!! こちら、再現確認しました。

原因はTerraform for さくらのクラウド側でのディスクの修正可否判定にあります。
以下のようにディスクの修正可否の判定を行い、修正不可であれば処理を行わないようになっています。

ディスク修正可否の判定

サーバ/ディスクの作成/更新時、以下のルールでディスクの修正が行えるか判定しています。

今回はpackerで作成されたものであるため、ディスク -> ソースアーカイブと辿った時点で、

該当箇所のソース:
https://github.com/sacloud/libsacloud/blob/49f63d464c6a9a1598dd5aac41d18b3e043f2a2b/api/disk.go#L236-L277

暫定対応として、以下のワークアラウンドにて回避可能です。

ワークアラウンド

packerで作成したアーカイブにos-linuxまたはos-unixタグを付与してください。 packerでアーカイブ作成時に付与する場合は以下のようにJSON内でarchive_tagsを指定することで付与可能です。

{
  "builders": [{
    "type": "sakuracloud",
    "zone": "is1b",
    "os_type": "ubuntu",
    "user_name": "ubuntu",
    "password": "password",
    "core" : 2,
    "memory_size": 4,
    "archive_tags": ["os-linux","@size-extendable"]
  }],
  "provisioners":[
  {
    "type": "shell",
    "execute_command": "echo 'password' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'",
    "inline": [
      "apt-get update -y",
      "echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/ubuntu",
      "chmod 0440 /etc/sudoers.d/ubuntu"
    ]
  }]
}

根本対応

packer側にて、ディスクの修正が可能なアーカイブ/ディスクから作成された場合に、os-linux or os-unixタグを自動的に付与するようにします。

Masatoshi-Kouda commented 7 years ago

@yamamoto-febc ディスク修正可否の判定について詳細に解説頂きありがとうございます!

教えて頂きましたpackerアーカイブ作成時にarchive_tagsos-linuxを指定することで、 terraform側で設定したDISKの修正項目が正常に反映されることが確認できました!

大変助かりました、ありがとうございます!!

yamamoto-febc commented 7 years ago

@Masatoshi-Kouda ,

動作したようでよかったです!! 当Issueは sacloud/packer-builder-sakuracloud#13の対応を行うまでOpenのままにしておきます。

Packer for さくらのクラウド側の対応が行われるまでarchive_tagsを利用する方法での回避をお願いいたします。

yamamoto-febc commented 6 years ago

Packer for さくらのクラウド側にて対応を行ったためクローズします。