はじめに

前回の記事ではAnsibleは「ネットワーク構築を自動化するツール」であることを紹介し、事前に用意した設定ファイルを使うことで、BGPクロスネットワークを自動構築できることをお見せしました。今回は、その設定ファイルもAnsibleを使い自動生成できるところをご紹介していきたいと思います。

Ansibleで設定ファイルを作成するメリット

記事を読まれている皆さんの中では、わざわざAnsibleを使って設定ファイルを作成しなくても手作業で作成すればよいのではないか?っと思われる方もいらっしゃるかと思います。

 

確かに数台のスイッチの設定ファイルなら良いですが、大規模ネットワークのようなスイッチが数十台以上となってくると非常に時間がかかる作業となります。また、ミスが起こる可能性も大きいです。

 

ただ設定ファイルの内容を見ますとスイッチごとに大きな違いはなく、一部パラメーターが異なるだけではないでしょうか?

 

まさにそういった場面に、Ansibleのtemplateモジュールを使用することで、数十台スイッチの設定ファイルをそこまで苦労せず作成することができますし、将来構成を拡張することも容易に可能です。また、誤字の可能性も大幅に減らすことができます。

 

まとめると以下3点になります。

Ansibleを使用する3つのメリット

このメリットはtemplateモジュールのみでなくAnsibleそのものに対しても当てはまります。Ansibleは、大幅にユーザー負荷を下げてくれる非常に強力なツールです。

Ansibleのtemplateモジュールとは?

そもそもtemplateモジュールとはなんぞや?についてお話していきたいと思います。

 

templateモジュールは、Jinja2といわれるpython用のtemplateエンジンを利用することができるモジュールになります。これにより数十以上の設定ファイルをそれほど苦労せず自動作成することができるようになります。

 

具体的にはJinja2のtemplateファイルによって、for文やif文などの制御文と変数を組み合わせて使用することができ、スイッチごとにパラメーターを変更した設定ファイルをまとめて作成することが可能です。

 

それでは実際に動作させて動きをお見せしていきたいと思います。

Ansibleで設定ファイルの自動作成

それでは実際にAnsibleを使って設定ファイルを作成していきます。今回はOcNOSでBGPクロスネットワークを構成できるstartup-configを作成していきます。設定を適用後に構築されるネットワークは以前の記事で作成された構成と全く同じになります。

 

環境

 ・サーバー

  ‐Ubuntu 16.04

 ・ホワイトボックススイッチ

  ‐Edgecore : AS7726-32X x 2 & AS7326-56X x 2

 ・NOS

  ‐OcNOS 1.3.9

BGPクロスネットワーク図

Ansibleのディレクトリ構成

 

├── hosts  #インベントリーファイル

├── make_conf.yaml  #Playbookファイル   

└── roles

    │

    ├── leaf

    │   │

    │   ├── tasks

    │   │  └── main.yml  #leafのconfigを作成するtask

    │   │

    │   ├── templates

    │   │  └── leaf.j2  #leaf用Jinja2 templateファイル

    │   │

    │   └── vars

    │         └── main.yml  #leafスイッチの変数を格納

    │ 

    └── spine

           │   

           ├── tasks

           │  └── main.yml  #spineのconfigを作成するtask

           │

           ├── templates

           │  └── spine.j2  #spine用Jinja2 templateファイル

           │

           └── vars

                  └── main.yml  #leafスイッチの変数を格納

 

下記のように設定ファイル(hosts, Playbook)を設定します。

※これからご紹介する設定ファイルは本記事の最後にある資料ダウンロードフォームのアンケートにご回答いただけますと、ダウンロードできるようになっています。

 

hosts

 

Playbook

 

続いてrolesディレクトリーのspineの中身になります

spine/tasks/main.yml

上記は、templateモジュールを使い設定ファイルを作成後、/tmp/confgsディレクトリーにコピーするtaskになります。

 

spine/templates/spine.j2

Jinja2のtemplateファイルではif文やfor文を使用することで、スイッチごとに異なるパラメーターを持つ設定ファイルを作成することが可能です。

上図では赤字が変数、青字がif文, for文の箇所になります。

spine/vars/main.yml

templatesで使用される変数をまとめたファイルです。

rolesディレクトリーのleafについてはspineとほぼ同じため割愛します。

AnsibleでPlaybookを実行

続いて上記で記述したPlaybookを実行していきます

Playbook実行画面

 

正しく実行でき、4つの設定ファイルが作成されることが確認できます。

作成された4つの設定ファイル

続いて作成したファイルを各スイッチへ適用いたします。

(本記事ではご紹介しませんが、OcNOSの設定をAnsibleを使いホワイトボックス自動投入させることももちろん可能です。)

 

 

設定を適用後、BGPセッションが正常に確立されことが確認できます。

BGP結果

また、ルートも広報されており、各スイッチのloopbackへpingが飛ぶことが確認できます。

BGP ping実行結果

以上がAnsibleを使った設定ファイルの自動作成方法になります。

今回まででAnsibleを使った「ネットワーク構築を自動化するツール」を紹介する記事は一旦終わりになります。次回はスイッチの構築段階を自動化するZTPを紹介いたします。

資料ダウンロードフォーム

本記事で使用されている設定ファイルは以下「資料ダウンロードはこちら」よりアンケートにご回答いただきますと資料ダウンロードのご案内メールに記載されているURLよりダウンロードができます。

最後に

 

 

マクニカではオープンネットワーキングを実際に体験し、試験や検証を行える環境をリモートで提供するサービスのご用意がございます。基本構成での検証では無償でご利用可能となっております。より詳細は以下に記載がございますのでもしご興味がございましたらご覧ください。

お問い合わせ

本記事に関してご質問などありましたら、以下「お問い合わせはこちら」よりお願いします。

 

他のOpen Networking記事

以下「Open Networking Blog 記事一覧」より、Open Networkingに関わる他の記事をご覧いただけます。

Open Networking Blogとは?

さまざまなOpen Networking(オープンネットワーキング)に関わるトピックを分かりやすく説明している技術情報ページです。