てんこ

ブログ名は愛猫(てん)の愛称です。中身は個人のIT系学習記録です。

Ansible Night オンライン!2020.06に参加しました。

先日開催された、Ansible Night オンライン2020に参加しました。

ansible-users.connpass.com

その際の資料や感想について記録したいと思います。


「Ansibleとドキュメント〜公式ドキュメントにあるエモい表現〜」RedHatさん

資料

drive.google.com

感想

RedHatの燃脇さん、齋藤さん、中村さんが、Ansible Engineのドキュメントのエモい表現を語る!ということで、いろいろとぶっちゃけトークが聞けました。

曰く、「Ansibleのドキュメントは稀に見るフリーダムさ」なんだそうです。

実装されてもいない、幻の夢機能が記載されてた時期があったとか…

資料にも記載がありますが、「ヒント、ヒント」なんて、確かに他では目にしないですね…

なお、翻訳チームのおかげで、Ansible 2.9のドキュメントが「日本語化」されたそうです!!素晴らしい!今後ともよろしくお願いいたします!

これでますますAnsibleに触れる人が増えることを祈っております。

アンケートの話題のときの、齋藤さんの「そもそもドキュメントみない?ああ、ソースコード読んでるからドキュメントいらないってことですね」にはさすがに吹きました。

「AnsibleでNW自動化を進める人に伝えたいこと」by @usagi_automate さん

資料

www.slideshare.net

感想

エーピーコミュニケーションズの三枝さんの、NWモジュールを使う上でのサーバモジュールとの違いについて、詳細に解説頂きました。

サーバ系のモジュールと異なり、ネットワーク系モジュールはモジュールの実行がAnsible実行ノード上となり、pingモジュールは疎通確認にならないなど、NWモジュールを触り始める際の要注意点や、冪等性に関する落とし穴(CLIだとスペースを補完してくれるが、冪等性的には異なる設定となるため毎回Changedになる)などをご紹介いただきました。

私もNW屋さんなので、Ansible触り始めのときには疎通確認にも苦労した覚えがあります。この資料を見て少しでも多くのNW屋さんがAnsibleに親しんでもらえればうれしいですね。

他作Playbookを実行することになって読みにくかった話 by @dayamaguchi1さん

資料

speakerdeck.com

感想

エイチームの山口さんの、タイトルから不安を感じるLTです。

山口さんは、一般男性氏の元同僚で現同僚さんとのこと。仲良しか!

Ansibleにおけるいい点で「誰でも同じ作業ができる」というのがありますが、そんなAnsibleでも条件分岐などでよくわからない条件が設定された結果、なんで動くかよくわからないという悲しいPlaybookに頭を悩まされたそうです。

私は一人でAnsibleやってるので、引継ぎとかうらやましい限りだったりするのですが、他のスクリプトでも条件分岐はちょいちょいハマってますので、Playbookを自作するときはわかりやすさを心掛けたいなと肝に銘じました。

Ansible roleのCIをGitHub Actionsで行う by @ma2muratomonoriさん

資料

github.com

感想

普段からTwitterでもAnsibleを用いたCI/CDについて、様々な見解をつぶやかれている@ma2muratomonoriさんの、GitHub Actionsを用いたCIに関するLTでした。

CentOS7に対してcowsayをインストールする際の実際のサンプルコードを用いたCIのイメージを詳細に解説していただきました。

複数のVMが並列で起動しテストを実施する例の中で利用されたAnsibleは最新βの2.10.0b1とansible-base!!

バージョン違いも並列で簡単にチェック対象にできるというのは、やはりIaCの強味だなあと改めて思いました。

なお、その後AnsibleとMoleculeについてのこんなツイートもされていました。またお勉強させていただきます!

Kubernetesクラスタ構築を例に既存の作業をAnsible化するポイント by @zaki_hmkcさん

資料

speakerdeck.com

感想

やきうの人のLTでした。

kubeadmという、K8S公式インストーラの一つを用いたK8Sクラスタ構築自動化に関するPlaybookの紹介と、実際の構築におけるkubeadmのドキュメント上の要注意ポイントなどを解説していただきました。

実際のPlaybookはこちら。(↓)

github.com

業務でK8S触る予定ないのですが、簡単に構築できるなら少し試してみようかな…?

