zaki work log

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

2021-01-01から1年間の記事一覧

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

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

[NetBox] 最新のfeatureブランチでDockerビルドしてコンテナとしてデプロイする

NetBoxの機能でまだリリースはされていないけどfeatureブランチには実装済みの新しい機能を試してみたい場合、feature版のコンテナイメージは用意されてないためOS上に素で構築する必要があるが、それよりはfeature版コンテナイメージを手元でビルドした方が…

NetBoxのSecretを使って暗号化された情報を登録・参照する

NetBoxは、デバイスやVMの情報に暗号化されたSecret情報を持たせることができるので、例えばログイン用のアカウント情報などもNetBoxに登録しておくことができます。 このSecretはbase64でエンコードされるだけのもの、、ではなく、256ビットのAES共通鍵で暗…

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

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

「Kubernetes Novice Tokyo #9」でkindをPodman環境で使う内容でLT登壇した振り返り

「Kubernetes Novice Tokyo #9」で「kind on Podman」というタイトルでLTしたので、内容について振り返ります。 k8s-novice-jp.connpass.com 発表資料 speakerdeck.com 内容 Kubernetesのノードとして動作するDockerコンテナを使うことでDocker上でKubernete…

Rootless modeのDockerをUbuntu 20.04へインストール (Debian 10では依存パッケージ不足で失敗)

DockerのRootless modeのセットアップを試してみた。 設定すればデフォルトではroot権限が必要なDockerを一般ユーザーでも使えるモードで動作させることができる。 現在はDockerをパッケージインストールすると、Rootless mode用のセットアップスクリプトも…

[Linux] ターミナルでコマンド履歴の検索とsttyのstop設定

bashやzshはシェル上でCtrl-r押下してからコマンド名やオプションの文字列を入力すると、コマンド履歴からインクリメンタルサーチできる。 (reverse-i-search)`': Ctrl-rを押下すると↑のようにプロンプトが変化するので、例えばここにkubectlと入力すれば、…

[Docker / Docker Compose] コンテナのIPアドレスを固定する方法

以前「コンテナ若葉マーク」で「コンテナ環境ではIPアドレスじゃなくてコンテナ名を使って通信しろ!(IPアドレスは意識するな!)」みたいなことを話したりしたことあったんですが、何らかの理由でコンテナ名(ホスト名)でなくIPアドレスを使って(イコールIPア…

[NetBox] NetBox(v2.10.3 → v2.10.4)とnetbox-docker(0.27.0 → 1.0.2)のアップグレード

Docker ComposeでデプロイしたNetBoxをバージョンアップする。 基本的には「動作中NetBoxを停止 -> Composeファイルを(リポジトリごと)更新 -> 新バージョンNetBoxを起動」で良いが、更新内容によっては追加手順があるのでここ最近のバージョンから最新安定…

[ssh / docker / kubectl] ローカルの標準出力をリモートの標準入力にする

sshやdocker exec、kubectl execで、シェルを起動せずに直接コマンドを実行できるが、sshなどを実行するローカルの標準出力をリモートホストやコンテナの標準入力として処理する方法について。 SSHの場合 前提。 ローカルのhostnameはcloud-devで、リモート…

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

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

Ciscoラボ環境のCisco Modeling Labs Personal 2.1.2 をESXiに入れてみた

機会があってCisco Modeling Labsのライセンスを入手したので、手元のESXi環境で動かしてみた。 参考動画はこちら。 www.youtube.com 一旦はCML-Pの環境をセットアップして使えるところまで。 環境はESXi 6.7でRAM 64GB 作成されるCML-PのVMは、4vCPUs / RAM…

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

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

[Python] datetime.strptime()を使った文字列からdatetimeオブジェクトへの変換とタイムゾーン

Pythonでは日付を表す文字列からdatetime型のオブジェクトへの変換にstrptime()を使用できる。 例えば'Thu Feb 11 17:01:34 2021'という文字列があった場合、'%a %b %d %H:%M:%S %Y'というフォーマット文字列を用意することでオブジェクトにできる。 なお、A…

[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進表記の文字列を比較する処理を使う機会があったのでまとめ。 確認…

[Oracle Cloud] CLIツールのセットアップメモ

Oracle CloudをCLIで操作するためのツールのインストールとセットアップについて。 以前何事もなくセットアップしていたんだけど、新しい環境に入れようとしたらいろいろ(鍵設定周りで)詰まったのでメモ。 (全自動でAPIキー設定出来る方法があるかもしれない…

kind on Podman on RHEL8でK8sを入れて、Bookinfo on Istioが動くことを確認

先日のContainer Runtime Meetup #3で「Podmanでkind動かせるよ」という話になり、どういうわけか「Podmanではkindは(まだ)動かせない」と思い込んでいたため、実際に試してみました。 ドキュメントは多分ないですが、 sudo KIND_EXPERIMENTAL_PROVIDER=podm…

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

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

VS CodeのRemote Development SSHのサーバー側のプロセスを再起動する

Ctrl + Shift + p(winの場合)でコマンドパレットを出して「Remote-SSH: Kill VS Code Server on Host」を選択し、プロセスをkillする対象サーバーを指定する。 実行するとどうなる サーバー側のVS Codeプロセスが終了するため、一度VS Codeがリモートから切…

[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プロトコルを操作する…

[NetBox] 「VMを登録してIPアドレス割り当て」をREST APIでお試し

NetBoxのREST APIをざっくりと使って「VMを登録してIPアドレスを割り当てる」をやってみる。 APIについては、NetBoxの画面下部の{} APIのリンク先を開くと、Swaggerが表示されるので、エンドポイントとHTTPリクエストメソッド一覧や必要なパラメタ、レスポン…

Docker版NetBoxを導入してIPアドレス管理台帳.xlsxに別れを告げる

オンプレ環境だと必ずと言っていいほど存在する「エクセルのIPアドレス管理台帳」、なんやかやで私も自宅の環境でもスプレッドシート(Excelではない笑)に記入しつつ運用してました。 で、業務で最近NetBoxというアドレス管理などを行うIPAMツールを使うこと…

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

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

VS CodeのRemote DevelopmentでSSHアクセスすると接続先の高負荷状態が続く問題と対応

年末くらいから、メインの作業用Linuxマシン(この1台のみ)にVS CodeのRemote DevelopmentでSSHアクセスすると一定時間高負荷状態が続いていたので、なんとかならないかと原因調査した結果。 なお、クライアント側のVS CodeはどのPCから接続しても、特定の接…

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

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