この記事は、NetOpsCoding Advent Calendar 2016の2016年12月2日の記事です。
御礼 : 本記事はJANOG39ミーティングのライトニングトークに応募したネタです。投票頂いた皆様ありがとうございました。
本記事はTwitterに以前投稿した動画について紹介します。下記のTwitterの動画の通り、二次元バーコードを印刷した紙の手順書を、二次元バーコードリーダで読み取り、シスコルータの設定変更します。
紙の手順書にQRコードをつけて、2次元バーコードリーダーで読み取り、ルータを設定してみました‼️ pic.twitter.com/BHU337b1BV
— kooshin (@kooshin) 2016年11月8日
はじめに
ネットワークエンジニアがルータを設定する際は、テキスト形式やExcel方眼紙など、様々な形式で手順書を作ると思います。電子データであれば、パソコン上でコピー&ペーストして、ルータのCLIから設定投入できます。しかしながら、手順書を紙に印刷すると、コピー&ペーストができなくなり、手打ちする必要があります。
USBメモリなどデータ記録媒体の持ち込み制限が厳しいデータセンタでは、紙でしか手順書を持ち込めない場合があるかもしれません。また、持ち込みできたとしても、事前の申請など様々な手続きする必要があるかもしれません。そんな中でも『紙の手順書』であれば楽々持ち込みでき、作業品質や作業効率がアップするかもしれません。
そこで、あえて手順書を紙に印刷して『紙の手順書』でルータ設定を半自動化してみました。ルータ設定に利用するものは『二次元バーコードリーダー』と『二次元バーコードを印刷した紙の手順書』です。
バーコードリーダを使うことで、専門的な知識が不要になり、ネットワークエンジニア以外でも、ルータ設定ができるようになるかもしれません。
仕組み
『紙の手順書』に二次元バーコード(QRコード)を印刷し、それを二次元バーコードリーダで読み取ることで、ルータ設定を半自動化します。
『紙の手順書』を作成するために、ルータに投入する設定を事前にYAMLで記述します。手順書作成用のWebアプリを用いて手順書形式に変換します。Webブラウザで二次元バーコード付きの手順書を表示し、紙に印刷し、『紙の手順書』が完成します。
ルータ設定を半自動化するために、ルータにTELNETが可能なパソコンに二次元バーコードリーダを接続した環境を準備します。パソコン上のターミナルを起動し、『紙の手順書』を二次元バーコードリーダで読み取ることで、二次元バーコードに埋め込まれたコマンドが実行されます。
二次元バーコードリーダ
二次元バーコードリーダは秋葉原の中古ショップで購入したデンソーウェーブ社製 AT10Q-SMを使用します。
あっという間に10月も今日で終わりですね~♪お買い忘れ等ございませんか?本日も特価商品多数ご用意してお待ちしております(^^)/ #PC #PCコンフル #秋葉原 #YAMAHA #VPN #バーコードリーダー #NIC pic.twitter.com/Jg4hiwvFSq
— 中古PCショップ☆PCコンフル秋葉原店 (@PCcomfullAKB) 2016年10月31日
二次元バーコードリーダは、ハンディ型のコードリーダで、USBケーブルでパソコンと接続します。USB接続が可能なバーコードリーダは、USBキーボードとして動作するモードがあります。読み取ったばーコードの内容をメモ帳やExcelなどに直接出力できます。今回はこの機能を利用します。このため、二次元バーコードリーダに関する知識や開発は不要です。
『紙の手順書』の生成
『紙の手順書』を生成するために、簡単なWebアプリをRubyで実装しました。ルータのコマンドを二次元バーコードに埋め込んだ手順書を作成します。
環境
試作した環境は下記のとおりです。Ruby/Sinatraで手順書作成用のWebアプリで実装しました。二次元バーコードの生成にはbarby
ライブラリを使用しています。
- Ubuntu 16.04
- Ruby 2.3.0
- Webフレームワーク
- Sinatra 1.4.7
- slim 3.0.7
- 二次元バーコード生成
- barby 0.6.4
- rqrcode 0.10.1
- 手順書パラメータ
- YAML
プログラム
ソースコードはgithub上で公開しています。
https://github.com/kooshin/barcode-generator
手順書作成Webアプリは、3種類のファイルから構成された簡単なWebアプリです。
tejuns.yaml - 手順書パラメータ
app.rb - Webアプリ
views/* - slimのHTMLテンプレート
手順書パラメータ
手順書の内容はYAMLで定義します。今回は手順書の作成に必要な3つのパラメータをYAMLで記述します。
- name:手順書の名前(英数字)
- description:手順書の説明
- commands:二次元バーコードに生成する内容
今回の例では、commandsにルータを設定する際に投入するコマンドを定義します。
- name: tejun1-config
description: ルータにVRFとIPアドレスを割当
commands:
- "telnet 192.168.88.5\ncisco\ncisco"
- "enable\ncisco\nterminal length 0"
- "show run vrf VRF1\nshow run int Vlan101"
- "conf t\n vrf definition VRF1\n address-family ipv4\n interface Vlan101\n vrf forwarding VRF1\n ip address 192.168.1.1 255.255.255.0\n no shut\nend"
- "show run vrf VRF1\nshow run int Vlan101"
- "exit"
Webアプリ
二次元バーコードの生成は下記のcreate_barcode_image
メソッドでPNG画像を生成し、base64エンコーディングしたデータをIMGタグに埋め込みます。Rubyで二次元バーコードを生成する方法については一次元/二次元バーコードを生成する for Rubyを参照してください。
def create_barcode_image(content)
code = Barby::QrCode.new(content, size: 7)
code.to_image(xdim: 2).to_data_url
end
Sinatraのルーティングは非常にシンプルで、一覧と表示の2つの画面のみです。
# 手順書を一覧表示
get '/' do
slim :index
end
# 指定された手順書の二次元バーコードを表示する
get '/:name' do
@tejun = select_tejun(params[:name])
slim :tejun
end
手順書の一覧を表示するslimテンプレートです。単純にtejuns.yamlの内容を一覧表示をしています。
.page-header
h1 二次元バーコード手順書一覧
ul.list-group
- tejuns.each_with_index do |tejun, i|
a.list-group-item href="/#{tejun['name']}"
.row
.col-xs-1
= i + 1
.col-xs-3
= tejun['name']
.col-xs-8
= tejun['description']
手順書を表示するslimテンプレートです。tejuns.yamlの指定されたコマンド一覧を二次元バーコードで表示します。
.page-header
h1 二次元バーコード手順書ジェネレータ
h2
small
= @tejun['description']
- @tejun['commands'].each do |command|
.row
.col-xs-2
img src="#{create_barcode_image(command)}"
.col-xs-10
pre style="margin-top: 10px"
= command
実行結果
手順書一覧を表示するトップページです。印刷したい手順書を選択します。
手順書を選択すると、二次元バーコード付きの手順書が表示されます。
デモ
紙のデモ画面は一番上のTwitterの動画を参照してください。
紙に印刷した手順書を元にして実行する以外にも、パソコンの画面から直接もできます。ただし、ノングレア液晶は二次元バーコードリーダで読み取りできませんでした。つるつるテカテカしたグレア液晶の場合はかろうじて読み取り可能です。下記はMacBookAirの画面で二次元バーコードを表示して、二次元バーコードリーダで読み取りしています。
QRコードにルータのコマンドを埋め込み、2次元バーコードリーダーで読み取るとこで、コマンドの実行を素早く正確にできるようになった‼️ pic.twitter.com/lFlKjcNX77
— kooshin (@kooshin) 2016年11月6日
参考
-
バーコードのしくみ - 株式会社キーエンス
-
QRコードとは? - コードドットコム(株式会社デンソーウェーブ)
-
github - toretore/barby - github
-
Rubyで簡単にQRコード画像を生成する方法 - Qiita
-
一次元/二次元バーコードを生成する for Ruby - Qiita