センセイ、よろしく!!!(ゝ∀・*)

AWXのプロジェクトを自動同期させたい by @nnstt1 さん

資料

speakerdeck.com

感想

Twitter上でもよくやり取りをさせていただいている、ののしさんの初LT!

「Ansibleユーザ会への物理参加」という、地方民にとてもわかりみの深い目標を掲げてらっしゃいました。私も地方なので初参加のときはテンションあがりました!

内容は、GitLabとAWXを連携させた自動同期ということで、Moleculeまで既に使いこなされており、自分もNWだけでチマチマ遊んでいる場合ではないなあと改めてMoleculeの学習の必要性を感じました。

いつか現地で自動化Tシャツで集合写真撮りましょうね!!

Moleculeのdelegatedドライバ + OpenStackでAnsibleのテストを行う by @miyamadoKLさん

資料

www.slideshare.net

感想

最後はマイクロアドの長田さんの、Moleculeのdelegatedドライバに関するLTでした。

Moleculeのテストを、Dockerコンテナ以外のOpenStackやネットワーク機器などの環境で利用する場合に使う機能とのことで、仮想アプライアンスが用意されないような機器を触っている私も、身に着ける必要がありそうな内容でした…!

とはいえ、現時点ではMoleculeあまりにも無知なので改めて学習してから復習させていただこうと思います!

全般を通して

Molecule祭りだったなーという印象です。昨年のRedhatさんのイベントで「皆さん、Molecule使ってますよね?」と言われてからも全く手を付けていませんでしたが、いい加減覚えていかないといけないなあとヒシヒシと感じました。

ただ、あんまり急いでもアレなのでマイペースで学習を進めていきたいなあと思います。

皆さん結構Ansible Automatesからのハシゴをされていたような感じで、ほとんど聞けなかった私としてはとてもうらやましかったです。(Automatesの内容については、後日配信されるアーカイブ動画などをまた視聴させていただきます。)

ちなみに、ツイートランキングではなんと1位を頂いたそうです。あまり内容のないツイートばかりで申し訳ない…^^;

Ansible飯

Ansible Nightオンラインの後、ZoomでのリモートAnsible飯が開催され、自動化Tシャツ+顔出しで参加をさせていただきました!

途中、よこちさんのZoom画像をそのまま背景にしたりとZoomの背景をいろいろといじって遊んでいました。いたずらしてすみません。

ほぼほぼ自己紹介で終わってしまいましたが、これまでお会いしたことのある方、はじめましての方も含めて、様々な社外のエンジニアの方とリモートでも交流できるのはやはり楽しいなあと感じました。

コロナ禍で年内中は厳しいと思いますが、また落ち着いたら恵比寿で開催していただいて、その際には現地参加で直接顔を合わせたり、LTをしたいなと思いました。

それにむけて、もっとつよつよにならねば…!

ansible 2.10.0b1を #tekunabe で触ってみたメモ

最近毎週土曜日に #tekunabe でよこちさんが配信されている Youtubeを見ているのですが、本日は特別に日曜日にも開催されました。

テーマは「ansible 2.10.0 b1」です。ベータ版の最新版です。

tekunabe.connpass.com

配信に合わせて自身でも操作していましたが、いろいろと分かったことがあります。

既にまとめられているサイトも多いと思いますが、自分なりに理解した内容をまとめてみます。

配信者のよこちさんの当日のふりかえり記事はこちら。

[Ansible] 「つまずき Ansible 【Part7】Ansible 2.10.0b1 でずっこける」ふりかえり - てくなべ (tekunabe)

導入方法

pip で以下のようにインストールします。

pip install ansible-base

結果、以下のようにansible 2.10.0b1がインストールされました。

$ ansible --version

