zaki work log

作業ログやら生活ログやらなんやら

Ansible

Ansible Night Online 2021.07で「タグの継承を知らずにやらかした話」というLT登壇した振り返り

Ansible NightでLT登壇しましたので、その振り返りブログです。(1年ぶり2回目) ansible-users.connpass.com 振り返りといっても、LTでも触れましたが、以前記事にしたものを再構築してLT登壇だったので、詳細は過去記事参照…ということで、主に資料のリンク…

[YAML] 複数行テキストの行頭にインデントを設定するには (Ansible/Kubernetes)

YAMLで複数行のテキストを記述しつつ、その先頭にインデントを設定するにはどうするか。 YAMLの複数行テキスト インデント設定 複数行表記で使用する記号の種類と効果 記号まとめ インデント量の指定 Ansibleの場合は YAMLの複数行テキスト --- data: sample…

[Ansible / AWS] ダイナミックインベントリを使ってEC2接続先を動的に取得してAnsible実行お試し

Ansibleのダイナミックインベントリを使ったEC2アクセスについて、以前試したような試してないような記憶がおぼろげで、メモも無かったので簡単にまとめてみた。 docs.ansible.com 必要パッケージ クラウド上のEC2状態 アクセスキー設定 インベントリファイ…

[Ansible] 省略したいパラメタに変数指定せざるを得ない場合に使う変数omitとdefaultフィルタ

指定が任意なオプション扱いのパラメタで、指定するパラメタが無い場合は未指定にしたいけど、ループ処理などで決まった型の辞書型変数のリストでキーが有ったり無かったりする場合の処理について。 って書いてもうまく伝わらない気もするのでサンプルコード…

[Ansible] ターゲットノードのvenvのPythonを指定して実行する (interpreter_python / ansible_python_interpreter / PYTHONPATH)

コントロールノードでなくターゲットノードで(pipで追加パッケージが必要などの理由で)venvを使いたい場合の方法について。 といっても、venvの中にあるPythonインタプリタのパスをinterpreter_pythonなどで指定すればOK。 Python2/Python3の切り替えでイン…

[VyOS] NAT設定を使ったネットワーク間のルーティング (手動 & Ansible / vyos_config)

