Closed yamamoto-febc closed 4 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},
},
},
},
},
},
},
},
実装プラン: まずData Sourceをlibsacloud v2対応させる。
この時、d.Set()
(dは*schema.ResourceData)を呼ぶ必要がある部分を通常のResourceと共通化している場合は一旦別funcにする。Resourceのv2対応後に再度共通化する。
サーバ周り:
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系を並列でメンテする方向とする。
開発はv-next
ブランチで行うこととする。
v-next
をmasterにマージするタイミングでv1
ブランチを作成し以降のv1系開発はそちらのブランチで行う。
Terraform v0.12対応時にv2.0.0-alpha.3
タグまでを利用済み。
このためv-nextでは以下のタグを用いる。
v2.0.0-alpha2.N
: alphaリリースv2.0.0-beta.N
: betaリリースv2.0.0-rc.N
: RCリリース以下の実装方針を追加する。
例としてブリッジの削除時の処理など。
これまではブリッジに接続されたスイッチがあれば切断処理
-> ブリッジを削除
という処理をしていたが、v-nextではブリッジの削除
のみ行う。
これは、Terraformが関知していないリソースについてはTerraformから操作しないことで意図しないリソースの削除などを抑制し、より安全な運用を目指すため。 子リソースがTerraformで管理されていれば依存関係はTerraformが解決してくれる分だけで十分なはずという前提の方針となっている。
これまでと比べると手作業で(Terraform外で)リソースを追加していた場合などにterraform destroy
時のエラーが増えることになるが許容する。
Note: ブリッジの例ではスイッチの側で自身がブリッジに接続されているか判定->切断を行う。
テスト:
AcceptanceTestを改良する。
リリースプロセス:
現在のリリースbotは複数バージョンに対応していない(sem ver上の最終バージョンのみ対象)。 リリースプロセスの見直しが必要。
~ディスクの修正関連パラメータのリソース分離:~
~現在はサーバに持っているディスクの修正関連パラメータを独立したリソースにしたい。~ ~ディスクIDを属性として持たせることでライフサイクル管理はクリアできそう。~ ~ただし、サーバリソース作成後にディスクの修正を行う必要があるケースで問題がないか検証が必要。~
独立したリソースとした場合、サーバリソースのライフサイクルとズレが発生する可能性が出る。このためこの対応は却下する。
ドキュメントにして変更をissue/prとして管理する。