Upgrade to Pro — share decks privately, control downloads, hide ads and more …

1,000台のNW機器からログを取得してみた

 1,000台のNW機器からログを取得してみた

Ansible NW部

mahoutukaisali

November 20, 2019
Tweet

Other Decks in Programming

Transcript

  1. Profile Name 呉 理沙 Career ・2015 富士通に入社 ・2015~2017 営業(通信事業者担当) ・2018~

    Network Automation Engineer 趣味 ・ 海外の囲碁大会に参加すること ・ SUITS(海外ドラマ), 新作ポケモンにハマり中。
  2. 本日のテーマ ログイン情報管理表 (人間用) Inventory file Playbook PC用 Ansible実行結果の CSVデータ (PC用)

    分析結果出力 (人用) 人間用からPC用へ、PC用から人間用へ 壁1:セル結合されたエクセル 壁2:telnet接続 踏み台経由での接続 壁3:実行結果の分析 + Linux のExpect
  3. 壁2:Telnet & 踏み台 Idea 2. Ansibleのexpectモジュールを使う --- - expect: command:

    telnet X.X.X.X response: Login: username Password: password Ansibleサーバ 踏み台機器 ターゲット機器 Telnet Telnet telnet X.X.X.X User ID Password show run Playbook show run CLI(ansibleから実行されるコマンド) CLI(ansibleから実行されるコマンド)
  4. Idea 3. 自前でexpectスクリプトを書いてPlaybookで呼び出した JUMP_HOST: X.X.X.X JUMP_User: telnet_user JUMP_Password: password インベントリ変数に踏み台ホストの

    ログイン情報の変数を定義 ※group_vars/host/vars.yml - name: run expect delegate_to: localhost command: "{{ EXPECT_SCRIPT_PATH + ' ' + JUMP_HOST + ' ' + JUMP_USERNAME + ' ' + JUMP_PASSWORD + ' ' + JUMP_ENABLE + ' ' + ansible_host + ' ' + ansible_user + ' ' + ansible_password + ' ' + ansible_become_pass + ' ' + CMD_LIST|join(' ') }}" vars: CMD_LIST: - 'show¥ diff¥ run¥ start' expectスクリプトを呼び出すプレイブック 壁2:Telnet & 踏み台
  5. 壁3:実行後結果の分析 - block: - telnet: commands: show diff run start

    delegate_to: localhost register: r - set_fact: _stdout: “{{ r.stdout }}” _diff: “{ % if stdout %}差分あり{% else %}差分無し{% endif %}” _result: “{{ ‘NG’ if r.failed else ‘OK’ }}” rescue: - set_fact: _result: ‘NG’ host, address, result, 差分 {% for host in ansible_play_hosts -%} {% set inventory=host %} {% set address=hostvars[host][‘ansible_host ’] %} {% set result=hostvars[host][‘_result’] %} {% set diff=hostvars[host][‘_diff’] %} {{ inventory }},{{ address }},{{ result }}, {{ diff }} {% endfor %} ・何も出力が無ければ差分が無いので、その結果を格納する変数を定義 ・コマンドの実行の成否を確認するための変数も用意 ・使用モジュール: block, set_fact, telnet host address 疎通結果 差分 host1 1.1.1.1 OK 差分あ り host2 2.2.2.2 NG - host3 3.3.3.3 OK 差分無 し ・ ・ ・ レポート(CSVファイル) ・1,000台分の実行ログを辿るのは無理 ☞インベントリグループごとに、疎通可否/差分の有無の結果をまとめたCSVレポートを作成した
  6. 仕上げ:NG/差分ありだった機器はどうする? host address result 差分 host1 1.1.1.1 OK 差分あ り

    host2 2.2.2.2 NG - host3 3.3.3.3 OK 差分無 し レポート(CSVファイル) ・ ・ ・ Inventory File ・Task1:NGホストだけを読み取ったInventory Fileを生成し後日、 正しい情報で再確認できるようにした ・Task2:差分ありホストだけを読み取ったInventory Fileを作成し後日、 設定保存できていないホストだけにcopyコマンドを実行する Playbookを実行できるようにした