Slide 1

Slide 1 text

ホワイトボックススイッチを Ansibleで操る話 Ansible Night in Tokyo 2019.07 July 30, 2019 Masaru OKI @masaru0714

Slide 2

Slide 2 text

自己紹介 ● 名前 沖 勝 ● Twitter @masaru0714 ● 経歴 沖電気系ソフトウェア開発会社→IIJ ● がっつりプログラマーやってましたが最近はインフラエンジニア的お仕事 2

Slide 3

Slide 3 text

Agenda ● ホワイトボックススイッチ? ● ホワイトボックススイッチ用OS ● ホワイトボックススイッチ用OSのAnsible対応状況紹介 ● まとめ 3

Slide 4

Slide 4 text

ホワイトボックススイッチ? ● L2スイッチ、L3スイッチ、ルータ製品だがハードウェアのみでOSなし ● PCのように、OSをインストールして使う ● 中身は、PCからビデオとサウンドをなくしてスイッチチップを載せたもの ● パケット転送処理はスイッチチップがハードウェアで実行する ● チップ制御やプロトコル処理などはCPU(つまりソフトウェア)で実行する CPU メモリ SSD スイッチチップ Ethernetポート プロトコル処理 パケット転送処理 4 OS(選んで入れる)

Slide 5

Slide 5 text

ホワイトボックススイッチ用OS ● 商用、OSSいろいろ存在する ● Linuxをベースにスイッチチップ制御やCLI、APIを付加したものが多い ● 商用 ○ Cumulus Linux ○ PicOS ○ OcNOS ○ 他いろいろ ● OSS ○ SONiC ○ OpenSwitch (OPXとも呼ばれる) ○ Open Network Linux ○ 他いくつか 5

Slide 6

Slide 6 text

ホワイトボックススイッチ用OSのAnsible対応 ● ホワイトボックススイッチ用OSにはLinuxベースのものがいろいろある ● ログインするとbashが起動し、lsなどふつうにできる ● Pythonが最初から入っているものも多い ● 設定はip(8)などLinuxコマンドや、専用コマンドを実行することで可能 ● →ssh公開鍵を登録すればサーバと同様にAnsibleで制御できる(はず) ● 下記のOSに関して、対応状況を調査した ○ Cumulus Linux ○ SONiC ○ OpenSwitch 6

Slide 7

Slide 7 text

Cumulus LinuxをAnsibleで設定する ● NCLUモジュールが用意されているので、それを使い設定できる。 参考記事 https://cumulusnetworks.com/blog/automating-cumulus-linux-ansible/ ● taskの例(記事より引用) - name: Enable OSPF nclu: commands: - add ospf router-id {{ rid }} - add ospf network {{ item.prefix }} area {{ item.area }} atomic: true description: "Enable OSPF" loop: - { prefix: 192.168.0.0/16, area: 0.0.0.0 } 7

Slide 8

Slide 8 text

OpenSwitchをAnsibleで設定する ● サンプルRoleが公式より提供されている https://github.com/open-switch/ansible-opx-examples/tree/master/roles/open-switch.ansible-role-opx-system ● taskの例(サンプルより一部抜粋) - name: Add new ip v4 route with nexthops command: "ip route add {{ outer_item.ip_and_mask }} {{ nexthop_res }}" when: - outer_item.state is undefined or outer_item.state != "absent" - outer_item.ip_and_mask - outer_item.nexthop_ip is defined and outer_item.nexthop_ip - name: Add new ip v4 route with interface command: "ip route add {{ outer_item.ip_and_mask }} dev {{ outer_item.interface }}" when: - outer_item.state is undefined or outer_item.state != "absent" - outer_item.ip_and_mask - outer_item.interface is defined and outer_item.interface - outer_item.nexthop_ip is undefined or not outer_item.nexthop_ip 8

Slide 9

Slide 9 text

SONiCをAnsibleで設定する ● Roleが公式より提供されている https://github.com/Azure/sonic-mgmt/tree/master/ansible が、旧バージョン対応で古く、最新のSONiCでは不適合な部分があるようだ ● 自作する場合、設定用にconfigコマンドが用意されているのでそれを呼ぶ ● taskの例 - name: add ip address command: "config interface ip add {{ interface }} {{ ip_addr }}" ● /etc/sonic/config_db.jsonに設定を書いてconfig reloadで反映する方法もある config_db.jsonのテンプレートを用意し埋めることもできる 9

Slide 10

Slide 10 text

まとめ ● ホワイトボックススイッチというネットワーク機器がある ● OSを選択できるがその多くはLinuxベースでCLIを持っている つまり、サーバの制御と同様にAnsibleとの親和性は高い ● Roleやモジュールが提供されているOSもあり、ハードルは高くない 10