お疲れ様です。たそ(@taso_int)です。
研修期間もそろそろ折り返し地点になりました。
基本情報技術者試験の勉強していますが結構苦戦してます。
今回も続きをやっていきたいと思います。
前回の内容について知りたい方はこちらへ
1.構成図
以前の構成から192.168.1.2→192.168.1.254に変更します。
しかし、AnsiblleホストとSSH接続しており、playbookで変更すると
止まってしまうので手動で設定変更をします。(まだ変更してない)
そこでstartup-configとrunnig-configの設定ファイルを保存して
変更部分を比較するplaybookを書きたいと思います。
2.動作設計
今回のplaybookの動作手順を考えたいと思います。
1.実際にコマンドをそれぞれ実行する。
2.実行結果をファイルで保存をする。 ←(ここまではできた)
3.ファイルの調整を行う。(startup-configとrunnig-configに行の修正)
4.ファイルを比較する。
5.比較結果をplaybook実行中に表示させる。
6.write memoryをするかを問い合わせる。
3.手順(完成部分?)
3-1.実際にコマンドをそれぞれ実行する。
コマンドを変数にしたいが別々のファイルで取得したいため
個別でコマンドを記述します。
ios_commandモジュールを利用してshow startup-config等を入力させます。
出力結果をregisterオプションを使ってresultに格納します。
tasks: - name: show startup ios_command: commands: show startup-config register: result
3-2.実行結果をファイルで保存をする
出力をファイルに書き込む方法はcopyモジュール等が存在します。
今回はtemplateモジュールを利用してJinja2 テンプレート
を参照して出力することにしました。
横地さんのブログ参考になりました。
実際のyaml
- name: file make start template: src: ios_log.j2 #テンプレート参照名 dest: "startconf_{{ inventory_hostname }}" #ファイル名
jinja2のテンプレート(ios_log.j2)
{% for out in result.stdout %} #出力結果の表示 {{ inventory_hostname }} #最初の1行目にルータの名前 {{ out }} {% endfor %}
正直jinja2の書式がイマイチわかってないです。(Pythonなのにわからん)
ちなみにcopy モジュールをつかっても出力できます。
- name: file make start copy: continent: "{{ result.stdout[0] }}" dest: "startconf_{{ inventory_hostname }}"
実際のyaml
--- - hosts: ios gather_facts: false tasks: - name: show startup ios_command: commands: show startup-config register: result - name: file make start template: src: ios_log.j2 dest: "startconf_{{ inventory_hostname }}" - name: show running ios_command: commands: show running-config register: result - name: file make start template: src: ios_log.j2 dest: "runconf_{{ inventory_hostname }}"
playbookを実行してみる。
実行前
実行結果
しっかりと作成されています。
ファイルも見てみましょう。
しっかり出来てますね。
4.つまずいている点
showコマンドの出力がバラバラで同じ位置にしたい。
ブログ書きながら解決しました…
show startup-config | begin version って記載すれば行ける。
オプション | begin begin以後に記載した文字列から
始まる行以下の行をすべて返すとのこと。
diffのやり方
diffぽいモジュールがないのでshellコマンドを使う可能性が高め。
stdoutとstdout_liensについて
5でdiff結果を表示したい。stdoutで表示すると改行コードが出て
かなり見づらい状況。
stdout_liensで見やすくなるらしいが試したところエラーを
吐き出してしまい原因がわからない。
次週ここを作成していきたいと思います。
ここまで読んでいただきありがとうございました。