mito’s blog

IT技術メインの雑記。思い立ったが吉日。

【Ansible】junos_config モジュールを使う(set interfaces XXXX enable)

はじめに

Ansible の junos_config モジュールを使ってみます。

docs.ansible.com


環境

Ansible

  • ansible 2.9.17
  • paramiko インストール
  • ncclient インストール

Router

  • JUNOS 18.3R1.9
  • netconf 有効


インターフェース ge-0/0/0 を有効にする

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: commit interfaces enable
      junos_config:
        lines:
          - set interfaces ge-0/0/0 enable
  • junos_config モジュール

    • junos の構成を管理します
  • lines パラメータ

    • set または、delete から始まる設定変更を指定します
    • リスト形式のため、複数の設定変更を指定できます
    • configure exclusive 相当の動作です
      • 他のユーザが configure モードに遷移していると失敗します
      • 未 commit の設定変更があると失敗します


実行ログ

● Playbook実行前のjunos
> show interfaces ge-0/0/0 terse    
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24   
                                   multiservice

● ansible
# ansible-playbook -i inventory.ini port_up.yml 

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

PLAY RECAP *********************************************************************
r1   : ok=1  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   

● Playbook実行後のjunos
> show interfaces ge-0/0/0 terse    
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24   
                                   multiservice


その他のパラメータ

  • check_commit: yes

    • commit せず、構文の正確さをチェックします
    • デフォルトは no です
  • rollback: 1

    • 引数で指定された過去の設定にロールバックします
    • 最新のコミットにロールバックするには、引数を 0 にします
    • lines とは同時に指定できません


バックアップを取ってから、インターフェース ge-0/0/0 を有効にする

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: commit interfaces enable
      junos_config:
        lines:
          - set interfaces ge-0/0/0 enable
        backup: yes
        backup_options:
          filename: backup.cfg
          dir_path: /root/juniper
      register: result

    - name: debug
      debug:
        msg: "{{ result }}"
  • backup

    • commit 前の設定をバックアップします
    • デフォルトは no です
  • backup_options

    • filename
      • バックアップファイル名を指定します
      • 指定しない場合、ファイル名は _config.<current-date>@<current-time> になります
        • 例:r1_config.2021-03-15@00:12:50
      • dir_path: /root/juniper


実行ログ

# ansible-playbook -i inventory.ini port_up.yml 

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

TASK [debug] *******************************************************************
ok: [r1] => {
    "msg": {
        "backup_path": "/root/juniper/r1_config.2021-03-15@00:21:46",
        "changed": true,
        "date": "2021-03-15",
        "failed": false,
        "filename": "r1_config.2021-03-15@00:21:46",
        "shortname": "/root/juniper/r1_config",
        "time": "01:51:46"
    }
}

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


備考

src パラメータで設定ファイルを適用することも、zeroize: yes で初期化することもできるようです。