Ansibleでジュニパースイッチを管理する

それはすべて、多数のスイッチ上に一定量のVLANを作成するタスクから始まりましたが、手作業ではやりたくありませんでした。 知識のある人は、Ansibleの使用を勧めました。 マニュアルを使用した経験はまだあまりないため、マニュアルのふりをしていませんが、何が起こったのかを共有したいと思います。 建設的な批判、コメント、提案を歓迎します。







カットの下の詳細。



設置



Centosへのインストールは非常に簡単です。



yun install ansible
      
      





次に、JuniperからAnsibleのモジュールをインストールする必要があります。ここでは、Juniperチームに感謝します。



 ansible-galaxy install Juniper.junos
      
      





コマンドでインストールされたモジュールを確認できます。



 ansible-galaxy list
      
      





インストール後、バージョンを確認できます



 ansible --version ansible 2.3.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
      
      





ansible.cfg構成ファイルは、ログファイルへのパスとデバイスのリスト、およびスイッチに接続されたときにローカルストレージでSSHキーチェックを無効にするオプションを定義します。



 [defaults] inventory = /etc/ansible/hosts host_key_checking = False log_path = /var/log/ansible.log
      
      





デバイスのリストは、 hostsファイルにあります 。 ホストはグループ化でき、グループは他のグループのメンバーにすることができます。



 [testswitches] #SWTEST 192.168.8.192 #SWAC_0901 192.168.8.218 [prodswitches] #SWAC_1301 192.168.8.81 #SWAC_1302 192.168.8.82 [allswitches:children] testswitches prodswitches
      
      





スイッチ構成の変更



Ansible Playbook -Ansibleが特定のアクションを実行するシナリオを作成する必要があります。 スイッチ構成を変更する最初のプレイブックはchangeconfig.ymlです。 yml拡張子を持つ空のファイルを作成するだけです:



 #playbook   --- --- #  - name: Juniper Config Changes # ,     playbook hosts: testswitches #,    -    Juniper,    roles: - Juniper.junos connection: local gather_facts: no #     Python,        vars: ansible_python_interpreter: /usr/bin/python #     ,      playbook vars_prompt: - name: USERNAME prompt: Username private: no - name: PASSWORD prompt: Password private: yes #  ,    #timeout   120 ,    commit  EX2200   ,      tasks: - name: Retrieve information from devices running Junos OS junos_config: host: "{{ inventory_hostname }}" username: "{{ USERNAME }}" password: "{{ PASSWORD }}" timeout: 120 port: 22 #  ,         lines: - delete interfaces vme unit 0 family inet dhcp - set vlans vlan10 description "TestVlan" - set vlans vlan10 vlan-id 10
      
      





ansible-playbook changeconfig.ymlコマンドでプレイブックを実行します



 Username: admin Password: PLAY [Juniper Config Changes] ********************************************** TASK [Retrieve information from devices running Junos OS] ok: [192.168.8.218] changed: [192.168.8.192] PLAY RECAP ****************************************************** 192.168.8.192 : ok=1 changed=1 unreachable=0 failed=0 192.168.8.218 : ok=1 changed=0 unreachable=0 failed=0
      
      





出力を少しクリーンアップしましたが、全体的に、接続が成功したこと、変更された= 1-スイッチに変更が加えられたことを示しています。 192.168.8.218では、目的のVLANはすでに



開始する前に、どのような変更が行われるかを正確にテストできます。 これを行うには、 ansible-playbookパラメーターchangeconfig.yml -bDCを指定してコマンドを実行します



変更はログに表示されますが、実際には変更は適用されません。キーCを使用すると確認でき、 bDには違いが表示されます。 次の例では、スイッチの1つがvlan 10に対してSRVという名前で記述されており、ansibleはそれを削除して新しいスイッチを追加し、vlan自体も作成します。



 * [edit vlans vlan10] - description SRV; + description "TestVlan"; + vlan-id 10; changed: [192.168.8.192] ok: [192.168.8.218]
      
      







スイッチからの情報収集



別のPlaybookは、スイッチから必要なデータを収集し、結果をローカルファイルに保存する方法を示しています。 Junosバージョンに興味がありました。 以下では、タスクの一部のみを示します。上記のすべては前のプレイブックに似ています



  tasks: - name: Retrieve information from devices running Junos OS junos_command: host: "{{ inventory_hostname }}" username: "{{ USERNAME }}" password: "{{ PASSWORD }}" timeout: 120 port: 22 commands: - show version #   ,     ,             register: printout - name: Save Output #debug: msg="{{printout.stdout_lines}}" lineinfile: path: versions.log create: yes line: "{{printout.stdout_lines}}"
      
      





デバッグのために、コマンドansible-playbook -vvv getversion.ymlでプレイブックを実行できます

また、すべてのログは構成で指定された/var/log/ansible.logにあります。



一般的に、私はAnsibleが好きでした、私は学び続けます、あなたの注意をありがとう。



All Articles