node.jsで objectをyamlで出力
node.js で形成した objectを yamlフォーマットで出力したいケースがあったのでメモ。
やりたいこととしては、ansibleのinventoryに記載したhosts情報を元に、tmuxinatorの設定ファイル(yaml)を自動生成すること。
yaml出力には js-yaml モジュールを使えば簡単。
var yaml = require('js-yaml'); var fs = require('fs'); var ini = require('ini'); var _ = require('lodash'); var hosts = ini.parse(fs.readFileSync('./data/config.ini', 'utf-8')); var dump = { name: 'hoge-dev', root: '~/', windows: [ { web: { layout: "main-vertical", panes: [] } }, { db: { layout: "main-vertical", panes: [] } } ] }; _.each(_.keys(hosts.webservers), function(host) { var sshCommand = 'ssh $SSH_USERNAME@' + host; dump.windows[0].web.panes.push(sshCommand); dump.windows[0].web.panes.push(sshCommand + ' -t tailf /var/log/hoge/error.log'); }); _.each(_.keys(hosts.dbservers), function(host) { var sshCommand = 'ssh $SSH_USERNAME@' + host; dump.windows[1].db.panes.push(sshCommand); dump.windows[1].db.panes.push(sshCommand + ' -t tailf /var/log/db/db.log'); }); console.log(yaml.safeDump(dump));
最後の、yaml.safeDump() で objectをyamlに変換している。
出力結果は下記の通り。
name: hoge-dev root: ~/ windows: - web: layout: main-vertical panes: - "ssh $SSH_USERNAME@foo.example.com" - "ssh $SSH_USERNAME@foo.example.com -t tailf /var/log/hoge/error.log" - "ssh $SSH_USERNAME@bar.example.com" - "ssh $SSH_USERNAME@bar.example.com -t tailf /var/log/hoge/error.log" - db: layout: main-vertical panes: - "ssh $SSH_USERNAME@one.example.com" - "ssh $SSH_USERNAME@one.example.com -t tailf /var/log/db/db.log" - "ssh $SSH_USERNAME@two.example.com" - "ssh $SSH_USERNAME@two.example.com -t tailf /var/log/db/db.log" - "ssh $SSH_USERNAME@three.example.com" - "ssh $SSH_USERNAME@three.example.com -t tailf /var/log/db/db.log"
サーバサイドJavaScript Node.js入門 (アスキー書籍)
- 作者: 清水俊博,大津繁樹,小林秀和,佐々木庸平,篠崎祐輔,高木敦也,西山雄也,Jxck
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/02/27
- メディア: Kindle版
- この商品を含むブログを見る