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....

September 27, 2022 · 1 min · 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コンテナで運用していた際に使用していたものでしたが、当時からバージョンアップがうまく行かない問題があり、これが原因だった可能性があります。 ちゃんと公式サイトを見ましょうというお話でした。

September 27, 2022 · 1 min · tack41

DockerコンテナのMariaDBのメジャーバージョンアップ

TL;DR Docker HubにあるMariaDBの公式イメージのメジャーバージョンアップを行う場合、環境変数MARIADB_AUTO_UPGRADEにnon-emptyな値に設定したほうがよい 経緯 Redmineで利用しているMariaDBのバージョンアップを行った。10.4.25から10.6.8に一気に上げた。 途中10.5.15を経由したのだが、その際に以下のメッセージが出たのが気になった。 redmine_db | 2022-06-25 05:16:20+00:00 [Note] [Entrypoint]: MariaDB upgrade (mysql_upgrade) required, but skipped due to $MARIADB_AUTO_UPGRADE setting Docker HubのMariaDB公式サイトを見に行くと確かに以下の記述がある。 Set MARIADB_AUTO_UPGRADE to a non-empty value to have the entrypoint check whether mysql_upgrade/mariadb-upgrade needs to run, and if so, run the upgrade before starting the MariaDB server. Before the upgrade, a backup of the system database is created in the top of the datadir with the name system_mysql_backup_*....

June 25, 2022 · 1 min · tack41

MariaDBのWindow関数

MariaDB: 10.4.12 にて 要約 MariaDB 10.4.12(2020/6/3時点で最新版の1マイナーバージョンだけ前)では、Window関数は ONLY_FULL_GROUP_BY で誤動作する。 内容 MariaDBでROW_NUMBER(), SUM() OVER() 等のWindow関数を使用すると以下のようなエラーが出る。 MySql.Data.MySqlClient.MySqlException: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause Window関数に使用している列をGROUP BYに指定して支障がないところであればそれでクリアできるのだが、そうでないところはどうにもならない。 Window関数自体は10.2から有効なはずなのだが、以下の記事によると、AVGなど一部のWindow関数以外はONLY_FULL_GROUP_BY に対応していないらしい。 https://jira.mariadb.org/browse/MDEV-17785 実際、AVG関数はONLY_FULL_GROUP_BY 制約のもと、GROUP BYで指定しなくても問題なく動作する。ROW_NUMBER(), SUM() はダメ。早く対応してほしい…

June 3, 2020 · 1 min · tack41

LINQの遅延評価がマイナスに働くケース

LINQに限らず遅延評価はパフォーマンスに対してプラスに働く、という説明が多いように思うが、劇的にマイナスに働くケースがあった。 商品の名前の先頭に応じてグループ分けし、残ったデータに対して同様にグループ分けする以下のようなコード IEnumerable<T> left = .... var sub1 = left.Where(l => l.StartsWith("AB")) left = left.Where(l => sub1.All(s => s.ID != l.ID)) var sub2 = left.Where(l => l.StartsWith("A") left = left.Where(l => sub2.All(s => s.ID != l.ID)) var sub3 = left.Where(l => l.StartsWith("B") left = left.Where(l => sub3.All(s => s.ID != l.ID)) ... このような分類が20弱続くケースで、1分たっても応答が返ってこない。 leftの型をIListとし、left = left.Where(l => sub1.All(s => s.ID != l.ID)).ToList()のように即時評価に書き換えると1秒せずに返ってくる。 デバッグ実行すると、left = left.Where(l => sub1.All(s => s.ID != l....

May 30, 2020 · 1 min · tack41