58
2017/07/21 8a1APC勉強会 株式会社 エーピーコミュニケーションズ 横地 Netmiko / NAPALM / Ansible / Salt

ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Embed Size (px)

Citation preview

Page 1: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

2017/07/21 【8a1】APC勉強会株式会社 エーピーコミュニケーションズ

横地 晃

Netmiko / NAPALM / Ansible / Salt

Page 2: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

はじめに

2

近年、APIに対応していないネットワーク機器でも自動化できる方法が増えてきました。

そのためのツールやライブラリをいくつか試してみましたので、特徴などをご紹介します。ツール選びの検討材料になれば幸いです。

Ansible SaltNAPALMNetmiko

【扱うツール・ライブラリ】

Page 3: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

本日の内容

3

概要

全体像

各ツールの説明

Netmiko

NAPALM

Ansible

Salt

比較

まとめ

Page 4: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

自己紹介

4

@akira6592

名前 横地 晃

経歴 ・2012年エーピーコミュニケーションズ入社・ネットワークの設計構築業務を担当・プロフェッショナル職

(Twitter, Qiita, blog, SlideShare)

Page 5: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

5

1. 全体像

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 6: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

全体像(業務フローイメージ)

6

作業承認依頼 設計

ここの自動化

Page 7: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

全体像(ツール依存イメージ)

7

Netmiko【紹介】

Ansible【紹介】

NAPALM【紹介】

paramiko pan-python pan-device

Cisco IOS

PaloAltoPAN-OS

他・・・対応機種は抜粋

構成管理

ツール

Pyth

on

ライブラリ

Salt【紹介】

NW

機器

Page 8: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

全体像(機能概要)

8

機能\ツールNetmiko NAPALM Ansible Salt

種別 Pythonライブラリ 構成管理ツール

利用方法 Python のコードにて自動化する 定義ファイルやツールのコマンドにて自動化する

コーディング不要× △

一部CLIあり● ●

マルチベンダー抽象化

設定コマンド

×コマンド直接指定

△ごく一部

×ベンダー別

モジュールを利用(抽象化アプローチが

異なるため)

△ごく一部

表示コマンド

×コマンド直接指定

△一部

×ベンダー別

モジュールを利用(抽象化アプローチが

異なるため)

△一部

基本操作 ● ● ● ●

NETCONF関連は今回は対象外

Page 9: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

9

2. Netmiko

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 10: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmiko 概要

10

ベンダーA ベンダーB ベンダーC

表示コマンド 表示コマンド 表示コマンド

設定コマンド 設定コマンド 設定コマンド

ログイン ログイン ログイン

モード移行 モード移行 モード移行

コミット コミットコミット

共通メソッドとして抽象化

ベンダーごとのコマンドを直接指定

シンプルで薄い抽象化ライブラリ

Page 11: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmiko 対応機種

11

Arista vEOS

Cisco ASA

Cisco IOS

Cisco IOS-XE

Cisco IOS-XR

Cisco NX-OS

Cisco SG300

HP Comware7

HP ProCurve

Juniper Junos

Linux

Alcatel AOS6/AOS8

※v1.4.2時点。ベンダーによって対応の差がある。一覧: https://github.com/ktbyers/netmiko

Avaya ERS

Avaya VSP

Brocade VDX

Brocade ICX/FastIron

Brocade MLX/NetIron

Cisco WLC

Dell-Force10 DNOS9

Dell PowerConnect

Huawei

Mellanox

Palo Alto PAN-OS

Pluribus

Vyatta VyOS

A10

Accedian

Alcatel-Lucent SR-OS

Ciena SAOS

Cisco Telepresence

CheckPoint Gaia

Enterasys

Extreme EXOS

Extreme Wing

F5 LTM

Fortinet

MRV Communications OptiSwitch

Page 12: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmikoによる状態表示例(コード)

12

from netmiko import ConnectHandler# 機器情報の定義

ios = {"device_type": "cisco_ios", # デバイスタイプ"ip": "192.168.0.254", # ログイン先"username": "testuuser", # ログインユーザー"password": "testpassword", # ログインパスワード"secret": "testsecret" # enable パスワード

}# 接続

net_connect = ConnectHandler(**ios)# enable モード移行

net_connect.enable()# コマンド実行

output = net_connect.send_command("show ip int brief")# コマンド実行結果の出力

print(output)

# 切断

net_connect.disconnect()

juniper_junospaloalto_panos

など

Page 13: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmikoによる状態表示例(結果)