ansible 2.10.0b1
  config file = /home/ansible/ansible-study/ansible.cfg
  configured module search path = ['/home/ansible/a10-ansible/a10_ansible/library']
  ansible python module location = /home/ansible/ansible-study/ansible210b1/lib64/python3.6/site-packages/ansible
  executable location = /home/ansible/ansible-study/ansible210b1/bin/ansible
  python version = 3.6.8 (default, Aug  7 2019, 17:28:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

プラグインやモジュールの分離

イメージとしては、以下のようになるようです。

f:id:tatematsu_san:20200621223711p:plain

上記のように、これまでAnsibleをインストールするだけで使えていたモジュールも、モノによっては別途ansible-galaxyコマンドでCollectionインストールする必要が出てきました。

ansible-baseだけのインストールで入るモジュールの数は、以下のようにたった68個…

配信の際には、debugメッセージの出力をyaml形式に変えるコールバックプラグインもansible-baseだけでは利用できず、「community.general」というcollectionを導入することで利用することができるようになっていました。

このあたり、2.9のリリースの頃からcollectionへの移行の話は出ていましたが、本格的に実装されたということですね。

collectionのインストール方法は以下の通り。

ansible-galaxy collection install <collection名>

※6/22追記

よこちさんもブログに追記していただいていますが、どうやらpip install ansibleであれば、これまで同様、同梱モジュール系も含まれるようです。

コンテナのOSみたいに、最小パッケージとしての「ansible-base」という単位が増えたという捉え方をするのが良いのかもしれませんね。

修正してみたイメージ図がこちら。

f:id:tatematsu_san:20200622202539p:plain

モジュールがどこに移行されたかを調べるには

よこちさんが配信の中でも紹介されていましたが、以下のQiitaの記事に非常にわかりやすくまとめていただいていました。

qiita.com

これは手動で追うのは大変ですね…

ただ、下記にも記載したものを一覧表代わりに使うことはできそうです。

これまでのPlaybookとの互換性は?

上記Qiitaの記事内でも紹介されていますが、ansible_builtin_runtime というものが組み込まれており、現在のところ、これまでのモジュールの指定を新しい指定に変換してくれる機構が動作するため、Playbook自体の修正は必須ではないようです。

ansible/ansible_builtin_runtime.yml at devel · ansible/ansible · GitHub

ただ、あくまでもPlaybookに関してだけであり、モジュールやプラグインなどは別途導入する必要があります。

正式には、collectionで入れたものは、FQCNという書式で書く必要があります。

例)fortinet.fortios.モジュール名

互換性の機能がもし無くなるような場合、Playbook修正祭りが発生しますね…。

今後どうなるかはわからない点なので、要注意ポイントだと思います。

collectionでインストールするものをオフラインで使うには?

さいとうさんが素敵なナレッジをくださいました。ありがとうございます!!

なるほど、オプションでdownloadってやるとアーカイブでダウンロードできて、requirements.ymlとセットで活用すると…

これならオフラインでもだいぶ楽に展開できそうです。

正式リリースは?

2020年8月頃が予定されているとのこと。

今のうちに準備をしておいたほうがよさそうですね…

まとめ

  • 2.10から本格的にcollectionの利用が始まる
    • 今のうちにansible-galaxyコマンドに親しんでおいたほうが良さそう
  • Playbookの修正は必須ではない
    • モジュールやプラグインの多くは別途インストールする必要が出てきた
  • オフライン用のアーカイブオプションが存在する

どなたかの理解の一助になれば幸いです。

おまけ

配信中、少しだけ遊んでた成果がこちら。

てんこ可愛いよてんこ

【最新】Ansibleもくもく会リモート参加の手引き_20200609_v2.xlsx

久々のブログエントリです。

先日、久しぶりにAnsibleもくもく会(以下リンクのイベント)に参加しました。

ansible-users.connpass.com

2019年11月頃までは毎月のように参加していましたが、大分内容について把握でき、他の参加者様の学習の機会を邪魔してしまうのも…という思いからも、しばらく未参加な状態でした。

以前は現地枠+リモート枠でしたが、最近ではコロナの影響もありフルリモートでの開催となっています。 参加手法が大きく変わったこともあり、久しぶりに参加させていただきました。

以前書いた記事をベースに、もくもく会の変化についていろいろと書いてみようと思います。

参加方法の変化

依然のリモート参加との、参加方法の変化について、以下表にまとめます。

