zaki work log

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

Python

[Ansible] 日付書式の文字列から「〇分後」を求める (既存フィルター or カスタムフィルター)

Ansibleで「指定日時の5分後」みたいな時刻加減算をやる機会があったけど、ちょうど良い機能が見当たらなかったのでいろいろ試した話。 だいぶ面倒なことをやってるので「〇〇すればシュッとできるよ」とか情報があれば教えてください。 Pythonの場合の日時の加…

[Python] 標準ライブラリで"2023-09-27T12:43:39.123456Z"のようなISO 8601拡張形式の文字列のdatetime変換とタイムゾーン

"2023-09-27T12:43:39.123456Z" のようなISO 8601拡張形式の文字列をPythonでdatetimeオブジェクトとして扱ったり、JSTのYYYY/mm/dd HH:MM:SS文字列に変換するサンプルコードについて。 最小限の環境で動くように、標準ライブラリで実装している。(pip insta…

pyenvを使ったPython実行/開発環境の構築

普段はいつもvenvを使って環境構築するんだけど、OSアップグレードしてPythonバージョンが更新されると、venv作成時のPythonバージョンと差異が発生して環境がおかしくなってしまうので、Python自体をインストールするpyenvを試してみた。 github.com venvが…

[Ansible] ini形式のインベントリファイルの行コメントには注意

本記事は「Ansible Advent Calendar 2022」の5日目のエントリとなります。 ちょっと前にやらかしたインベントリファイルの行中コメントについて、詳しく調べてみた。 playbookのYAMLに埋め込まれてる変数定義をインベントリファイルに単に移すと動く変数と動…

静的サイトジェネレータMkDocsのGetting Startedおためし

KubernetesドキュメントサイトではHugoというサイトジェネレータを使ったのですが、似たようなツールにMkDocsというものがあり、試してみた。 (そのうちGitHub Pagesに置きたい) www.mkdocs.org 大まかな流れとしては、Markdown形式でドキュメントを指定のパ…

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

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

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

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

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

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

[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] 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)に新たに標準に含まれ…

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

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

[コードメモ] Paramikoを使ってPythonでsshする (公開鍵認証)

いきなりサンプルコード。 import paramiko # 接続 client = paramiko.SSHClient() client.load_system_host_keys() client.connect("192.168.0.20", username='zaki', key_filename="/home/zaki/.ssh/id_rsa_nopass") stdin, stdout, stderr = client.exec_…

[Ansible] Python3 on CentOS7のローカル実行でパッケージ操作する際のエラーと回避策

結論から言うと「inventoryでconnection=local指定してローカル接続してinterpreter_python指定でPython2で動かす」しかないかもしれない。 環境 Pythonバージョンとyum/dnf AnsibleのPythonバージョンとパッケージマネージャ Python2を使用する設定 interpr…

[Ansible / Docker] Dockerコンテナ版Ansible(2.8.13)を作ってみる (練習)

CI/CDや、Ansibleのインストールが難しいオフライン環境とかで使えるかな、と思って、試しに作ってみた。 Ansibleバージョン ベースイメージ 失敗作 Dockerfile build push Docker Hub イメージのpush お試し実行 ansible pingモジュール実行 修正版 Dockerf…

[Python] オフライン環境でpipする

インターネットに繋がらないホストでpip installするには、パッケージファイル指定インストールかローカルPyPIサーバを用意する。 普通にやっても [zaki@centos1 ~]$ pip install pypdf2 Collecting pypdf2 Retrying (Retry(total=4, connect=None, read=Non…