13

> python netmiko_show.pyInterface IP-Address OK? Method Status ProtocolVlan1 10.1.0.254 YES NVRAM up downVlan2 10.2.0.254 YES NVRAM up downVlan192 192.168.0.254 YES NVRAM up upGigabitEthernet1/0/1 unassigned YES unset down downGigabitEthernet1/0/2 unassigned YES unset down downGigabitEthernet1/0/3 unassigned YES unset down downGigabitEthernet1/0/4 unassigned YES unset down downGigabitEthernet1/0/5 unassigned YES unset down downGigabitEthernet1/0/6 unassigned YES unset down down(略)

GigabitEthernet1/0/21 unassigned YES unset down downGigabitEthernet1/0/22 unassigned YES unset down downGigabitEthernet1/0/23 unassigned YES unset down downGigabitEthernet1/0/24 unassigned YES unset up up>

コマンド実行結果がそのまま表示される

スクリプト実行

Page 14: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmikoによる設定変更例(コード)

14

from netmiko import ConnectHandler# 機器情報の定義

ios = {"device_type": "cisco_ios", # デバイスタイプ"ip": "192.168.0.254", # ログイン先"username": "testuuser", # ログインユーザー"password": "testpassword", # ログインパスワード"secret": "testsecret" # enable パスワード

}# 接続

net_connect = ConnectHandler(**ios)# enable モード移行

net_connect.enable()# 実行したい設定コマンドをリストで定義

lines = ["int vlan 1", "description ***testdesc***"]# 設定コマンドを実行

net_connect.send_config_set(lines)

# 切断

net_connect.disconnect()

コマンドを直接指定

Page 15: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

router1# sh run int vlan 1Building configuration...

Current configuration : 99 bytes!interface Vlan1description ***testdesc***ip address 10.1.0.254 255.255.255.0ip ospf cost 10end

Netmikoによる設定変更例(結果)

15

> python netmiko_config.py>

設定が入る

NW機器側で確認

スクリプト実行

Page 16: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Netmikoまとめ

16

シンプルで薄い抽象化ライブラリ

Page 17: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

17

3. NAPALM

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 18: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM 概要

18

ベンダーA ベンダーB ベンダーC

表示コマンド 表示コマンド 表示コマンド

設定コマンド 設定コマンド 設定コマンド

ログイン ログイン ログイン

モード移行 モード移行 モード移行

コミット コミット

共通メソッドとして抽象化コミット

設定コマンドはごく一部表示コマンドは一部

多機能で厚い抽象化ライブラリ

Page 19: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM 概要

表示コマンドの抽象化各ベンダーのshowコマンドを意識せずに情報取得できる

出力結果は共通フォーマットにパースされる

設定コマンドの抽象化組み込みの各ベンダー用テンプレートで実現 set_hostname、set_ntp_peers、delete_ntp_peers

set_probes、schedule_probes、delete_probes

その他 CLIでNAPALMの機能を利用するコマンドもある

ansibleからNAPALMの機能を利用するサードパーティモジュールもある

19※v1.2時点。詳細: https://napalm.readthedocs.io/en/latest/support/index.html#available-configuration-templates

set host-name RT1

hostname RT1

NAPALM

各ベンダー向けの設定

ホスト名をRT1にする

A | B1 | 2

A 1B 2

NAPALM

各ベンダーのshow結果(バラバラ) 共通フォーマット

{"A": 1,"B": 2

}

Page 20: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM 対応機種

20

EOS

JunOS

IOS-XR

FortiOS

NXOS

※v1.2時点。ベンダーによって対応の差がある。一覧: https://napalm.readthedocs.io/en/latest/support/index.html

IOS

Pluribus

PANOS

MikroTik

VyOS

Page 21: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM 情報取得メソッド対応表1/2

21※v1.2時点。ベンダーによって対応の差がある。詳細・引用元: https://napalm.readthedocs.io/en/latest/support/index.html

EOS FORTIOS IOS IOSXR JUNOS NXOS PANOS PLURIBUS ROS VYOS

get_arp_table ✅ ❌ ✅ ✅ ✅ ✅ ❌ ❌ ✅ ✅

get_bgp_config ✅ ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ❌

get_bgp_neighbors ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌ ❌ ✅

get_bgp_neighbors_detail ✅ ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ❌

get_config ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌

get_environment ✅ ✅ ✅ ✅ ✅ ❌ ❌ ❌ ✅ ✅

get_facts ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅

get_firewall_policies ❌ ✅ ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌

