LoginSignup
2
1

More than 5 years have passed since last update.

Ansible で WAN につながっている Routerの if を up down する。

Last updated at Posted at 2017-04-11

必要となった理由

WAN側回線工事をするので、ほっとくと、IFがup/downしたりしてなんか辛そうなので、
あらかじめ落としておいて、工事が終わるころにまた上げるようにするのを自動化したいという要望があったため。

NW構成

よくあるWAN回線2本に
それぞれWANルータがぶら下がってその下にFWがある感じ。
WAN-RT はCisco(IOS-XE)でした。

WAN回線A - WAN-RT01 --+--FW -- internal   
WAN回線B - WAN-RT02 --|

ファイル構成

+inventory
+ifchange.yml
+tasks/
  +if_check.yml
  +if_up.yml
  +if_down.yml

ファイル

inventory

[RT01]
192.168.1.1   interface=GigabitEthernet0/0/0

[RT02]
192.168.1.2   interface=GigabitEthernet0/0/1

ifchange.yml

- hosts: "{{ host }}"
  connection: local
  gather_facts: false
  vars:
    ansible_python_interpreter: "path to python"
    cli:
      host: "{{ inventory_hostname }}"
      username: login user name (priv 15)
      password: login pasword
  tasks:
    - fail:
        msg: 'mode is not set or invalid. require "up" or "down".'
      when: mode is undefined or not( mode == "up" or mode == "down")

    - include: tasks/if_check.yml
    - include: "tasks/if_{{ mode }}.yml"
    - include: tasks/if_check.yml      

tasks/if_check.yml

- name: interface check
  iso_facts:
    gather_subset: interface
    provider: "{{ cli }}"

tasks/if_up.yml

- name: interface up
  iso_config:
    provider: "{{ cli }}"
    lines:
      - "no shutdown"
    parents: "interface {{ interface }}"
  when: item.key == "{{ interface }}" and not item.value.operstatus == "up"
  with_dict: "{{ ansible_net_interfaces|default({}) }}"

tasks/if_up.yml

- name: interface up
  iso_config:
    provider: "{{ cli }}"
    lines:
      - "shutdown"
    parents: "interface {{ interface }}" 
  when: item.key == "{{ interface }}" and item.value.operstatus == "up"
  with_dict: "{{ ansible_net_interfaces|default({}) }}"

実行方法

RT01のインターフェースを落とす
# ansible-playbook -i inventory ifchange.yml -e "mode=down host=RT01"
RT02のインターフェースを上げる
# ansible-playbook -i inventory ifchange.yml -e "mode=up host=RT02"

なんでこんなことしたの?

時間が余ったからです。

最初はワンショット的に使えればいいということで
ルータ1のIFを落とすplaybookとルータ1のIFを上げるplaybook を書いてました。

実際どう使ってるの?

echo 'ansible-playbook -i inventory ifchange.yml -e "mode=down host=RT01" | sendmail mail@address.com' | at hh:mm MM/DD/YY

とか

echo 'ansible-playbook -i inventory ifchange.yml -e "mode=up host=RT01" | sendmail mail@address.com' | at hh:mm MM/DD/YY

とか
そんな感じで使ってます。

おわりに。

ある程度パラメータ化しつつ、 最終的にはこういうのを貯めたやつをまとめつつ、WEB画面つくって、ぽちっとすると登録される
みたいなものが作れると良いかなぁなんて。

こういうのは自分のワークフローに従ってよく発生するものを
個別になんとなく、楽できるようにつくって、それを集めて持っておく
というのが正解なんだろうか。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1