Ansible study1

6,443 views
6,414 views

Published on

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,443
On SlideShare
0
From Embeds
0
Number of Embeds
3,521
Actions
Shares
0
Downloads
25
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Ansible study1

  1. 1. JUNOS MODULE IN Ansible Study #1 - 06/10/2014 Hideki Saito { twitterid: @saito_hideki } * Internet Initiative Japan Inc.
  2. 2. AGENDA WHO AM I MOTIVATION ABOUT JUNOS WHAT IS NETCONF CONFIGURE NETCONF ON JUNOS JUNOS MODULE
  3. 3. おまえだれよ? さいとうひでき TwitterID: @saito_hideki 所属: 株式会社インターネットイニシアティブ 仕事: クラウド関連のちょっとした開発とか運用とかリサー チとか、ちょっとした仕事で食ってます 趣味: コンテナ型データセンタの運用とOpenStack
  4. 4. MOTIVATION 日々の業務で繰り返し行われるシステム構築作業を自動化する一環 として、OSのプロビジョニング作業の中で[2,4]を行うワークフロー を人手に頼らず自動化して、単純だがミスの許されない作業から開 放されたい。 例 ∼ 大まかなシステム構築作業の流れ ∼ 1. Cobblerなどのプロビジョニングシステムでデプロイ設定を実施 2. サーバを収容するスイッチポートのVLANをサービス用からのデプロイ用に変更 3. サーバにOSをプロビジョニングしてサービス用設定を実施 4. サーバを収容するスイッチポートのVLANをデプロイ用からサービス用に変更 5. サーバ再起動
  5. 5. ABOUT JUNOS JUNOSはJuniper Networks社製のネットワーク機器に採用され ているFreeBSDベースのオペレーティングシステム CLIやSNMPなどの従来の設定方式の他にJUNOscriptやNETCONF といった、より進んだリモート管理手法を提供しているのが特徴 http://www.juniper.net/techpubs/en_US/junos13.3/information-products/pathway-pages/config- guide-automation/configuration-and-operations-automation.html http://www.juniper.net/techpubs/en_US/junos13.3/information-products/pathway-pages/netconf- guide/netconf.html
  6. 6. WHAT IS NETCONF ネットワーク機器を設定する目的で利用されるXMLベース のプロトコル。SSH経由でリモートから機器の設定を実施 することが可能。 http://datatracker.ietf.org/wg/netconf/charter/ http://en.wikipedia.org/wiki/NETCONF
  7. 7. ENABLE NETCONF ON JUNOS JUNOSが動作するネットワーク機器でNETCONFを有効化する。 例 ∼ EX3300 (JUNOS version 12.3R5.7) ∼ user@ex3300# set system services netconf ssh user@ex3300# commit user@ex3300# show system services ssh { root-login deny; connection-limit 10; } netconf { ssh; }
  8. 8. ANSIBLE MODULES ソースコードの中のAnsibleモジュール ansible/library/ 以下にカテゴリ毎に配置されている。 JUNOSモジュールは ansible/library/net_infrastructure/ 以下に置くこと とした。 実行環境でのAnsibleモジュール $PYTHONPATH/share/ansible/ 以下にカテゴリ毎にインストールされる。 virtualenv環境の場合は $VIRTUAL_ENV/share/ansible/ 以下にカテゴリ 毎にインストールされる。 ドキュメント http://docs.ansible.com/modules.html
  9. 9. JUNOS MODULE JUNOSモジュール(junos_port, junos_vlan)の仕組み 1. ansible, ansible-playbookコマンド実行 2. localhost(ansible-node)にSSHログイン 3. ansible-nodeでXMLファイル生成 4. EX3300にSSH経由でXMLファイルを送信 5. EX3300でcommit check 6. EX3300でcommit AArriissttaaのはあるけど JJUUNNOOSSのは無いから nncccclliieennttライブラリを 利用して自分で書いた… あんまりうれしくない 綿密な設計図 vviirrttuuaalleennvvにも対応
  10. 10. JUNOS MODULE junos_vlanモジュール 操作対象スイッチに対するVLANの作成/削除を行う。 stateがpresentの場合は作成、absentの場合は削除を実施 ! options: node: 操作対象スイッチのノード名またはIPアドレス port: 操作対象スイッチの接続ポート user: ログインユーザID password: ログインパスワード vlan_name: 作成するVLANの名称を指定 vlan_id: 作成するVANのIDを指定 vlan_desc: VLANの概要を記述 state: 作成(present), 削除(absent) virtualenv: virtuanenvパス (例) VLAN作成用XML <config> <configuration> <vlans> <vlan operation="create"> <name>{{ vlan_name }}</name> <description>{{ vlan_desc }}</description> <vlan-id>{{ vlan_id }}</vlan-id> </vlan> </vlans> </configuration> </config>
  11. 11. JUNOS MODULE junos_vlanモジュールを利用してスイッチにVLAN1000を作成する。 1. 設定前の状態 2. 設定実施 (名称: VLAN1000, VLANID: 1000, コメント: TEST_VLAN) 3. 設定後の状態 junos# show vlans VLAN1000 {master:1}[edit] ansible-node$ ansible -i etc/hosts -u $ANSIBLE_USER -k -m junos_vlan -a “node=$NODE user=$USER password=$PASSWD vlan_name=VLAN1000 vlan_id=1000 vlan_desc=TEST_VLAN virtualenv=/home/saitou/devel state=present" localhost SSH password: ******** 127.0.0.1 | success >> { "changed": true, "results": "commit succeeded" } junos# show vlans VLAN1000 description TEST_VLAN; vlan-id 1000; {master:1}[edit]
  12. 12. JUNOS MODULE junos_portモジュール 操作対象スイッチのポートに対するVLAN(いわゆるPortVLAN) の設定を行う。 stateがpresentの場合はVLANを割り当て、 absentの場合は割り当てを解除する options: node: 操作対象スイッチのノード名またはIPアドレス port: 操作対象スイッチの接続ポート user: ログインユーザID password: ログインパスワード interface: ポート番号(例: xe-0/0/0) mode: ポートのモードを指定(access または trunk) vlans: カンマ’,’区切りの形式でポートに設定する VLAN名を指定 interface_desc: ポートの概要を記述 state: 割り当て(present), 割り当て解除(absent) virtualenv: virtuanenvパス (例) PortVLAN設定用XML <config> <configuration> <interfaces> <interface> <name>{{ interface }}</name> <description>{{ interface_desc }}</description> <unit> <name>0</name> <family> <ethernet-switching> <port-mode>{{ mode }}</port-mode> <vlan> <members>{{ member }}</members> </vlan> </ethernet-switching> </family> </unit> </interface> </interfaces> </configuration> </config>
  13. 13. JUNOS MODULE junos_portモジュールを利用してスイッチにPort VLANを設定する。 1. 設定前の状態 2. 設定実施 (名称: VLAN1000, VLANID: 1000, コメント: TEST_VLAN) 3. 設定後の状態 junos# show interface ge-0/0/40 unit 0 { family ethernet-switching; } {master:1}[edit] ansible-node$ $ ansible -i etc/hosts -u $ANSIBLE_USER -k -m junos_port -a "node=$NODE user=$USER password=$PASSWD interface=ge-0/0/40 mode=access vlans=VLAN1000 interface_desc=TEST_NETWORK state=present virtualenv=/home/saitou/devel" localhost SSH password: ******** 127.0.0.1 | success >> { "changed": true, "results": "commit succeeded" } junos# show interfaces ge-0/0/40 description TEST_NETWORK; unit 0 { family ethernet-switching { port-mode access; vlan { members VLAN1000; }}} {master:1}[edit]
  14. 14. JUNOS MODULE 実際に使ってみる (デモ)
  15. 15. JUNOS MODULE まとめ JUNOSを操作するためのAnsibleのモジュールを作って実際に使ってみた。 日常業務の一部を自動化するための手段としてAnsibleを利用して安全に定型作業を 行うことができるようになった。 ピンとこなかったAnsibleのモジュール作成方法がなんとなくわかった。冪等性を担 保するのは俺だった! NETCONF over SSHは便利!だけれども設定変更内容の反映(commit)にEX3300 でVCを組んだ状態で60秒程度かかる(これは自前でスクリプトを書いていた頃から 判っていた)ので手返しはイマイチよろしくない。 Juniper Networksさんには怒られいような気もしているので、どこかで公開した い。
  16. 16. JUNOS MODULE もうちょっと真面目に清書してから公開しよう と思っていますが、もしも いまの状態でも 「このモジュールを使ってみたい…」 というひとは @saito_hideki まで連絡ください。 ご静聴ありがとうございましたm(__)m

×