get_interfaces ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅

get_interfaces_counters ✅ ✅ ✅ ✅ ✅ ❌ ❌ ❌ ❌ ✅

get_interfaces_ip ✅ ❌ ✅ ✅ ✅ ✅ ❌ ❌ ✅ ✅

get_lldp_neighbors ✅ ❌ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌

get_lldp_neighbors_detail ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ❌

Page 22: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM 情報取得メソッド対応表2/2

22※v1.2時点。ベンダーによって対応の差がある。詳細・引用元: https://napalm.readthedocs.io/en/latest/support/index.html

EOS FORTIOS IOS IOSXR JUNOS NXOS PANOS PLURIBUS ROS VYOS

get_mac_address_table ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ❌

get_network_instances ✅ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌

get_ntp_peers ❌ ❌ ❌ ✅ ✅ ✅ ❌ ❌ ❌ ✅

get_ntp_servers ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ❌

get_ntp_stats ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ✅

get_optics ✅ ❌ ✅ ❌ ✅ ❌ ❌ ❌ ❌ ❌

get_probes_config ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ❌

get_probes_results ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ❌

get_route_to ✅ ❌ ❌ ✅ ✅ ❌ ✅ ❌ ❌ ❌

get_snmp_information ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ✅

get_users ✅ ❌ ❌ ✅ ✅ ✅ ❌ ✅ ✅ ✅

is_alive ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅

ping ✅ ❌ ✅ ❌ ✅ ❌ ❌ ❌ ✅ ✅

traceroute ✅ ❌ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ❌

Page 23: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALMによる状態表示例(コード)

23

import napalmfrom pprint import pprint

# ドライバ名を指定してドライバを取得

driver = napalm.get_network_driver("ios")

device = driver(hostname="10.0.0.254", # ログイン先username="test", # ログインユーザー名password="test", # ログインパスワードoptional_args={"secret": "test"} # enableパスワード

)# 接続・ログイン

device.open()# メソッド経由でインターフェース情報を取得

output = device.get_interfaces()# 実行結果の表示

pprint(output)

# 切断

device.close()

junospanosなど

「show interfaces」を抽象化(IOSの場合)

Page 24: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALMによる状態表示例(結果)

24

> python napalm_show.py{'BRI0': {'description': 'N/A',

'is_enabled': False,'is_up': False,'last_flapped': -1.0,'mac_address': 'N/A','speed': 0},

(略)

'GigabitEthernet0': {'description': 'N/A','is_enabled': True,'is_up': True,'last_flapped': -1.0,'mac_address': '60:73:5C:XX:XX:XX','speed': 1000},

'Vlan1': {'description': 'N/A','is_enabled': True,'is_up': False,'last_flapped': -1.0,'mac_address': '60:73:5C:XX:XX:XX','speed': 100}}

コマンド実行結果が各ベンダー共通フォーマットにパース

されて表示される

スクリプト実行

Page 25: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALMによる設定変更例(コード)

25

import napalmfrom pprint import pprint

# ドライバ名を指定してドライバを取得

driver = napalm.get_network_driver("ios")

device = driver(hostname="10.0.0.254", # ログインntc123先username="test", # ログインユーザー名password="test", # ログインパスワードoptional_args={"secret": "test", "inline_transfer": True} # enableパスワード

)# 接続・ログイン

device.open()

# NAPALM 組み込みのNTPピア設定テンプレートを利用し、パラメータを割り当てる

device.load_template("set_ntp_peers", peers=["10.0.0.1 ", "10.0.0.2"])

# 現状コンフィグと候補コンフィグの差分表示

print(device.compare_config())

# コンフィグの反映

device.commit_config()

# 切断

device.close()

■ios用のNTPピア設定組み込みテンプレート

{% for peer in peers %}ntp peer {{peer}}{% endfor %}

Page 26: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALMによる設定変更例(結果)

26

> python napalm_config.py+ntp peer 10.0.0.1+ntp peer 10.0.0.2

差分が表示される

router1# sh run | inc ntpntp peer 10.0.0.1ntp peer 10.0.0.2

設定が入る

NW機器側で確認

スクリプト実行

Page 27: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

NAPALM まとめ

27

多機能で厚い抽象化ライブラリ

Page 28: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

28

4. Ansible

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 29: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansible概要

29

ベンダーA ベンダーB ベンダーC

各ベンダー(OS)の機能ごとにモジュールが

用意されている

A用モジュール群

シンプルな構成管理ツール

