Cisco ACI のイベントをリアルタイムで検知する Node.js サンプルスクリプト
Cisco ACI には「何かの状態変更をリアルタイムに検出する」ことが可能になる Subscription という仕組みがあります。 Node.js で Events を Subscription するサンプルをメモしておきます。 今回は Ubuntu19 でテストしました。
Node.js 環境の用意¶
最新の node & npm 環境を用意していきます。 まず、標準リポジトリから node と npm をインストールします。
この時点で node と npm のバージョンは以下でした。
続いて n をグローバルにインストールし、node と npm を Stable バージョンに更新します。
apt でインストールした古いバージョンの node と npm は不要ですので、アンインストールしておきます。
モジュールを探せるよう、NODE_PATH を追加しておきます。
パスの追加を反映する為、手っ取り早くログアウト&ログインし直しておきます。 これで node と npm のバージョンが更新されました。
必要モジュールのインストール¶
サンプルコードが node-rest-client と ws に依存している為、これらのモジュールをインストールしておきます。
サンプルコード¶
サンプルコードは以下の通りです。
var Client = require('node-rest-client').Client;
var WebSocket = require('ws');
var apic = '10.0.0.1'
var username = 'admin'
var password = 'password'
var options = {
connection: {
rejectUnauthorized: false
}
};
var client = new Client(options);
var resp = function (data, response) {
var token = data.imdata[0].aaaLogin.attributes.token;
var ws = new WebSocket('https://' + apic + '/socket'.concat(token), {
rejectUnauthorized: false,
strictSSL: false
});
ws.on('open', function (data) {
console.log('WEBSOCKET-DATA: Socket Open');
client.get('https://' + apic + '/api/node/class/eventRecord.json?subscription=yes', {
headers: {
'Content-Type': 'application/json',
'Cookie': 'APIC-COOKIE=' + token
}
}, function (data, response) {
console.log(data.imdata[0]);
});
});
ws.on('message', function incoming(data) {
console.log(data);
});
var testData = client.get('https://' + apic + '/api/node/class/eventRecord.json?subscription=yes', {
headers: {
'Content-Type': 'application/json',
'Cookie': 'APIC-COOKIE=' + token
}
}, function (data, response) {
console.log(data.imdata[0]);
});
};
var args = {
data: {
aaaUser: {
attributes: {
name: username,
pwd: password
}
}
},
headers: {
"Content-Type": "application/json"
}
};
client.post('https://' + apic + '/api/aaaLogin.json', args, resp);
実行してみる¶
用意が出来たら実行してみます。