経緯
ファイルサーバのディスク容量が切迫した時にアラートを通知する仕組みが必要になった。
社内環境であり、通知されて見る可能性があるのが
- メール
- Redmine
だけだった。
メール通知は社内のハードルが高かったのと、Redmineがrest apiでチケット発行できて
簡単だったのでRedmineに通知する方式を採用。
タイトルと説明だけ変えられるようにしていてそれ以外は固定。
コード
Param(
[String]$title = "タイトル",
[String]$desc = "説明",
[String]$logFilePath = ".\Redminerest.log"
)
$postUri = "http://[Redmineurl]/issues.json"
# JSONパラメータ内容改修
$issue = @{
project_id = "1"; # プロジェクトID
tracker_id = "22"; # トラッカーID
subject = $title; # タイトル
assigned_to_id = "333"; # 担当者 ユーザID or グループID
description = $desc.Replace("\r\n","`n") # 説明
}
$issueJson = @{issue = $issue; key = "アクセスキー"}
# 書き換えたパラメータをjson形式に戻す
$postText = ConvertTo-Json $issueJson
#body部(json)変換
$postBody = [Text.Encoding]::UTF8.GetBytes($postText)
#Rest実行
$Redmine = Invoke-RestMethod -Method POST -Uri $postUri -Body $postBody -ContentType application/json
echo " 発行されたRedmineのid:" + $Redmine.issue.id >> $logFilePath
注意点
-
各ID取得方法
Redmineから一覧を取得して使用するIDを探す
ID URL プロジェクトID http://[Redmineurl]/projects.xml トラッカーID http://[Redmineurl]/trackers.xml ユーザID http://[Redmineurl]/users.xml グループID http://[Redmineurl]/groups.xml ※ 対象が多すぎると途中で切られる。取得する必要がある場合はパラメータを付ける。
-
例) ユーザID200件
http://[Redmineurl]/users.xml?limit=200
-
-
アクセスキーの取得方法
- 個人設定画面を開く
- 右側のサイドバー内「APIアクセスキー」欄の「表示」をクリック
-
APIを有効にする方法
- [管理]→[設定]画面の[API]タブ
(Redmine 3.1以前の場合は[認証]タブ)を開く - [RESTによるWebサービスを有効にする]をONにする
- [保存]ボタンをクリックして設定内容保存
- [管理]→[設定]画面の[API]タブ
ひっかかったこと
-
assigned_to_idについて
ユーザidをassigned_to_idに入れて実行すると
そのユーザが担当者に指定されたチケットが発行されることが確認できた。
では、グループを指定したい場合はどのキーに指定すればよいのかと疑問に思い
調査してもいまいち回答にたどり着けずにとりあえず試した結果
assigned_to_idに入れるのが正解だった。
ユーザidとグループidは通しの連番が設定される模様。