B用モジュール群 C用モジュール群

表示コマンド

設定コマンド

ログイン

モード移行

コミット

ログイン

モード移行

表示コマンド

設定コマンド

ログイン

モード移行

コミット

ログイン

モード移行

表示コマンド

設定コマンド

ログイン

モード移行

コミット

ログイン

モード移行

Page 30: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansible概要

エージェントレスな構成管理ツール

YAMLで構成定義する(Playbook)

ネットワーク機器にも対応対応の程度は様々直接コマンドを指定する必要があるものもあれば、パラメータを指定するだけでよいものもある。

30

---- hosts: cisco

gather_facts: noconnection: local

tasks:- name: change password

ios_config:lines:

- username ope password opepassprovider: "{{ cli }}"

Playbook(YAML)

SSH等

Page 31: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansible対応機種(NW機器)

31

A10 Aos Asa Avi Bigswitch Citrix Cloudengine Cumulus Dellos10 Dellos6 Dellos9

※7/19時点公式ドキュメント上。ベンダーによって対応の差がある。一覧: http://docs.ansible.com/ansible/list_of_network_modules.html

Eos F5 Fortios Illumos Ios Iosxr Junos Lenovo Netconf Netvisor Nxos

Nxos Openswitch Ordnance Ovs Panos Sros Vyos

Network Moduleの数は337

Page 32: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansibleによる状態表示例(Playbook)

32

---- hosts: ciscogather_facts: noconnection: local

tasks:- name: show commandios_command:

commands: # 実行したいコマンドの指定

- show ip interface briefprovider: "{{ cli }}"

register: result # 結果を変数へ保存

- name: DEBUGdebug: var=result. stdout_lines # 結果を表示

vars:cli: # 対象ホストと認証情報の指定

host: "{{ inventory_hostname }}"username: "{{ ansible_user }}"password: "{{ ansible_password }}"authorize: trueauth_pass: "{{ cisco_enable_secret }}"

[cisco]10.0.0.254

[cisco:vars]ansible_user=testuseransible_password=testpasscisco_enable_secret=testenable

[Playbook] [インベントリファイル]

Page 33: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansibleによる状態表示例(結果)

33

> ansible-playbook ansible_show.yml

PLAY [cisco] ***********************************************************************************************************

TASK [show command] ***********************************************************************************************************ok: [10.0.0.254]

TASK [DEBUG] ***********************************************************************************************************ok: [] => {

"result.stdout_lines": [[

"Interface IP-Address OK? Method Status Protocol","GigabitEthernet1 10.0.0.51 YES NVRAM up up ","GigabitEthernet2 unassigned YES NVRAM up up ","GigabitEthernet3 unassigned YES NVRAM up up ","GigabitEthernet4 unassigned YES NVRAM up up"

]]

}

PLAY RECAP ***********************************************************************************************************10.0.0.254 : ok=2 changed=0 unreachable=0 failed=0

playbook実行

コマンド実行結果が表示される

Page 34: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansibleによる設定変更例(Playbook)

34

---- hosts: ciscogather_facts: noconnection: local

tasks:- name: config testios_config:

parents: # 実行したいコマンドの指定

- interface GigabitEthernet1lines:- description ***test from ansible***

provider: "{{ cli }}"

vars:cli:host: "{{ inventory_hostname }}"username: "{{ ansible_user }}"password: "{{ ansible_password }}"authorize: trueauth_pass: "{{ cisco_enable_secret }}"

[cisco]10.0.0.254

[cisco:vars]ansible_user=testuseransible_password=testpasscisco_enable_secret=testenable

[Playbook] [インベントリファイル]

Page 35: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansibleによる設定変更例(結果)

35

router1#sh run int gi1Building configuration...

Current configuration : 152 bytes!interface GigabitEthernet1description ***test from ansible***vrf forwarding MANAGEMENTip address 10.0.0.51 255.255.255.0negotiation autoend

設定が入る

NW機器側で確認

Playbook実行

> ansible-playbook ansible_config.yml

PLAY [cisco] ********************************************************************************************

TASK [config test] **************************************************************************************changed: [10.0.0.254]

PLAY RECAP **********************************************************************************************10.0.0.254 : ok=1 changed=1 unreachable=0 failed=0

設定変更されたこを示す

Page 36: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansible デモ

36

デモ画面をご覧ください

ルーター

(1) Playbookをあらかじめ定義

(2) Playbookコマンドを実行 (3) Playbookに応じた設定変更を実行

