てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Ansible] callback plugin を yaml に変更して標準出力の改行を見やすくする

■ はじめに Ansible には callback plugin という仕組みがあり、結果出力の形式を変更したりすることができます。 yaml に変更すると、改行コードごとに改行された形で標準出力されます。 本記事でも、callback plugin を yaml に変更する方法ど、出力例をご…

[Ansible] 実験的サポートが開始された名前空間機能 Ansible Collections

はじめに [Ansible] Ansible 2.8 リリース、便利機能や注意点まとめ - てくなべ (tekunabe) でも少し触れたた通り、Ansible 2.8 から Ansible Collections という機能が実験的サポートとして追加されました。 正直、詳細はまだ理解できていないのですが、名…

ネットワーク機器のコンフィグの固有情報を「匿名化」するツール netconan

はじめに ネットワーク機器のコンフィグファイルをどこかに提示する際、パスワードや IP アドレス、SNMP コミュニティ名などの固有情報をマスクしたり、変更したりする機会はないでしょうか。 netconan はそれを自動で変換してくれるツールです。 github.com…

DevLOVE X、やらかした(いい意味で)

■ DevLOVE X とは 2019/06/22 - 23 に、DevLOVE X を開催しました。 devlove.doorkeeper.jp devlove.wixsite.com DevLOVE X は、DevLOVEという開発(Develop)を愛する人たちのコミュニティの10周年を記念したイベントです。ことの始まりは2008年6月21日。つま…

[Ansible] ネットワークプラットフォームのバージョンとサポートの関係

はじめに Ansible は、Ansible 2.8 現在 50以上のネットワークプラットフォームに対応しています。 プラットフォームごとに、どのバージョンでテスト、サポートされているかの情報が、探すのにやや手間取ってしまうので、こちらにリンクまとめておきます。 A…

[Ansible] 小ネタ: Playbook は JSON で書ける

