てくなべ (tekunabe)

ansible / network / automation

[Ansible] assert モジュールで変数の型チェックする

はじめに Ansible の変数では様々な型が扱えますが、基本的にゆるめなため、型をチェックしたいことがあるかもしれません。 いままでは、assert モジュールと、type_debug フィルターを組みわせるチェックする方法しか思いつかなかったのが、こちらを拝見し…

[Ansible] CSV ファイルを YAML ファイルに変換する

はじめに 以前の記事で、CSV ファイルをリストやディクショナリとして読み込む read_csv モジュールをご紹介しました。 tekunabe.hatenablog.jp to_nice_yaml フィルターと組み合わせると、CSV ファイルを YAML ファイルに変換できます。 この記事では、簡単…

[Ansible] どこにどういうキーワードを指定できるかは公式ドキュメントの Playbook Keywords で分かる

他人の書いた Playbook を見て「そのキーワード(ディレクティブ)ってそこにも書けるの!?」と思うような経験はありませんでしょうか。 例えば、以下の Playbook をご覧ください。 - name: ios test # (1) hosts: ios gather_facts: false tags: # (2) - i…

[Ansible] リストの中から正規表現でマッチする要素を取り出す select('match', regexp)

はじめに Ansible が内部的に利用している Jinja2 には select という、リストに対して様々な操作をするフィルターがあります。 ドキュメントの例には載っていませんが、match というキーワードを利用すると、正規表現をつかった抽出ができます。と、同僚に…

Cisco DevNet Associate Exam v1.0 (DEVASC 200-901) に合格しました

はじめに 2020/02/24 にシスコ認定技術者試験の制度が大きく改定されました。 それに伴い新しく始まった、ネットワーク自動化、プログラマビリティに関する資格である DevNet Associate Exam v1.0 (DEVASC 200-901) を受験して合格しました。 この記事では私…

[Ansible] Junos の interface の状態を debug で表示する(display json 編)

はじめに 以前の記事で、gather_facts を利用して Junos のインターフェースの状態を取得して debug で表示するという Playbook をご紹介しました。 tekunabe.hatenablog.jp 今回は普通に show interfaces terse コマンドを利用します。ただし、せっかく JSO…

[Ansible] Junos の interface の状態を debug で表示する(gather_facts 編)

はじめに 以下の記事で、Junos のインターフェースの状態を取得して debug で表示するという Playbook が紹介されていました。 qiita.com 面白いネタだなと思って、拝見しました。特に、以下のディクショナリをループする書き方が参考になりました。 with_it…

[Ansible] 最初の文字だけ大文字に変換する capitalize フィルター

capitalize フィルターは、最初の文字だけ大文字に変換するものです。 Ansible の公式ドキュメントの Filter ページには載っていませんが、Jinja2 のドキュメントに載っています。 以下に、使用例を紹介します。 --- - hosts: localhost gather_facts: false…

ネットワーク設定自動化で、いつ、何を確認するか(JANOG45 の Fastly さんの発表から学ぶ)

はじめに JANOG45 Meeting in Sapporo で、Fastly の土屋さんから「急成長を支えるFastlyスケーラブル・グローバルネットワーク」という発表がありました。 www.janog.gr.jp シンプルさを追及した設計や、自動化の話があって大変興味深いものでした。 なかで…

[Ansible] 見やすい json に整形するには to_nice_json フィルターが nice で便利

はじめに Ansible には、テキストデータの内容を整形するための多数のフィルターがあります。 json 形式に変換するフィルターもいくつかあり、そのなかで to_nice_json フィルターは、人にとって見やすく整形するのにとても便利です。 公式ドキュメントでは…

[Ansible] パターン表記したインベントリの確認は ansible-inventory コマンドが便利

はじめに Ansible のインベントリファイルでは、効率よく定義するためにパターン表記ができます。 例えば、 web_[1:3] は web_1 web_2 web_3 と同じです。 この様にパターン表記を利用した場合、うまく解釈されるかどうか事前に確認したくなるのではないでし…

[Ansible] set_fact の利用を減らしたい時に考えること

はじめに set_fact モジュールは、Playbook 内のタスクとして、新たな変数を定義できるモジュールです。 便利といえば便利なのですが、プログラムでいう変数の代入のようなことをタスクで実現させるには、少々大げさに感じることがあります。 set_fact モジ…

[Ansible] OSPF 設定後にネイバーが張られるまで待つ(until の活用)

はじめに Ansible には、指定した条件を満たすまでタスクを繰り返す until というループ機能があります。 until を利用すると、ネットワーク機器に設定を投入した後に、期待した状態になるまで待つ、といった処理を Playbook で実現できます。 この記事では…

[Ansible] 変数名を変数で指定する

はじめに vars lookup pluginは、変数名を引数にして変数の値を取得できます。 この性質を利用すると、変数名を変数で指定して、その値を取得できます。 簡単な例でご紹介します。 サンプル Playbook 値を取得したい変数名を、var_name 変数の値で指定します…

[Ansible] ネットワーク機器のコンフィグ生成ツールとしての Ansible

はじめに Ansible にはネットワークモジュールが多数用意されていて、ネットワーク機器に接続してコマンドを実行できます。 では、機器に接続できない環境で投入コンフィグを準備するにはどのようにすればよいでしょうか。 それには template モジュールが利…

