• EOS Ansibleの対応について

 
 
Print Friendly, PDF & Email

この記事ではArista EOSとRedhatのAnsibleの対応および実際の実行例などに関して書いてみます。

概要

AnsibleはRedhatが管理する構成管理ツールです。

  • 読みやすく
  • エージェントレス
  • 他のオープンソースなどとの連携がしやすい

のが特徴と言われてます。

当初AristaやネットワークベンダーはRoleという形でモジュールを公開していましたが

Ansibleのバージョン2.1.0より標準でArista EOSをサポートにする様になりました。

Ansibleモジュール

Ansibleにてサポートされているモジュールはの主なものとして下記の様なものがあります。

eos_command – Arista EOSの為の管理コマンド実行

eos_config – Arista EOSの設定コマンド

eos_eapi – Arista EOS eAPI管理と設定コマンド

eos_facts –Arista EOSを実行してるリモートデバイスの情報を収集

最新のモジュールはこちらを御覧ください。

接続の為の基本的な考え方

通常のサーバー環境もしくは2.1.o以前のArista機器では下記の様な接続方法がなされています。

%e5%9b%b31

Playbookを実行開始→SSHにてリモート環境に接続し、実際のコマンドを発行

%e5%9b%b32

Playbookを実行開始→ローカル環境にてコマンドを作成→eAPIもしくはCLIにてコマンドを実行

この為、Aristaを含む多くのネットワークモジュールでは、ホスト接続の際には意識していなかった

connection: local の記載がPlaybookにて必要になります。

Ansibleの為の準備

EOSではAnsibleに接続するためには下記が事前に必要になります。

  • Ansibleホストに接続する為のIPアドレス設定
  • リモートから接続する為のユーザ名とパスワード
  • eAPIの設定

eos_commandの例

実際のPlaybookを例に解説をしていきます。

---
- hosts: vEOS1
  connection: local
  vars:
   eos_connection:
    host: "{{ inventory_hostname }}"
    username: admin
    password: admin
    tranport: eapi
    use_ssl: false
    authorize: true
  tasks:
  - name: Gather info from Show Version
    eos_command:
     commands:
       - show version
     provider: '{{ eos_connection }}'

playbookで重要なのは

  • hosts:実際に操作する機器となるターゲット
  • tasks:実施する項目
  • handler:何か変更があった時の動作

になります。

本例ではvEOS1というhostsに対して、eos_commandのモジュールを呼び出し、”show version”を実施します。

下記にて実際に動かしたビデオをリンクします。

この様にAnsibleにてネットワーク機器のインベントリー管理などが可能な事が分かります。

eos_configの例

Ansibleでは組み込みでjinjya2テンプレートを使用する事が出来ます。

本例ではeos_configにてjinjya2テンプレートを用いて

  • vlanの追加
  • インターフェースのアドレス設定
  • OSPF設定

といったEOSの設定を行います。

自動化を考える際に重要になるのは、設定項目のカテゴリ分け(コンテナ化)になると思います。

それぞれの設定項目が各機器に共通なものであるのか、機器固有なものであるのかを把握する必要があります。

本例ではVLAN設定(およびospf設定)は2つのノードに共有な設定になり、インターフェースの設定は機器固有な設定になります。

 

Ansibleのディレクトリ構造ではグループ共有の項目はgroup_vars以下のフォルダにて定義する事が可能です。

本例ではplaybookがjinjya2テンプレートであるvlans.j2を読み出し、テンプレートでは設定方法を定義しています。

各設定項目は共通項目であるため、group_vars/pod1_leafsの内容を読み出します。

各ノード毎の個別の情報はhost_varsのディレクトリを参照にします。

実際に実行したデモ画像が下記になります。

まとめ

Ansibleは読みやすく、エージェントレスです。

Ansible 2.1.0より多くのネットワーク機器を標準でサポートされる様になりました。

従来から使われていたアプリケーションでの展開に加え、多くのクラウドサービスでのサポートも開始したことで、ネットワークに関する全ての管理をAnsibleのみで行う運用も可能かもしれません。

参考URL

Arista + Ansible – Getting Started

本記事で用いたPlaybookなど

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: