sacloud / terraform-provider-sakuracloud

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

v-next #480

Closed yamamoto-febc closed 4 years ago

yamamoto-febc commented 5 years ago
yamamoto-febc commented 5 years ago

Data SourceでのFilter周り:

現在は以下のようなスキーマとなっている。

    "name_selectors": {
        Type:     schema.TypeList,
        Optional: true,
        ForceNew: true,
        Elem:     &schema.Schema{Type: schema.TypeString},
    },
    "tag_selectors": {
        Type:     schema.TypeList,
        Optional: true,
        ForceNew: true,
        Elem:     &schema.Schema{Type: schema.TypeString},
    },
    "filter": {
        Type:     schema.TypeSet,
        Optional: true,
        ForceNew: true,
        Elem: &schema.Resource{
            Schema: map[string]*schema.Schema{
                "name": {
                            Type:     schema.TypeString,
                    Required: true,
                },
                "values": {
                    Type:     schema.TypeList,
                    Required: true,
                    Elem:     &schema.Schema{Type: schema.TypeString},
                },
            },
        },
    },

これを以下のように一つの属性にまとめたい。

// Note: 検討中
    "filters": {
        Type:     schema.TypeList,
        Optional: true,
        ForceNew: true,
        MaxItems: 1,
        MinItems: 1,
        Elem: &schema.Resource{
            Schema: map[string]*schema.Schema{
                "id": {
                    Type:     schema.TypeString,
                    Optional: true,
                },
                "names": {
                    Type:     schema.TypeList,
                    Optional: true,
                },
                "tags": {
                    Type:     schema.TypeList,
                    Optional: true,
                },
                "conditions": {
                    Type:     schema.TypeList,
                    Optional: true,
                    Elem: &schema.Resource{
                        Schema: map[string]*schema.Schema{
                            "key": {
                                Type:     schema.TypeString,
                                Required: true,
                            },
                            "values": {
                                Type:     schema.TypeList,
                                Required: true,
                                Elem:     &schema.Schema{Type: schema.TypeString},
                            },
                        },
                    },
                },
            },
        },
    },
yamamoto-febc commented 5 years ago

実装プラン: まずData Sourceをlibsacloud v2対応させる。 この時、d.Set()(dは*schema.ResourceData)を呼ぶ必要がある部分を通常のResourceと共通化している場合は一旦別funcにする。Resourceのv2対応後に再度共通化する。

yamamoto-febc commented 5 years ago

サーバ周り:

NIC関連の定義をまとめたい。

# 現行: 最初のNICを特別扱いするために別項目となっている
resource sakuracloud_server "example" {
  nic               = "${sakuracloud_switch.sw.0.id}"
  display_ipaddress = "192.2.0.1"

  additional_nics                = ["${sakuracloud_switch.sw.1.id}", "${sakuracloud_switch.sw.2.id}"]
  additional_display_ipaddresses = ["192.2.1.1", "192.2.2.1"]

  packet_filter_ids = ["${sakuracloud_packet_filter.foobar1.id}"]
}
# To-Be: NIC関連をまとめる
resource sakuracloud_server "switched" {
  # NIC1(共有セグメント)
  nic {
    switch_id        = "shared"
    packet_filter_id = sakuracloud_packet_filter.example.id
  }

  # NIC2(スイッチに接続)
  nic {
    switch_id         = sakuracloud_switch.example.id
    display_ipaddress = "192.0.2.1"
    packet_filter_id  = sakuracloud_packet_filter.example2.id
  }

  # NIC3(切断状態)
  nic {}
  # または
  nic {
    switch_id = "disconnected"
  }

}

影響の大きいbreaking-changeとなるためv-nextはメジャーバージョンアップ(v2系)とする。 また、後方互換性を保つのは困難なため、v1系/v2系を並列でメンテする方向とする。

yamamoto-febc commented 5 years ago

開発はv-nextブランチで行うこととする。

v-nextをmasterにマージするタイミングでv1ブランチを作成し以降のv1系開発はそちらのブランチで行う。

yamamoto-febc commented 5 years ago

Terraform v0.12対応時にv2.0.0-alpha.3タグまでを利用済み。 このためv-nextでは以下のタグを用いる。

yamamoto-febc commented 5 years ago

以下の実装方針を追加する。

例としてブリッジの削除時の処理など。

これまではブリッジに接続されたスイッチがあれば切断処理 -> ブリッジを削除という処理をしていたが、v-nextではブリッジの削除のみ行う。

これは、Terraformが関知していないリソースについてはTerraformから操作しないことで意図しないリソースの削除などを抑制し、より安全な運用を目指すため。 子リソースがTerraformで管理されていれば依存関係はTerraformが解決してくれる分だけで十分なはずという前提の方針となっている。

これまでと比べると手作業で(Terraform外で)リソースを追加していた場合などにterraform destroy時のエラーが増えることになるが許容する。

Note: ブリッジの例ではスイッチの側で自身がブリッジに接続されているか判定->切断を行う。

yamamoto-febc commented 5 years ago

テスト:

AcceptanceTestを改良する。

yamamoto-febc commented 5 years ago

リリースプロセス:

現在のリリースbotは複数バージョンに対応していない(sem ver上の最終バージョンのみ対象)。 リリースプロセスの見直しが必要。

yamamoto-febc commented 5 years ago

~ディスクの修正関連パラメータのリソース分離:~

~現在はサーバに持っているディスクの修正関連パラメータを独立したリソースにしたい。~ ~ディスクIDを属性として持たせることでライフサイクル管理はクリアできそう。~ ~ただし、サーバリソース作成後にディスクの修正を行う必要があるケースで問題がないか検証が必要。~

独立したリソースとした場合、サーバリソースのライフサイクルとズレが発生する可能性が出る。このためこの対応は却下する。

yamamoto-febc commented 5 years ago

ドキュメントにして変更をissue/prとして管理する。

yamamoto-febc commented 4 years ago

531 によりクローズ