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


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

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

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

ansible

【Ansible】Telnetアクセスと出力結果をログに保存するPlaybook

2020年11月25日

「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機器の出力結果をファイルで出力する方法は以上となります。


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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