デモ内容【設定変更】

Page 37: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Ansibleまとめ

37

シンプルな構成管理ツール

Page 38: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

38

5. Salt

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 39: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Salt 概要

39

ベンダーA ベンダーB ベンダーC

表示コマンド 表示コマンド 表示コマンド

設定コマンド 設定コマンド 設定コマンド

ログイン ログイン ログイン

モード移行 モード移行 モード移行

コミット コミット

モジュールとして抽象化コミット

多機能な構成管理ツール

設定コマンドはごく一部表示コマンドは一部

Page 40: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Salt概要

マスター/エージェント型の構成管理ツール

YAMLで構成定義する(State)

高機能イベントドリブンの仕組み、スケジューラー、Web

APIもあり

ネットワーク機器にも対応 v2016.11.0でNAPALMを統合(今回の紹介対象)

40

update_ntp_config:netntp.managed:

- servers:- 10.0.0.1- 10.0.0.2

StateSSH等

※masterless という構成もあり

つい先日のアップデートv2017.7.0 でさらに強化

Page 41: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Saltの主な用語

Master:マスター

Minion:エージェント。Masterから指示を受ける

Grains:機器の基本データを保存する仕組み

Pillars:任意のデータを保存する仕組み

41

Master

指示

Minion

ZeroMQ

Page 42: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

SaltによるNW機器対応の仕組み

「Proxy Minion」を経由してNW機器に指示を出す

42

Master

指示

Proxy Minion

指示

SSH等

1台のサーバーでMaster/Proxy Minionを兼用してもOK

NW機器

Page 43: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Salt 対応機種(NW機器)

43

EOS

JunOS

IOS-XR

FortiOS

NXOS

※NAPALM v1.2 時点。ベンダーによって対応の差がある。一覧: https://napalm.readthedocs.io/en/latest/support/index.html

IOS

Pluribus

PANOS

MikroTik

VyOS

基本的に NAPALM と同様

Page 44: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

SaltからNW機器への接続設定

44

proxy:proxytype: napalmdriver: ioshost: 10.0.0.254username: testuserpasswd: testpass

base:device1:- device1

/etc/salt/pillar/device1.sls/etc/salt/pillar/top.sls

※上記以外にもproxy minionのデーモン設定などが必要

Proxy minion定義(NW接続情報)

IDと.slsファイル(右記)との関連付け

Master Proxy Minion NW機器

NW機器に接続するための設定ファイル

Page 45: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Saltによる状態表示例(コマンド・結果)

45

> salt -G "vendor:cisco" grains.item vendor os model interfaces serial

device1:----------interfaces:

- GigabitEthernet1- GigabitEthernet2- GigabitEthernet3- GigabitEthernet4

model:CSR1000V

os:ios

serial:9KX********

vendor:Cisco

saltコマンド実行

情報が表示される

vendorがciscoの機器の指定した情報を取得

Page 46: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Saltによる設定変更例(state)

46

include:- ntp

update_ntp_config:netntp.managed:- servers:

- 10.0.0.1- 10.0.0.2

/etc/salt/tates/router/ntp.sls/etc/salt/tates/router/init.sls

NTPサーバーの参照定義stateファイルのinclude

Page 47: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Saltによる設定変更例(結果)

47

router1#sh run | inc ntpntp server 10.0.0.1ntp server 10.0.0.2

設定が入る

NW機器側で確認Saltコマンド実行

> salt "device1" state.sls router.ntpdevice1:----------

ID: update_my_ntp_configFunction: netntp.managedResult: TrueComment: Started: 09:43:43.301443

Duration: 32133.92 msChanges:

----------

servers:----------

added:- 10.0.0.1- 10.0.0.2

Summary for device1------------Succeeded: 1 (changed=1)Failed: 0------------Total states run: 1Total run time: 32.134 s

設定変更されたことを示す

Page 48: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Salt デモ

48

デモ画面をご覧ください

ルーター

ntp.servers:- 172.16.0.1- 172.16.0.2- 172.16.0.3

(1) ルーター設定用の定義ファイルを編集・保存

(2) 定義ファイルの更新を検出 (3) 定義ファイルに応じた設定変更を実行

デモ内容【イベントドリブンな設定変更】

Page 49: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Salt まとめ

49

多機能な構成管理ツール

Page 50: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

50

6. 比較

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 51: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

比較 1/2

51

Netmiko NAPALM Ansible Salt

種別 Pythonライブラリ 構成管理ツール

