Prokumaの雑記

限りなく日記帳に近いブログ

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の送った状態です。