はじめに ※あくまで小ネタの話なので実運用で利用するのはおすすめしません。 YAML は JSON のほぼスーパーセットなのであれば、JSON で Playbook を書けるのでは?と思ったことがあったので試してみました。 Playbook $ cat test.yml [ { "gather_facts": f…

[Ansible] エラー「paramiko is not installed: No module named 'paramiko'」の原因と対策

■ エラーの原因と対策 Ansible コントールノードに paramiko (Python の SSHクライアント実装ライブラリ)がインストールされていない環境で、Ansible を実行すると、以下のようなエラーが表示されて異常終了してしまいます。 fatal: [iosao1]: FAILED! => {"…

[Ansible] Ansible 2.8 リリース、便利機能や注意点まとめ

■ はじめに 2019/05/16 に Ansible 2.8.0 がリリースされました。多数のモジュールの追加や、機能追加、バグ修正、機能削除、機能の非推奨化、仕様変更が含まれています。 大きめなトピックとしては以下のものがあります。 Python のインタープリターを探索…

[Ansible] RESTCONF モジュールで Cisco IOS のインターフェース情報を取得してみる

■ はじめに Ansible 2.8 では、RESTCONF でネットワーク機器の情報を取得したり、設定を変更したりできる RESTCONF モジュールが導入されます。(本記事執筆時現在 RC段階) この記事では restconf_get モジュールを利用して、IOS-XE へ RESTCONF でアクセスし…

[Batfish] JANOG43.5 で「ネットワークコンフィグ分析ツール Batfish との付き合い方」という発表をしてきました

■ はじめに 2019/04/26 に開催された JANOG43.5 Interim Meeting で「ネットワークコンフィグ分析ツール Batfish との付き合い方」という発表をさせていただきました。 janog.connpass.com togetter.com Batfish は、ネットワーク機器のコンフィグのさまざま…

[Batfish] question で利用するノードやインターフェースなどの指定方法

question とは ネットワークコンフィギュレーション分析ツール「Batfish」の Python ライブラリである pybatfishでは、question という形で、コンフィグに対してさまざまな検証を行います。question は Available questions というページにまとめられていま…

[Ansible] 「ポート管理表+パラメータ表+Jinja2テンプレートから、L2SWのConfigを自動生成してみた」を Ansible で

■ はじめに 以下の記事(以下、元記事)を拝見し、Ansible でもできるかなと思って試してみました。 qiita.com 開発中の Ansible 2.8 で導入予定の read_csv モジュールを利用しています。現在(2019/04/02)安定版の Ansible 2.7 系では利用できませんのでご…

[Ansible] read_csv モジュールの基本的な使い方(CSVファイルをリストやディクショナリとして読み込む)

■ はじめに 2019年5月リリース予定の Ansible 2.8 では、CSV ファイルをリストやディクショナリとして読み込む read_csv モジュール が導入されます。カンマ区切りのファイルだけでなく、別のデリミタ(;など)を指定することもできます。 この記事では、 read…

[Ansible] ファイルや変数内の改行ごとに分割してリストにする splitlines() の使い方

■ はじめに ファイルの内容や変数に改行が含まれている場合、1行ごとにリストにしてループなどの処理をしたい場合があります。そんなときに利用できるのが、 splitlines() です。split() が引数で指定した文字で分割するのに対して、splitlines() は改行で分…

[Ansible] グループAとBの両方に所属しているホストを対象にする方法

■ はじめに Ansible では、管理対象のホストをグループ化してインベントリファイルに定義できます。Playbook 内にグループを指定すると、指定したグループに所属するホストのみが対象になります。 では「グループAとBに両方に所属しているホスト」を対象にし…

[Ansible] Playbook(YAML)のための vim のインデント関連設定

■ はじめに Ansible の Playbook を書いて試すときは、普段 VSCode を使っているため、あまり vim は使っていません。ですが、vim しか使えない環境に置かれたときのために vim で Playbook (YMAL) を書くときに便利そうな設定を調べました。 インデント関連…

[Ansible] オフライン状態でモジュールの詳細をなど調べる方法(ansible-doc/ansible-config)

■ はじめに Playbook を書いていく過程で、Ansible の公式ドキュメントを閲覧したり、インターネットで検索したりして、調べることが多いと思います。 しかし、もしインターネットにつながっていない状態で調べことをしたい時はどのようにしたらよいでしょう…

[Ansible] ループにリストの変数を渡すときの(私が)忘れがちな挙動差分

■ はじめに ループするためにリストの変数を渡すときに、以下の2パターンを特に区別なく使ってしまうことがあります(私が)。 pattern1 - name: pattern1 debug: msg: "{{ item }}" with_items: "{{ test_list }}" # ここにリストの変数を渡す pattern2 - n…

[Ansible] インベントリファイルを YAML 形式で書く

■ はじめに Ansible のターゲットホストの情報を定義するインベントリファイルは、INI 形式の他にも YAML 形式でも定義できす。 この記事では、2つの例をとって ini と YAML を比較しながら YAML でのインベントリファイルの書き方を説明します。 動作確認環…

[Ansible] 環境変数を取得する ansible_env.hoge と lookup("env", "hoge") の違い

■ はじめに Ansible には 環境変数を取得するための方法として、ansible_env 配下の変数を参照する方法と、 lookup("env", "hoge") のように loopkup プラグインを利用する方法があります。これらは性質が大きく異なります。 この記事では簡単な例で動作を確…

[Ansible] Jinja2 でループインデックス(index/index0)などの特殊変数を利用する

■ はじめに Ansible というより、Jinja2 の機能ですが for によるループの中で、今何番目のループであるかを示すループインデックスなどの特殊な変数を利用できます。 例 変数名 値 loop.index 1 から始まるインデックス loop.index0 0 から始まるインデック…

[Ansible] 任意のfactsを定義できる local facts (custom facts) の定義方法

■ はじめに Ansible では、ホスト名やインターフェースなどのシステムの基本情報を fatcs (ファクト)という単位で収集して管理します。通常、Ansible によって決められた情報が対象になりますが、任意の情報を facts として管理するための local facts (cu…

[Ansible] file モジュールの基本的な使い方(ファイルやディレクトリの操作)

■ はじめに Ansible には、ファイル属性の設定やディレクトリの作成などができる file モジュール があります。 この記事では、 file モジュールの公式ドキュメントに記載されている使用例をベースにして、使い方を説明します。 なお、公式ドキュメントの使…

[Ansible] template モジュールの基本的な使い方(Jinja2テンプレートからファイル生成)

■ はじめに Ansible には、Jinja2 というテンプレートエンジンによるテンプレートファイルを利用してファイルを生成してリモートに送れる template モジュール があります。httpd.conf などの設定ファイルを、変数とテンプレートから生成するといった用途に…

[Ansible] user モジュールの基本的な使い方(ユーザーの作成・削除など)

■ はじめに Ansible には、ユーザーを管理(作成、削除など)する user モジュール があります。 この記事では、 user モジュールの公式ドキュメントに記載されている使用例をベースにして、使い方を説明します。 なお、公式ドキュメントの使用例は、Playboo…

[Ansible] lineinfile モジュールの基本的な使い方(テキストファイルの行単位の編集)

■ はじめに Ansible には、テキストファイルを行単位で編集する lineinfile モジュール があります。httpd.conf などの設定ファイルの設定項目を書き換えるといった用途に利用できます。 この記事では、 lineinfile モジュールの公式ドキュメントに記載され…

[Ansible] service モジュールの基本的な使い方(サービスの起動・停止・自動起動の有効化など)

■ はじめに Ansible には、sytemctl や service コマンドなどによるサービスの管理(起動、停止、再起動削除など)をする service モジュール があります。 この記事では、 service モジュールの公式ドキュメントに記載されている使用例をベースにして、使い…

[Ansible] yum モジュールの基本的な使い方(パッケージのインストールなど)

■ はじめに Ansible には、yum によるパッケージの管理(インストール、更新、削除など)をする yum モジュール があります。 この記事では、 yum モジュールの公式ドキュメントに記載されている使用例をベースにして、使い方を説明します。 なお、公式ドキ…

[Ansible] 認証情報の変数名は ansible_user、ansible_password に統一したほうがよさそう

■ はじめに Ansible で管理対象ホストのユーザー名やパスワードを定義する変数名はいくつかあります。 ユーザ名 ansible_ssh_user ansible_user パスワード ansible_ssh_pass ansible_pasword みなさんはどのよいうに使い分けていますでしょうか。 先日たま…

[Ansible] -i オプションでディレクトリを指定すると複数のインベントリファイルをマージできる

■ はじめに Ansible の管理対象ホストを定義するインベントリは、ansible-playbook コマンドの -i オプションで指定します。スタティックなインベントリでも、ダイナミックインベントリでも同じです。 コマンド例 $ ansible-playbook -i inventory site.yml …