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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Ansible NW部

Avatar for mahoutukaisali

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を実行できるようにした