SNIPE-ITに移行しだしているのですが、結局データを人が登録するところでミスったり登録もれがあるんだよなと思いながら運用をしていました。
Jamf Proを利用しているので、ABMに登録されてきたらSlackへ通知するというのを以前からやっていて
ぼーっとそれを眺めていたら、あれ?これをそのままSNIPE-ITに自動登録させてしまえばいいのでは?と思い実装してみることにしました。
目次
前提
- Jamf Proを利用している
- SNIPE-ITのAPIアクセスが外部から可能な状態となっている
- 今回はLambda環境を利用したので、Lambda環境があること
- Python3を利用する
Zapierでやろうと思ったのですが、分岐とかがつらくて結局Pythonを利用しました。
SNIPE-IT APIキーを作成する
- 資産、モデルの作成権限があるユーザーでSNIPE-ITへログインします。
- 右上の名前をクリックし、【APIキーの管理】をクリックします。
- 【Create New Token】をクリックします。
- Nameにわかりやすい名前を入力し、【Create】をクリックします。
- 表示されたアクセストークンをコピーし控えておきます。
Lambdaへ関数を作成する
以下の内容で、Lambda関数を作成します。
- 名前:ADE2SNIPE-IT
- Layerにrequestを追加
- Layerへの追加は、有志の方が作成されているこちらを利用させていただきました。 https://api.klayers.cloud//api/v2/p3.9/layers/latest/ap-northeast-1/html
- API Gatewayは利用せず、LambdaだけでHTTPを受けられる用に設定
ソースコードは以下から取得してください。
https://github.com/khikita/tools/blob/main/snipe-script/ADE2SNIPEIT/ade2snipeit.py
Lambdaの環境変数として、以下を登録してください。
- SNIPE_TOKEN
- SNIPE-ITで発行したAPIキーを設定
- SNIPE_URL
- SNIPE-ITのURLを設定(最後の/は不要)
Jamf Proの設定
- 右上の歯車アイコンをクリックします。
- Webhookを検索し、【Webhook】をクリックします。
- 【新規】をクリックします。
- 表示名にわかり易い名前を入力します。
- WebhookのURLに、Lambdaで生成されたURLを貼り付けます。
- コンテンツタイプから「JSON」を選択します。
- Webhookイベントから「DeviceAddedToDEP」を選択します。
- 【保存】をクリックします。
※認証がこの状態だとないので、必要に応じてHeader Authentication等を設定し、ソースコードを改修して対応するのがいいと思います。
テスト
実際にADEに登録されるデバイスがありそうであれば、そちらを待ってもいいのですがすぐにはないと思いますので、ここではPostmanを利用します。
- Postmanを起動します。
- 「POST」を選択し、URLにLambdaのURLを入力します。
- Headersに、Content-Type:application/jsonを指定します。
- BodyにJSONで、以下の内容を入力します。
{
"event": {
"assetTag": "TEST-ASSET",
"description": "string",
"deviceAssignedDate": 11,
"deviceEnrollmentProgramInstanceId": 10,
"model": "MacBook Pro 16",
"serialNumber": "TEST-SERIAL"
},
"webhook": {
"eventTimestamp": "2022-11-01T00:00:00Z",
"id": 10,
"name": "TEST",
"webhookEvent": "DeviceAddedToDEP"
}
}
- SNIPE-ITへ資産として登録されていればOKです。
まとめ
人が納品を元にシリアルNoのコピペや型番の登録をするとどうしてもミスが発生したりします。
ADEへの登録をトリガーとすることで、そろそろ納品されるというのを把握できるとともにシリアルを資産台帳に自動登録できるのはミスなくシリアルの登録ができるので便利ですね。
Windows端末もこういう仕組みがあるといいのですが・・・。