PlantUMLからMermaidに乗り換えられなかった

TL;DR Mermaidは動作環境が多くて使いやすそうだが、まだまだPlantUMLでしかできないことも多い 経緯 開発資料の作成の際、クラス図をPlantUMLで書いている。正確には、PlantUMLのコードをgit管理しつつ、PlantUMLのサイトで画像に変換してからMarkdownで参照している。VScodeでライブプレビューしようとするとJavaのインストールが必要で面倒だし、GitHubで参照する際には画像にしないとだめ。 Mermaid形式だと、GitHubがMarkdown内での記述に対する表示に公式に対応していて、VSCodeでも拡張機能をインストールすればプレビューできる。 移行してみたが、断念。理由はクラス図におけるpackage/namespaceに対応していないため。開発はDDDを意識していて、Domain,Presentation,UseCase,Infrastructureといった層を開発言語(主にC#)のnamespace/packageに対応させている。 まあそれは管理のしやすさからだけだが、少なくともクラス図上ではそれぞれの層を含めて記述し、Presentation層からInfrastructure層を呼ぶようなルール違反がないことを確認できるようにしたい。だが、Mermaidではまだ対応していないよう。GitHubのmermaid-jsのIssuesを見ると、要望自体はあがっているようだが… https://github.com/mermaid-js/mermaid/issues/1052 開発文書は、Markdownで書いてGitHubで直接閲覧することが多くなってきているので、GitHubが対応してくれればローカルにJava入れるのもよいのだが、まだ時期尚早か。 Draw.io でも書けるが、お絵かきソフトなのでクラスの情報が見た目にしか残らず、抵抗感がある。

<span title='2022-10-07 00:00:00 +0900 +0900'>October 7, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

Ansible変数未定義、または空の場合にfailさせる

TL;DR Ansibleで複数の変数の存在チェック、文字列の場合は空のチェックをしたい場合は ansible.builtin.fail: msg: Varialbe '{{ item }}' is not defined or empty. when: > item is not defined or item is none or ( item is string and item | length == 0 ) loop: - '{{ var1 }}' - '{{ var2 }}' #nolog: true # Hide credencials, but suppress message. 経緯 Ansibleで引数が定義されていて、空でないかどうかチェックしたい。1個ずつやるのもだるいのでloopでまとめて。 以下でできるかと思ったのだが… ansible.builtin.fail: msg: Varialbe '{{ item }}' is not defined or empty. when: > item is not defined or item is none or item | length == 0 loop: - '{{ var1 }}' - '{{ var2 }}' これだと、変数に数字が設定されていると型がstringにはならず、lengthの実行でlen()メソッドがないと言われてこけてしまう。このため、以下のように型がstringかチェックしたうえでlengthチェックさせる。また、内容がパスワードなどを含む場合はno_log: trueとするとよい。ただしその場合エラー時のメッセージも簡略化されてどの変数でこけたのか、別途調査が必要となる。...

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

Ansibleで変数の存在チェック

TL;DR Ansibleでvariableの存在チェックをしたい場合は when: > var1 is defined and var1 is not none and var1 | length > 0 経緯 Ansibleのwhenで変数が定義されていて値が存在していたら実行したいケースがありました。 まず注意しなければいけないのは、この評価はPythonではなく、Jinja2で実行されるということ。このため when: > var1.length > 0 という表現は使えず when: > var1 | length > 0 とする必要があります。同様に when: > var1 is not None という表現は使えず(Jinja2エンジンではisはテストを指定するキーワードで、Noneというテストは存在しない。noneなら存在する) when: > var 1 is not none と指定する必要がある。 最初は、 when: > var1 is defined and var1 | length > 0 くらいでやっていたのですが、変数は定義されているが値が未設定、という場合にvar1はNoneTypeという型になり、lengthが使えないため、最終的に when: > var1 is defined and var1 is not none and var1 | length > 0 という書き方に落ち着きました。

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