はじめに
ユーザー登録を画面でポチポチしたくなかったのでツールを探したのですが、初期登録をイメージしているのか、「ユーザー登録時にユーザーへメール通知」が出来るツールが見当たらなかった※ため、自作することにしました。
※正確に書くと「Python」製は見つけたんですが、今の現場では利用できないので諦めました。
前提条件
環境
jsonファイルに加工するために「 jq 」を利用しています。
なおjq自体のインストールは色々な方が紹介しているので割愛とします。
- CentOS Linux release 7.8.2003 (Core)
- 3.4.11.stable
- jq-1.6
実装
CSVファイル
# cat test.csv
login,password,lastname,firstname,mail,must_change_passwd,send_informatio
regTest01,password,姓,名,regTest01@example.com,true,true
「"(ダブルクォーテーション)」は利用しません。
利用する必要が場合は、後述するjson加工時に「-r」オプションを利用する等でいい感じにしてください。
マッピングファイル
# cat mapping.jq
split("\n")|map(split(","))|
map({"user":{"login":.[0],
"password":.[1],
"lastname":.[2],
"firstname":.[3],
"mail":.[4],
"must_change_passwd":.[5]
},
"send_information":.[6]
})
「send_information」にtrueを設定することで、メールで登録情報が通知されます。
シェル
# cat register.sh
#!bin/bash
## define
key=xxxx # adminのAPIキー
redmine_url=http://xxx.xxx.xxx.xxx/ # redmineのURL
regist_path=users.json
## main
cat test.csv | while read line
do
echo ${line} | jq -R -f mapping.jq | jq . -c | sed -e 's/\[//g' -e 's/\]//g' > registUser.json
curl -v ${redmine_url}${regist_path}?key=${key} --header 'Content-type: application/json' --data @registUser.json
# APIキーではなくログイン情報でも登録可能
# curl -v ${redmine_url}${regist_path} --user admin:password --header 'Content-type: application/json' --data @registUser.json
done
読み込んだcsvを1行ずつjsonデータに加工し、一時ファイルとして出力。
そのファイルをRedmine REST APIに渡して登録します。
json加工時の「sed」は、加工したデータの先頭と末尾に「[」「]」が付与されてしまっていたので、除外しています。
参考
-
jqコマンドでCSVをJSONに変換してElasticSearchに登録する
https://qiita.com/mj69/items/80a3a18210a4fa28ff44 -
Redmine REST API:Users
https://www.redmine.org/projects/redmine/wiki/Rest_Users#POST -
Redmineワンポイントチェック(9): REST APIを使ってユーザーを一括登録する
http://blog.redmine.jp/articles/opc/user-rest-api/