No. 項目 以前 最新 備考
1. イベント参加申請 Connpass Connpass 変化なし
2. イベント開催手法 現地+リモート 完全リモート 現地参加も楽しいので、また再開(再会)したいですね…
3. イベント詳細案内 メール(前日) メール(当日) 単純に管理者のメッセージ送信タイミングの問題?
4. 開催回数 同日1回 同日3回 昼間、夕方、夜のように3回開催されるのは参加者側が好きなタイミングが選べるのでとても良い。(中村さんのアナウンスは大変そうですが…)
5. 動画配信手法 BlueJeans Discord※ 特殊なポート解放不要!ありがたい
6. メッセージ配信手法 BlueJeans(チャット) Discord※ BlueJeansのチャットはあまり活用されていなかったのですが、URL案内などで確実に利用されるようになったのはとても分かりやすい
7. 質問方法 GoogleDocs GoogleDocs 変化なし。Discord側でも質問できますが、ログや共有の観点からもGoogleDocs側の利用を推奨
8. 用意される環境 ハンズオン環境(被操作対象のみ) ハンズオン環境(コンソール環境含む) エディタ(VSCode)もターミナルも、ブラウザのみで利用できるのはとても参加しやすい!
9. コンテンツ 日々更新 日々更新 内容が少しずつ改定されています。調整されている方、いつもありがとうございます
10. 成果共有 毎回数名 挙手性 「成果共有枠」という枠がなくなったため。簡単なことでよいので報告してみましょう!(ブーメラン)

※Discordとは、ゲーマー向けに開発されたビデオ通話などのシステムです。

Discord (ソフトウェア) - Wikipedia

1~4(イベントそのもの)について

1,3については、以前とあまり変化ないと思います。

2.(開催手法)について、現地+リモートから、完全リモートのみになっています。私も以前、地方民にもかかわらず現地参加させていただきましたが、現地は現地で楽しいので、落ち着いたらまた現地開催で皆様にお会いしたいですね。

4.(開催回数)について、リモートワークの世間事情に合わせて、日中帯も開催されるようになっています。これはお子さんをお持ちの方には嬉しいところですね。

5-8(イベント開催手法)について

ここが一番大きく変わったところだと思います。

5.動画配信手法について

まず、動画配信手法が、BlueJeansからDiscordになりました。

これまでBlueJeansではUDP5000など一部特殊なポートが必要となり、会社環境などアクセス制限がある環境からの参加が難しかったのではないかと思います。

これがDiscordになることにより、HTTP/HTTPSのみになりましたので、参加の敷居がグッと下がったのではないでしょうか。

6.メッセージ配信手法について

これまでは現地+リモートということもあり、資料などへのアクセス情報が、現地ではホワイトボード+冒頭案内+口頭、リモートでは冒頭案内が中心と、差分がありました。

BlueJeansで案内されるケースもありましたが、チャットの画面に切り替えないとチャットを表示できないことから、そこに案内を張っても目に留まる方/留まらない方が分かれていたと思います。

これがDiscord(メッセージ中心)になることにより、案内が非常にスムーズになったと思います。当日であれば過去ログも閲覧できますし、とてもいい変化だと思います。

7.質問方法について

これは、これまで同様GoogleDocsです。Discordにも#質問 というチャンネルが作られていましたが、質疑の紐づけ(どの問いに対する答えなのか)などの関係もあるため、基本的にはGoogleDocsを利用するのが良いと思います。

8.用意される環境について

いくつか差分がありますので、表形式にします。

No. 項目 以前 最新 備考
1. コンテンツ種別 サーバ編、NW編の2種類 サーバ編、NW編の2種類 変化なし(たまに固有コンテンツあり)
2. 操作環境のアクセス情報 GoogleDocsのリンクからブラウザで参照 GoogleDocsのリンクからブラウザで参照 ブラウザで利用できるVSCodeが追加になり、ここで案内されます!
3. エディタ 操作端末上のローカルエディタ or サーバ上のvim等のCLIエディタ 左記に加え、ブラウザのみで利用可能なVSCode環境が提供 VSCodeのWeb版が使えるのはとても楽ですね!!
4. ターミナル(SSH)接続 操作端末上のターミナルツール 左記に加え、上記VSCode環境からターミナル接続が可能に 外部に対しSSH(TCP22)が解放されていなくても参加できるように!

VSCodeWebブラウザのみで利用できるため、お手軽さが段違いになりました。BlueJeansの差分と合わせて、もくもく可能な環境の制限がかなり緩和されましたね。

もちろん、これまでどおり個人のお気に入りのエディタや自信が気に入っているエクステンションの入ったローカルVSCodeなども利用可能です。

