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

AD環境のWindowsをAnsibleで操作する(非AD環境)

TL;DR Active Directryに参加していないWindow10をWSL2のUbuntu20.04にインストールしたAnsibleで操作する環境を構築しました。kerberos認証が必要ない分、AD参加済みの環境よりは簡単な手順でした。 手順 Windows 10 WSL2を有効にし、Ubuntu20.04をインストール リモート接続を受け付けるための設定(要管理者権限) Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 Ubuntu20.04 最新のAnsibleをインストール sudo apt update sudo apt install software-properties-common sudo apt-add-repository --yes --update ppa:ansible/ansible sudo apt install ansible https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html#ubuntu-ansible 以下のaptパッケージのインストール python3-pip gcc pip3で以下のPythonライブラリをインストール pywinrm inventory.ymlに以下の記述を記載 windows: hosts: 192.168.yy.yyy: ansible_connection: winrm ansible_user: user_name ansible_winrm_server_cert_validation: ignore ansible_winrm_transport: basic ansible_port: 5986 ansible -i inventory.yml 192.168.yyy.yyy -m win_ping が成功することを確認

<span title='2021-11-25 00:00:00 +0900 +0900'>November 25, 2021</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

AD環境のWindowsをAnsibleで操作する

TL;DR Active Directryに参加しているWindow10をWSL2のUbuntu20.04にインストールしたAnsibleで操作する環境を構築しました。複雑な手順が必要ですが、操作できることを確認しました。 手順 Windows 10 WSL2を有効にし、Ubuntu20.04をインストール リモート接続を受け付けるための設定(要管理者権限) Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 Ubuntu20.04 最新のAnsibleをインストール sudo apt update sudo apt install software-properties-common sudo apt-add-repository --yes --update ppa:ansible/ansible sudo apt install ansible https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html#ubuntu-ansible 以下のaptパッケージのインストール python3-pip gcc python-dev libkrb5-dev krb5-user pip3で以下のPythonライブラリをインストール pywinrm[kerberos] kerberos requests_kerberos pykerberos 以下の内容で/etc/krb5.confを修正 [libdefaults] default_realm = EXAMPLE.COM kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true [realms] EXAMPLE.COM = { kdc = dc1....

<span title='2021-11-24 00:00:00 +0900 +0900'>November 24, 2021</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41