terraform-provider-datadogのuserでaccess_roleを使う方法
ぷろくまです。試験が終わり、春休みになりました。今日はちょっとまともな記事を書こうと思っています。
1. TerraformとDatadog
Terraformは、コードでリソースの管理ができるツールです。AWS, AzureなどのAPIを使い、リソースの生成や削除をより楽にできるようにする便利なツールです。下記に紹介するDatadogもリソースとしてTerraformで管理することができます。現在、数多くのサービスに対応しています。Terraform Providersに上がっているPlug-Inを用いることによって使用可能になれます。UCloudなどが上がってることを見てちょっと驚きました。
Datadogは、サーバーなどのリソースからログを取り、そのリソースの状況がWebで見れるようにしてくれるサービスです。無料版も提供されていますが、実際企業で使うなら無料版では足りないでしょう。TerraformではDatadogをリソースとして扱う機能をPlug-Inとして提供しています。
2. 今Terraformでできないこと
DatadogはユーザーのアクセスロールをStandard User, Admin User, Read-Only Userとして分類していますが、この前にはAdminとAdminでないとユーザーだけが存在してたらしいです。DatadogのAPIはこれを反映していますが、Terraformは対応していません。過去のユーザー分類はis_adminを使い、今のユーザー分類はaccess_roleを使います。Terraformはこのaccess_roleに対応していません。
3. できないから解決したい!
このコードを見ればわかりますが、access_roleさえ定義されていません。このコードで使っているDatadogのAPIのソースコードでは、access_roleに対応していることを確認しました。結局思いついた解決方法は、
access_roleだけ追加すればいいのでは
その通りやってみました。
Deprecated: "This parameter will be replaced by `access_role` and will be removed from the next Major version", }, //この部分を追加 "access_role": { Type: schema.TypeString, Optional: true, Required: false, }, // "name": { Type: schema.TypeString, Required: true,
d.Set("is_admin", u.GetIsAdmin()) d.Set("name", u.GetName()) d.Set("verified", u.GetVerified()) //この部分を追加 d.Set("access_role", u.GetAccessRole())
u.SetHandle(d.Id()) u.SetIsAdmin(d.Get("is_admin").(bool)) u.SetName(d.Get("name").(string)) //この部分を追加 u.SetAccessRole(d.Get("access_role").(string))
やってみた結果は問題なく成功。今はPull Requestの送った状態です。