利用方法 Python のコードにて自動化する 定義ファイルやツールのコマンドにて自動化する

コーディング不要× △

一部CLIあり● ●

マルチベンダー抽象化

設定コマンド

×コマンド直接指定

△ごく一部

×ベンダー別

モジュールを利用(抽象化アプローチが

異なるため)

△ごく一部

表示コマンド

×コマンド直接指定

△一部

×ベンダー別

モジュールを利用(抽象化アプローチが

異なるため)

△一部

基本操作 ● ● ● ●

(機能概要からの再掲分)

Page 52: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

比較 2/2

52

Netmiko NAPALM Ansible Salt

メリット 対応機種が多い マルチベンダー環境の情報取得に強い

シンプルな構成でスタートできる

イベントドリブン仕組みやWebAPI等もあり高機能

(NAPALMの特徴も持つ)

デメリット 自分で書くコード量が多い

設定系メソッドが少ない

機種ごとにモジュールを使い分ける必要がある(抽象化アプローチが

異なるため)

情報が少ない

Googleヒット件数(*1) 12,400 186,000 3,550,000 489,000

フォーク数 265 347 8,348 3,648

Slackメンバー数(Network to Code Slack 内)

491 728 986 285

すべて2017/07/19現在*1 NAPALM は「NAPALM python」として検索

Page 53: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

ツールの選定ポイント

53

管理対象機器に対応しているかどの程度対応しているかも確認する

コードを書くことを良しとするか、しないか 良しとしない場合はAnsibleやSaltのような構成管理ツール

シンプル or 高機能高機能なものは学習コストが高い。

どの程度抽象化したいか 例えば、TeraTermマクロより少し楽になればよい程度であればNetmiko

管理対象機器のベンダー数はどの程度か Ansibleはベンダーごとにモジュールを使い分ける必要がある

既存で導入している構成管理ツールはあるか ある場合は統一する方が良いのでは

Page 54: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

54

7. まとめ

全体像 Netmiko NAPALM Ansible Salt 比較 まとめ

Page 55: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

まとめ

55

ご紹介したツール類 Netmiko:シンプルで薄い抽象化ライブラリ

NAPALM:多機能で厚い抽象化ライブラリ

Ansible:シンプルな構成管理ツール

Salt:多機能な構成管理ツール

様々なNW機器や仕様があるため、それぞれツールが対応している機器や特徴を理解して

適材適所で活用していきましょう。

Page 56: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

これから

56

•設計実装スキル

•文化形成・・等

仕様

•標準化

•API拡充・・等

ツール

•構成管理ツール

•ライブラリ・・等

人、ツール、仕様がすべて揃った自動化の世界を目指しませんか?

ここを目指す

Page 57: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

参考情報(Web)

57

Netmiko Tutorial

https://pynet.twb-tech.com/blog/automation/netmiko.html

NAPALM 続・マルチベンダルータ制御APIライブラリ NAPALMを触ってみた

http://qiita.com/taijijiji/items/9dfcaa6d868958985095

NAPALMで作るネットワークオペレーション自動化への道のり https://www.slideshare.net/ssuser6a8d29/napalm

Ansible Ansible でネットワーク機器を操作したい時に参考になりそうな日本語情報

http://tekunabe.hatenablog.jp/entry/2017/04/06/231243

Salt Salt によるネットワーク自動化の紹介(2017年5月版)

https://ripe74.ripe.net/presentations/18-RIPE-74-Network-automation-at-scale-up-and-running-in-60-minutes.pdf

全体 ネットワーク自動化アンケート結果(NetDevOps Survey - Fall 2016)

https://docs.google.com/forms/d/e/1FAIpQLSdiBNMK0ZUmgBSNEaOWa-YHGQ4AlZo7EhB52_dXzvMqic3eHA/viewanalytics

Page 58: ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

参考情報(イベント・書籍)

58

Ansible Meetup in Tokyo 2017.09

書籍「Network Programmability and Automation」

https://ansible-users.connpass.com/event/62508/

Chapter 1 Software Defined NetworkingChapter 2 Network AutomationChapter 3 LinuxChapter 4 PythonChapter 5 Data FormatsChapter 6 Network Configuration Templating

Chapter 7 APIsChapter 8 Source ControlChapter 9 DevOpsChapter 10 Continuous IntegrationAppendix A Text EditorsAppendix B Docker NetworkingAppendix C Open vSwitch

2017年10月発売予定(7月調査時点)

9/1(金) 19:00~@恵比寿