VSCode上からターミナル接続するには、こんな感じ(以下画像)です。(※ただし画像のVSCodeはアプリ版です)

f:id:tatematsu_san:20200614095446p:plain

9.コンテンツの変化

今回、久しぶりにNW編に参加させていただきました。コンテンツは常に公開されています。

github.com

最初のReadmeを見た時には、以前と同じかなーと思ったのですが、後半のTowerのコンテンツなどで、NW機器のConfigバックアップを実施すると自動的にTower上で世代管理され、Restore用のジョブテンプレートに世代のリストが出てくる、というのがとても新鮮で、実運用での活用シーンも踏まえた内容となっており、非常に良かったです!

この変化のために、ジョブテンプレートの権限設定についても、NW機器側だけでなくTower自身に対しての権限も必要となりました。

権限の種別を切り替えないとTower側の権限が出てこず、最初は「おお?ないな?」となりました。当日の質問はこれに関することも多かったですね。

10.成果共有について

固定の成果共有枠がなくなったこともあって、当日の成果共有はゼロ件でした。

私の成果をご紹介します。コンテンツそのものはNW編を選択しており、最後まで完走することができました。

NW編のExecuse7 において、メーカーの異なる各NW機器に対してバナー情報を一括で設定する、という項目があるのですが、そこのバナー情報として、以下の文字列を入れてみました。

 ------------------
< Nyansible!! >
 ------------------
 \ ∧_∧  
 .ミ,,・_・ミ
