【Ansible】ログ出力結果をNW機器別に複数ファイル出力する方法

前回、AnsibleでNW機器への接続用(Telnet)Playbookを作成しました。

今回出力結果のログファイルを各機器ごとに出力するPlaybookを作成したのでまとめました。

前回の記事はこちらを参照

ansible

「Ansible」複数機器のログを各ファイルごとに出力するPlaybook

複数NW機器で各機器ごとの出力結果のファイルを作成するには「hosts」ファイルとPlaybookのエクスポートを変更します。

「hosts」をホスト名で設定

「hosts」ファイルで以下のように各NW機器ごとにホスト名とアクセス先のIPを設定します。

※hosts

[cisco_r1]
CiscoRT1 ansible_host=192.168.0.1
CiscoRT2 ansible_host=192.168.0.2

「Playbook」で出力先のログを変数を使って設定

Playbookでエクスポート先のファイル名に変数を使用します。
30行目で「{{ inventory_hostname }}」を使用し、hostsのホスト名を使用するようにします。

[root@CetOS8 ansible]# cat cisco.yml
---
- hosts: cisco_r1
  connection: local
  gather_facts: False

  tasks:
  - name: show run
    telnet:
      user: cisco
      password: Nos7130!
      login_prompt: "Password: "
      prompts:
        - "[>|#]|Password: "
      command:
        - terminal length 0
        - enable
        - Nos7130!
        - show run
        - show ver
      changed_when: False
    register: command_result

  - name: log export
    local_action:
      module: copy
      owner: root
      group: root
      mode: 0644
      dest: "/etc/ansible/LOG/{{ inventory_hostname }}_show_run.log"
      content: "{{ command_result.output[3] }}"
    changed_when: False

Playbook実行

上記設定を実施後、Playbookを実行します。

[root@CetOS8 ansible]# ansible-playbook -i hosts cisco.yml

PLAY [cisco_r1] *****************************************************************************************************************************************************************************************************************************

TASK [show run] *****************************************************************************************************************************************************************************************************************************
changed: [CiscoRT1]
changed: [CiscoRT2]

TASK [log export] ***************************************************************************************************************************************************************************************************************************
ok: [CiscoRT1]
ok: [CiscoRT2]

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
CiscoRT1                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
CiscoRT2                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@CetOS8 ansible]#

正常に動作したら以下フォルダで、複数分の機器のログファイルが作成されます。

[root@CetOS8 ansible]# ll LOG/*
-rw-r--r--. 1 root root 4790 11月 26 17:09 LOG/CiscoRT1_show_run.log
-rw-r--r--. 1 root root 1472 11月 26 17:09 LOG/CiscoRT2_show_run.log

Ansibleで複数のNW機器の出力結果をファイルで出力する方法は以上となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!