VyOS自体のIPアドレス設定は前回までにできたので、ようやく(?)ネットワーク間でNATを使ったルーターとして動作するための設定をやってみる。 (試行錯誤でやってるんで「こうした方がいい」とか「いや、そのりくつはおかしい」とかあったらぜひ教えて欲しい……

Ansibleを使ってVyOSのIPアドレスを設定する

前回セットアップしたVyOSの、まだ設定を残しておいたeth1のIPアドレスをAnsibleを使って設定してみる。 zaki-hmkc.hatenablog.com VyOSのホストとAnsibleを実行するホストの関係は以下の通り。 172.16.1.119のホストにAnsibleがインストールされており、前…

[Ansible] asyncとpollを使った非同期処理とループの並列実行

Ansibleのループ処理はデフォルトでは逐次処理で動作します。 例えばループの回数が5回で、1回の処理に10秒ずつかかる場合は合計50秒はかかる計算になります。 Ansibleではループによって複数回実行される処理がお互いに干渉せずに並列に実行可能なのであれ…

[Ansible] loopとモジュール実行の結果を保持するregisterを併用する

registerを使うことでモジュールの実行結果(Return Values)を保持し、後続のタスクでその値を参照することができるので、処理の実行結果を次のタスクのパラメタにすることができます。 ただし、その結果のデータ構造がループでの実行時は通常とは異なるので…

[Ansible] そのtag設定、想定通りに動いてますか? (継承機能とその実装を確認する)

playbook内のtask定義にtagを設定しておくことで、指定tagのtaskのみ実行したり、逆に指定tagのtaskを除外してansible-playbookを実行することができます。 開発中のtaskのみピンポイントで実行したい場合や、逆に、共有のDBのデータを更新したりするtaskは…

[Ansible / Jinja2] select / selectattr を使った配列と辞書のフィルタリング

配列や、辞書の配列の中から特定の条件の要素を抜き出す。 配列操作はselect()で要素に対してフィルター処理を行い、辞書操作はselectattr()でkey指定することでvalueにフィルター処理を行う。 ここでいうフィルター処理は、AnsibleやJinja2のフィルターのこ…

[Ansible] to_datetime フィルタを使って文字列をdatetimeオブジェクトに変換

AnsibleでWed Feb 10 09:17:08 JST 2021という表記の文字列をdatetimeオブジェクトに変換するには、to_datetimeフィルターを使う。 使用例はフィルターのページの「Handling dates and times」に使い方が載っているのでここに書かれている通り。 内部実装はP…

[Ansible] jc parserのFilterを使った構造化データ化 (community.generalのフィルタ)

jc parserをAnsibleで使ってみる。 github.com 2021.07.06追記: community.generalコレクションのフィルタのドキュメントがいつのまにか追加されてた -> community.general Filter Guide — Ansible Documentation jc parserについて 使えるparserの種類 簡単…

[Ansible] cli_parseとTTP(Template Text Parser)を使った任意のテキストのparse処理おためし入門

Ansibleのcli_parseモジュールで、PythonのTTP(Template Text Parser)とテンプレートファイルを使ったテキスト解析を試してみた。 ttp.readthedocs.io cli_parseは、2.10時点で標準のansible.netcommon.cli_parseと、Ansible 3(3.0.0b1)に新たに標準に含まれ…

Ansibleでsplitとjoinを使った文字列・配列操作

文字列を指定文字で分割して配列にバラすsplitと、配列を指定文字で結合して文字列に合成するjoinは、文字列と配列操作において大変有用。 主要なプログラミング言語には大抵この関数/メソッドは用意されており(※俺調べ)、フィルタ系の処理を書くときには重…

[Ansible] intフィルターで16進数表記の文字列を基数変換

AnsibleではJinja2のint()フィルターで文字列を整数へ変換できるが、0xdeadbeafみたいな16進数表記の文字列をint(base=16)のようにパラメタを指定することで基数変換することもできる。 16進表記の文字列を比較する処理を使う機会があったのでまとめ。 確認…

[NetBox / Ansible] ダイナミックインベントリを使ってNetBoxに登録されたホスト情報をターゲットノードにAnsibleを実行

Ansibleのダイナミックインベントリ機能を使って、NetBoxに登録しているホスト情報をAnsibleのターゲットホストとして利用してみる。 (ちなみにダイナミックインベントリ機能は書籍とかで存在は知ってはいたけど、実際に手を動かして使ってみるのが今回初め…

[NetBox] AnsibleのNetBoxモジュールを使ってVMやIPアドレス情報を登録

以前REST APIを使った入力を試したけど、今回はAnsibleのNetboxモジュールを使った入力について。 docs.ansible.com 準備 pynetbox のインストール netbox.netboxコレクション Playbookサンプル APIエンドポイントとトークン VM作成 Clusterの作成 環境 Ansi…

[Ansible] 複数roleのhandlerとpost_tasks/pre_tasksの処理順序

特定のtaskに変更があったときだけ連動して動く処理を定義できるhandlerですが、処理の実行順序で思い違いしがちなところがあったので確認してみました。 (handlerを使ったroleがあるのを忘れて無邪気に次に処理されるroleを書き足したら期待しない実行順序…

[Ansible] acme_certificateモジュールでLet's Encryptから証明書を発行しApacheでHTTPSサーバー構築

httpdパッケージでApacheをインストール・HTTPS対応し、Let's Encryptの証明書の発行と設定までAnsibleで設定、できるのかな?と思って試したらうまくいった。 Let's Encryptで証明書を作成するには、ACMEプロトコルを利用し、このACMEプロトコルを操作する…

[Ansible] ターゲットホストのIPアドレスの参照とデフォルトゲートウェイの設定についてのメモ

Ansibleの実行の際に、設定ファイルを作ったりしたい場合に使えると便利なターゲットホストのIPアドレスの参照方法について。 内容は「動かしてみてその内容をまとめたもの」なので、ドキュメントやソースコードを追ったりまでは確認できていないです。 play…

[Ansible] YAML/JSON書式の文字列を構造化データとして扱う

文字列として保持しているYAMLやJSON形式のデータを構造化データとして扱うにはフィルタで変換するのが簡単です。 PowerShellのConvertFrom-Jsonとかと同じやつです。 docs.ansible.com YAML形式の文字列をオブジェクトに変換 JSON形式の文字列をオブジェク…

[Kubernetes / Ansible] containerdをCRIに指定してクラスター構築するAnsible Playbook

明けましておめでとうございます。 年末に話題になった「KubernetesのコンテナランタイムでDocker(Dockershim)がv1.20で非推奨になる」にともない、CRIに「containerd」を指定したkubeadmを使ったクラスター新規構築を(お正月に)試してみたので簡単にまとめ…

無料のRed Hat Developer SubscriptionでRHEL上にAnsible Towerをインストールする

「Ansible Advent Calendar 2020」の15日目のエントリになります。 (14日に記事公開しちゃってるけど、Qiitaみたいにスケジュールできないから、まぁ仕方ない…) adventar.org 14日に見かけたこちらのツイートをもとに、実際にセットアップしてみました。 htt…

Ansibleのgitモジュールでgit cloneする (HTTPS / SSH)

adventar.org Ansible Advent Calendar 2020の12日目の記事とします! Ansibleのgitモジュールを使ってGitリポジトリからcloneする。 docs.ansible.com git clone基本 ブランチ・タグ等指定 認証が必要なリポジトリ SSHでclone known_hosts未登録 環境 git c…

[ESXi] 無償ライセンスでも使えるVM操作Ansibleコレクション (要SSH)

qiita.com SSHでESXiに接続し、そこでvim-cmdやvmxファイル操作でVMを作ったりするAnsibleモジュールを練習で書いていたらいつのまにコレクションになってました。 自宅のESXiは無償ライセンスなのでwrite系のAPIが使えなく、Ansible2.8以下でvsphere_guest…

[Kubernetes / Ansible] Ansibleを使ったHelm version3操作とカスタマイズYAML指定時の注意点 (kubernetesコレクションver 1.1.1時点)

AnsibleでHelm version3を操作する。 使用モジュール 旧helmモジュール 検証環境 playbook例 repository設定 helm repo update Helm chartのインストール カスタマイズYAML release_values (valuesもaliasで使用可能) values_files (注意点有り) サンプルコ…

Ansibleのk8sモジュールでKubernetesクラスタ上のリソースを操作する

〇 2021.02.20: APIトークンを指定した方法について追記 Ansibleのk8sモジュールを使って、Kubernetes上のリソースを操作してみる。 意外といままで試してなかった…というか実は5月頃に途中まで試したけど当時はPython2環境でpipから入れたりして文書化に手…

[Ansible] Arista EOSのcEOS-labコンテナにAnsibleでeos_factsするまでいろいろハマったこと

一昨日つくったcEOS-labコンテナにAnsibleのeosモジュール使ってアクセスする。 使うモジュールはひとまず情報収集のeos_factsを使用。 zaki-hmkc.hatenablog.com ネットワーク初心者の自分にはハマりポイントが大量にあったので色々と備忘録。 ポイントは「…

[Ansible] Connectionプラグインを使ってDockerコンテナを対象に接続・処理する

2021.05.23、docker_container_execモジュールについて追記 Ansibleの処理対象としてDockerコンテナを指定する。 sshを使用しないので、接続先(=コンテナ内)でsshサーバーは不要だけど、コンテナ内にPythonは必要。 お試しということで、Python:3イメージを…