ヾ(,_uuノ

はい。2バイト文字アリです。絶対に実機ではやりませんね。

にゃんしぶる、について、詳細を知りたい方はこちら

上記の結果ですが、以下のようになりました。Junos優秀!Aristaはがんばった!

ルータ メーカ Playbook結果 バナー
rtr1 Cisco Changed 何も入らず
rtr2/4 Arista Changed f:id:tatematsu_san:20200614093814p:plain
rtr3 Juniper Changed f:id:tatematsu_san:20200614093800p:plain

今後について

ひさしぶりのもくもく会、とても楽しく参加させていただきました。

また6月にはAnsible Automatesや、Ansible Nightなどもあり、6月はイベントが盛りだくさんです。こちらもすべてリモートで参加できるようなので、とても楽しみです。

www.redhat.com

ansible-users.connpass.com

僕は計画が苦手で、克服したいと思っています。

すごく久しぶりのブログエントリです。ポエムです。

このブログは今年1月半ばから更新停止しているのですが、 仕事で忙しい…というよりも、いろいろと心がポキッと折れてしまったためです。 この投稿も、ブログ投稿再開できる一個のきっかけにできれば…

自戒のためにも、現状を書いておきます。

PMP関連

今年、1月2月と会社にお金を出してもらって、PMPの資格試験向けの研修に参加させていただきました。(2月の名古屋開催では、一般男性さんとのAnsible飯が実現できました!)

研修申し込み当時(昨年9月くらい)は割と「PM資格取って実践してやるぜー!!」と息巻いていたのですが、改めてPMBOK体系的に学ぶことで、「自身の行動に関する計画性のなさ」を身に染みて感じました。

仕事での空回り

また、並行して仕事の中でも

  • いろいろと計画をしっかり立てられていないものが破綻したり
  • フォローしてくれるいろんな人に迷惑をかけたり
  • 精神的にダメージを受けてしまったり
  • その結果でパフォーマンスが上がらない

など負のサイクルが続いていました。(今も微妙に残ってます)

目的を見失いかけたり

仕事で空回りした原因でもあり、結果でもあるところなのですが、

  • 「これって本当にやっていて意味があるのかな?」
  • 「これを進めることで、誰がどんな形で幸せになるのかな?」
  • 「もっと他に優先すべきことがあるんじゃないのかな?」

というような、自身では納得感が持てない(と思い込んでいた)仕事を突貫でやることになった結果、「自分は今後どこに向かえばいいんだろう…」という点においても迷子になりかけていました。

自身のこれまでをふりかえって

色々思い返して、以下のようなツイートをしています。

思い出してみた結果、あまり具体的な到達点をイメージしながら物事を進めるのは得意ではなく、頑張っても2週間くらいの手の届く範囲でコントロールできる仕事を繋いできた気がするなあと思い出しました。

多少長期の仕事でうまく勧められたのは、周りがいろいろと気を配ってくれたからだったなあとか。

そんなことを思い返しながら、研修申し込み当初の勢いと、現状のパフォーマンス上がらない状況を比較してしまって、毎日へこんでいる日々でございます。

今後について

仕事の目的、については、最近やっと、「ビジョンまで照らして先を見通せてなかったのが、納得感がなかった原因だな」というのがわかりまして、少しずつ前向きにとらえられるようになってきました。

今でも計画を立てるのは苦手ですが、とはいえ、その苦手を克服するために受けたPMBOK研修でもあるわけです。

それを現場で再認識できた、というのを得られた成果としてとらえ、少しずつ学習・実践していくことで苦手が克服できる!というのを直近の目標として日々精進していきたいと思います。

AnsibleでA10のvThunderをいじってみた

今回は、AnsibleでA10 NetworksさんのvThunderにおいて、ClassListを定義する操作をやってみました。

Ansibleをインストールするだけでは導入されないモジュールをインストールから試すのが初めてなので、そのあたりも書いてみたいと思います。

A10さん機器向けのもくもく会用のコンテンツはこちらで公開されています。

圧倒的感謝!

中を確認してみたら、確かにa10_protocolが必要になってたりなど、最新のモジュールの仕様に合わせたコンテンツになっていました。

Ansible関連の実践記事一覧はこちら


目的

A10Networksさんのモジュールでどんな感じの操作ができるか確認するため。

環境

  • ansible: 2.9.0
  • python: 3.6.8 (virtualenv環境配下)
  • vThunder: 4.1.1-P9 build 105

モジュール実行環境の整備

A10 Networksさんのモジュールの導入方法はこちらに、丁寧に解説頂いています。

https://github.com/kishizuka4989/ansible_training_a10_thuner_adc/blob/master/1.0-adc-primer/202001_Ansible_Guide.pdf

私は、virtualenv環境だったので、以下の流れで実施。

■ 1. virtualenvをActivate

$ source <venv_path>/bin/activate
(venv_name)$ 

■ 2. gitでa10さんのリポジトリからデータをCloneしpipでインストール

$ git clone https://github.com/a10networks/a10-ansible a10-ansible 
$ cd a10-ansible/
$ pip install -e .

■3. 環境変数を修正(導入方法の要点に記載あり)

 $ export ANSIBLE_LIBRARY="/home/ansible/a10-ansible/a10_ansible/library"

■4. ansible.cfgを修正(virtualenv環境なため、これを入れないと、エラーが発生しました)

[defaults]
()
interpreter_python=/home/ansible/p3-ansible29/bin/python3

【参考】発生するエラーの内容

TASK [Create Class] **************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: NameError: name 'module' is not defined

Playbookのリファレンス

モジュールそのもののは、Gitに公開されています。

トップページに簡単な解説がありますが、それ以外のまとまったドキュメントはモジュールの中身を見て使い方を把握する…という感じなようです。

(もしかしたら法人として相談したらリファレンスガイドみたいなPDFを頂けたりするのかしら…)

ただ、いくつかサンプルPlaybookも公開されていますので、Playbook作成そのものにはあまり困らなさそうです。

特徴

上記の公開モジュールのTOPにも記載がありますが、A10さんのモジュールは他のモジュールと少し毛色が違う感じのstateが用意されています。

state 動作 説明
present 作成/上書き いつもの
absent 削除 いつもの
noop 情報取得 指定したモジュールに関連する現状設定取得
get_type: single で指定された要素の情報を取得
get_type: list でモジュールに関連する全情報を取得
get_type: oper でステータス情報を取得?(未確認)
get_type: stats でカウンタ情報を取得?(未確認)※指定なしだとこれっぽい

試しに、適当にclasslistを設定して情報を取ってみたものはこちら。

■取得用のPlaybook

---
- hosts: vthunder
  connection: local
  gather_facts: no

  vars:
    a10_host: "{{ ansible_host }}"

  tasks:
  - name: Create Class
    a10_class_list:
      a10_host: "{{ a10_host }}"
      a10_username: "{{ a10_username }}"
      a10_password: "{{ a10_password }}"
      a10_port: "{{ a10_port }}"
      a10_protocol: "{{ a10_protocol }}"
      name: "listname"
      state: noop
      get_type: single
    register: results

  - name: debug
    debug: 
      var: results

■出力結果

TASK [debug] *********************************************************************************************************************************************
ok: [192.168.10.63] => {
    "results": {
        "changed": false,
        "failed": false,
        "message": "",
        "original_message": "",
        "result": {
            "class-list": {
                "ac-list": [
                    {
                        "ac-key-string": "office365",
                        "ac-match-type": "contains"
                    },
                    {
                        "ac-key-string": "mogemoge.com",
                        "ac-match-type": "equals"
                    }
                ],
                "file": 0,
                "name": "listname",
                "type": "ac",
                "uuid": "d6168ac6-37df-11ea-a057-000c296a0844"
            }
        }
    }
}

注意点

fortios用のモジュールの癖で、情報取得→その要素を使ってPlaybook作成、なんていう流れがあったんですが、A10さんの場合、機器から帰ってくるキーがそのままPlaybook側で使える、というわけではなさそうです。

例:ClassListのタイプ

■情報取得で得られる形式

"type": "ac",

■Playbookでの指定方法

ntype: "ac"

このあたりは一定のルールはなさそうなので、都度モジュールの上のほうを見ながら、Requireを探したりキー情報を探したりする必要がありそうです。

また、fortiosのときにもあった、ハイフンとアンダーバーの変換も実施されているようでした。(こちらも本体内部はハイフン)

作成したPlaybook

前置きが長くなりましたが、こんなPlaybookを作って、ClassListを宣言することができました。

---
- hosts: vthunder
  connection: local
  gather_facts: no

  vars:
    a10_host: "{{ ansible_host }}"

  tasks:
  - name: Create Class
    a10_class_list:
      a10_host: "{{ a10_host }}"
      a10_username: "{{ a10_username }}"
      a10_password: "{{ a10_password }}"
      a10_port: "{{ a10_port }}"
      a10_protocol: "{{ a10_protocol }}"
      name: "listname"
      ntype: "ac"
      ac_list: 
         - ac_match_type: "contains"
           ac_key_string: "office365"
         - ac_match_type: "equals"
           ac_key_string: "mogemoge.com"
      state: present
    register: results

  - name: debug
    debug: 
      var: results


  - name: Write memory
    a10_write_memory:
      a10_host: "{{ a10_host }}"
      a10_username: "{{ a10_username }}"
      a10_password: "{{ a10_password }}"
      a10_port: "{{ a10_port }}"
      a10_protocol: "{{ a10_protocol }}"      
      state: present
      partition: all     

■出力結果

TASK [debug] *********************************************************************************************************************************************
ok: [192.168.10.63] => {
    "results": {
        "changed": true,
        "class-list": {
            "ac-list": [
                {
                    "ac-key-string": "office365",
                    "ac-match-type": "contains"
                },
                {
                    "ac-key-string": "mogemoge.com",
                    "ac-match-type": "equals"
                }
            ],
            "file": 0,
            "name": "listname",
            "type": "ac",
            "uuid": "303d478a-37e8-11ea-a057-000c296a0844"
        },
        "failed": false,
        "message": "",
        "original_message": "",
        "result": {}
    }
}

TASK [Write memory] **************************************************************************************************************************************
changed: [192.168.10.63]

PLAY RECAP ***********************************************************************************************************************************************
192.168.10.63              : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

■WebUI上で作成されたものを確認

f:id:tatematsu_san:20200115224643p:plain

感想

もくもく会以外で実際に触ってみた感想として、初動こそ少し手惑いましたが、本体内でエラーになった場合でもしっかりとリターンメッセージを返してくれたりと、これまで触ってきたfortios用モジュールよりもだいぶ丁寧に作られているなあ、という印象でした。(fortiiosモジュールは、エラーコードしか返してくれないので…)

今回作成したClassListは、前回のFortiosのSSL復号除外リストと同様、HTTPアクセス系の動きをコントロールするために利用します。このリストを共通化しつつForti/A10の各々の形式に変化して投入すれば、やりたいことができそうです。

このような、機器を挟んだ情報の連動をAnsibleを中心に組み立てたいところなので、もう少しいろいろと考えながら検証してみたいと思います。