ケーブルの接続先を追う時に面ファスナー(マジックテープ/ベルクロ)を使うと便利

はじめに ケーブルを追っていく方法を紹介した以下ツイートの補足です。 機器につながってるLANケーブルや電源の先っちょをおっていくとき、普通に指でやると途中でわからなくなっちゃったりしますが、マジックテープ的なものをくくりつけて、つるつるーーっ…

[Ansible] httpd.conf を編集後にファイルの検証処理を挟む方法

はじめに Ansible の lineinfile や replace などのファイルを編集するモジュールには validate オプションを備えているものがあります。 validate オプションには編集後のファイルの妥当性を検証するコマンドを指定します。 これにより、編集に問題がなけれ…

[Ansible] lookup plugin 名は大文字小文字を意識しておいた方が良い(2.10から区別される)

はじめに Ansible には lookup plugin という仕組みがあり、ファイルの内容を取得したり、指定したURLの情報を取得したりできます。(一覧はこちら) たとえば、file という lookup plugin であれば、 lookup("file", "ファイル名") のような形式で指定しま…

interface description はメタデータになり得るか

description に何をどう書いてる? ネットワーク機器の物理や論理インターフェースの descripion にどんなことを書いているでしょうか? 自/対向ホスト名 自/対向システム名 大文字?小文字? # は使ってる? 自動化時にプロンプトと誤認知してコケやすい デ…

[Ansible] ansible-playbook コマンドの -l オプションで除外ホストを指定する方法

はじめに Ansible には、対象ホストを制限するためパターンの記法があります。この記法は、Playbook 内の hosts: <pattern> にしか指定できないと思っていたのですが、ansible-playbook コマンドの -l オプション にも利用できるようです。 この記事では、ansible-pla</pattern>…

JANOG45 Meeting in Sapporo に参加して視野を広げる必要性を感じた

はじめに 会場入口、靴の雪は落として入る 2020/01/22-24 に札幌プリンスホテル国際館パミールで開催された JANOG45 Meeting in Sapporo に参加してきました。 本記事では、参加した本会議の各プログラムの一覧と、いくつかピックアップして感じたことなどを…

会社の本棚に追加してほしいとリクエストした技術書42冊

はじめに 先日、会社の本棚に追加してほしい本をリクエストする機会があったので、その時私がリクエストした本を掲載します。 「このラインナップなら、あの本もでしょ!」という本もあるかと思いますが、たぶんすでに本棚にあるものだと思います。あくまで…

[Ansible] json_query フィルターの実体は JMESPath

Ansible で複雑な構造の変数から特定の値を抽出する際、select や map 、list などのフィルターを駆使することがあります。 参考 Ansibleのselectattrとmapとlist - yuhei.kagaya 【Ansible】データから「select * from users where name="hoge"」的な抽出が…

[Terraform/ACI] Terraform の Cisco ACI Provider で APIC を設定する

はじめに 本ブログでは、これまでいくつかのAnsible と ACI 対応についての記事を書いてきましたが、 Terraform も ACI に対応していることを最近知りました。 少しだけ試してみましたのでまとめます。 環境 Cisco DevNet Sandbox APIC 4.1(1k) Terraform v0…

testinfra の警告「UserWarning: Unknown ssh-ed25519 host key for xx」について

はじめに Testinfra は、サーバーの状態をテストできる Python 製のツールです。 実行時に UserWarning: Unknown ssh-ed25519 host key for という警告に出会ったので、原因と対処についてまとめます。 前提 環境や使用したテストコードは以下のとおりです。…

[Ansible] "[WARNING]: Ignoring timeout(10) for ios_facts" の正体とタイムアウトの設定方法

はじめに Ansible 2.9 から、ネットワークモジュールの fact 収集は、gather_fact の指定(デフォルト yes)に基づくように仕様変更されました。 有効の場合は、内部で ios_facts、eos_facts などの、ベンダー別の *_facts モジュールが呼ばれます。 https:/…

自動化よりも設計・管理対象を減らすということ

はじめに 「業務の整理、手順書整備、体制作り・・」など、自動化の以前にすることとしてよく聞きます。 今年は「技術面で自動化以前にできること」に気付かされた年でした。それは、自動化よりも設計・管理対象を減らすということです。 ピンときた2つの資…

[Ansible] Pull Request のコードを試す方法

はじめに Ansible は GitHub 上で日々開発が進められています。 バグや要望などは Issue にあげられ、実装は Pull Request にあげられます。 Pull Request にあげられた追加、修正コードのうち、ansible/ansible リポジトリ にマージされていないものは、そ…

[Python] 2つファイルの内容をリストにして差分を表示する

はじめに こちらの記事を拝見し、紹介されている Python のコードの別解を考えてみます。 fugulog.hatenablog.com 動作確認環境 Python 3.6.7, 3.7.5 やっていること 背景はここでは割愛しますが、docker イメージ名がリスト化された2つのファイル checklist…

[200-901勉強記] 書籍 Understanding and Using APIs を読んだ

はじめに Cisco Certified DevNet Associateの勉強の一環で以下の書籍を読みました。 Understanding and Using Application Programming Interfaces (APIs): Cisco DevNet Associate (DEVASC) 200-901 V1.0 Exam Guide Series (English Edition)作者:Muhamma…