Ansible Moleculeでテスト

TL;DR Ansible Moleculeでのテストの実装はコツがいる 経緯 Ansible MoleculeでAnsibleのroleをテストしたが、結構コツがいるようだったので、メモ。 まず、現時点(2022/9/27)で日本語で言及している記事自体が少ない。以下は参照にさせていただいた。 MoleculeでAnsibleのRoleをテストする - その1 Molecule 3を試す ポイントは以下。 以下の流れで行う(https://molecule.readthedocs.io/en/latest/getting-started.html#run-test-sequence-commands) molecule create (1.Dockerコンテナの生成、起動) molecule converge (2.対象ののロールの実行) molecule verify (3.テスト) molecule destroy molecule testで一連の動作をまとめて実行できるとの記載があるが、自分の環境ではverifyがされていないので利用していない 途中でコケたら、molecule loginでコンテナにログインして実際のコマンドを実行するなどして確認する 1.Dockerコンテナの生成、起動 molecule.ymlを設定する imageにてDockerコンテナのタグを指定する 例えばubuntu:22.04を指定した場合、python3がインストールされていないためにansibleの各種タスクが実行できずにコケる。また、sudoもインストールされていないため、該当のタスクがbecome: yesを指定しているとやはりコケる。対策としてcommandを指定する。 platforms: - name: instance image: ubuntu:22.04 command: - "apt update" - "apt install -y sudo python3" pre_build_image: true 2.対象ののロールの実行 converge.ymlを設定する…が、通常初期値で問題ないはず。他のタスクも実行したい場合は修正が必要なのかも 3.テスト verify.ymlを設定する。 assertタグでうまくいけばTrueとなるよう設定する。ファイルの存在をチェックする場合は以下のような感じ - name: Register if file exists stat: path: "/path/to/file" register: path_to_file - name: Check if file exists ansible....

<span title='2022-09-27 15:48:00 +0900 +0900'>September 27, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

MariaDB(MySQL)の設定ファイルは.cnf

TL;DR MySQL(MariaDB)の設定ファイルの拡張子は.cnf .confではだめ。includedirでもだめ。 経緯 サーバに直接インストールしていたZabbixを、Raspberry Pi4上のDockerコンテナに移行しました。以前x64上のDockerコンテナで稼働していたことがあるので構築はかんたんに済み、移行もOK。が、併せてZabbixのメジャーバージョンアップを行うとupgrade処理の途中でコケる。日本語を含むデータの変換で失敗している。 show variable like '%char%'を実行すると、system,clinentがlatinになってる… 設定ファイルにはutf8mb4を設定しているのになぜか反映されない。 設定ファイルconf/custom.confを/etc/mysql/conf.dにマウントしていたのだが、VScodede拡張子を.cnfに変えるとVScode上でファイルの認識が変わり、コンテナを再起動すると文字コードが正しく認識された。 公式サイトを見ればわかる話ではあるのですが、htmlファイルを.html,.htmのどちらでも認識するのと同じ感覚で…また、includedirに指定されたフォルダにおいていたので、読んでくれるだろうと思いこんでました。 この設定ファイルは以前Dockerコンテナで運用していた際に使用していたものでしたが、当時からバージョンアップがうまく行かない問題があり、これが原因だった可能性があります。 ちゃんと公式サイトを見ましょうというお話でした。

<span title='2022-09-27 12:33:00 +0900 +0900'>September 27, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

Chromebook CM5500を買って後悔

TL;DR Chromebook CM5500買って後悔してる Chrome内ですべて作業ができるなら、という判断基準はそのとおり。Linux環境でのCLIでの開発もヘビーにやると厳しい。 次買うなら、Windowsでテンキーなしモデルかな 経緯 メインパソコンとして、ASUS Chromebook Flip CM5 (CM5500)を買って使っています。もともとメインで使っていた中古のMacbook Airが基盤不良で修理代が高額となったため買い替えました。もう中古は懲り懲りということで新品でした。 検討ポイントは以下 Chromebook 今はやっているので、使ってみたい。Linux環境はあるようなので、Windows上のWSLと同様な感じで開発環境は整備できるはず それなりのスペック Chromebookには安価なモデルも多数ありますが、いくらOSが軽量とはいえ開発作業に師匠が出ると嫌なので、それなりのスペックのものを選びました AMD Ryzen 5 3500C/2.1GHz/4コア 8GBメモリ M.2 SSD 8GB Windowsの同スペックと比較すると、割高? 買ってしばらくはたまにしか使わず、まずまず使えるといった感じでした。 画面が360度回転し、タッチ対応のため、タブレットとしても使える その用途ではほとんど使ってないけど 外付けキーボードを利用する際に、テントモードであればモニタの近くで使えるのもよいです がっつり使うようになると、以下の点が気になりました。 キーボードの動作がおかしいことがある OS上は日本語キーボードとして認識しているはずなのに、VScodeで入力時にコロン、セミコロンあたりが英語キーボード入力となり、yaml,json入力時にイラッとします。 VScodeで、英数キーによるIME OFF, かなキーによるIME ONが動作せず、かな英数キーを押さないといけないことがあります 必ず発生するわけでもなく、発生してもしばらくすると何故か治るのも謎。 テンキーが邪魔 テンキーは使わないので不要なのですが、このサイズのノートパソコンだとどうしてもついてきてしまいます。EnterやBackspaceの押し間違いが発生してイラッとします。 モニターが光沢液晶 最大の誤算でした。大抵そこまで明るくないところで使うので問題ないのですが、明るい部屋で使う際にはかなりのストレスです。 非光沢シート調達中 非対応アプリ多数 Windows,Macは対応していて、Linuxはギリ対応していても、Chromebookには全然対応してない、ということはしょっちゅうです。rootとってごにょごにょすればできるかもしれないけど面倒だし、Linuxにインストールするにしても、毎回Linuxを起動してアプリ起動するのは面倒だし、アプリ間連携も全くできません とはいえ買ってしまったので、なんとか非光沢液晶シート、外付けキーボードで使い倒そうとは思っています。が、よほどのケースでない限り、他人にはおすすめできないですね。

<span title='2022-09-27 00:00:00 +0900 +0900'>September 27, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

pythonでSeleniumを利用する際の注意事項

TL;DR pythonのDockerコンテナでSeleniumを実行したスクレイピングで色々はまった。 経緯 とあるサイトにログインして表示される情報をcronで取得したいと思い、pythonのDockerコンテナを利用してChrome,ライブラリ等をインストールしてプログラムを作成した。結構はまったポイントがあったので備忘のため記録する。 オプションが必要 --headless: まぁ当然 --no-sandbox: 利用するDockerコンテナがrootで動くために必要 --disable-dev-shm-usage: /dev/shmの容量不足でクラッシュするのを防ぐために必要(https://stackoverflow.com/questions/53902507/unknown-error-session-deleted-because-of-page-crash-from-unknown-error-cannot) --user-agent=Mozilla...: 今回アクセスしたサイトでは、ユーザーエージェントを変えないとForbiddenが返ってきた XPathによるアクセスはやめた方がよい 階層が深いと何やってるのかわからなくなるし、調査するのも大変。 find_element(By.ID,"...")を使う。IDあればID、なければクラス名とか、AタグであればLINK_TEXTとか 該当のターゲットだけで一位にならないのであれば、一位となる上位の要素を取得してそこからfind_elementするとか 画面の描画をsleepで待つのはやめた方がよい 対象の要素があれば、以下のように取得する from selenium.webdriver.support.wait import WebDriverWait ele_email: WebElement = WebDriverWait(driver, timeout=TIMEOUT_PAGE_LOAD).until( lambda d: d.find_element(By.NAME,"some_name")) 画面の描画完了待ちであれば、以下のように記述する WebDriverWait(driver, TIMEOUT_PAGE_LOAD).until( lambda d: d.execute_script('return document.readyState') == 'complete') sourceを確認しながら1画面ずつ進める 処理が進んでたと思ったらエラーページでした、だとつらいので。 logger.debug(driver.page_source)

<span title='2022-09-21 00:00:00 +0900 +0900'>September 21, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

python3 メール送信時に本文なしだと弾かれる

TL;DR python3(3.7.3)環境でMIMETextを使ってメール本文を作成する場合に、メールが送信されない → 本文を追加 or 件名変更でなぜか解決… 経緯 python3(3.7.3)の環境で、Pythonによるスクリプトの実行結果をメール通知している。あるメールアドレスに集約しているのだが、一部のメールが届かない。 そのホストから送信している別の件名のメールは届いている 通知メールは本文空文字でMIMETextで作成している 本文に適当な文字を入れると届く、空白ではだめ 件名を変えると届く 送信ホストのメールログを見ると、送信処理自体は正常終了している。 件名の変更、または本文の追加で解消されることから、利用しているメールサーバによるウィルスチェックに引っかかったのではないかと推測しているが、詳細は非公開のため不明。 メール本文は何か設定しておいた方が無難ということか。

<span title='2022-09-12 00:00:00 +0900 +0900'>September 12, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41