FortigateのDNSは配下のサーバに設定しちゃダメ

TL;DR FortigateのDNSに配下のサーバを設定しちゃダメ。Fortigate標準がよい。 経緯 Fortigateのファームウェアを6.2.xから6.4.xにバージョンアップしました。直後にインターネットに繋がらなくなってしまいました。 Fortigateはtransparenteモードで使っており、Fortigateを外すと解消するので原因がFortigateであることは特定できました。 調査すると、まず名前解決に失敗しているように見えました。ルータ配下にFortigateを経由してPCやサーバにつながる構成になっています。PPPoEでプロバイダに接続しているルータでは名前解決はできてました。YAMAHA RTXシリーズを利用しており、SSHでログインしてnslookupで確認できます。 ですが、社内に設置したWindowsのAD兼DNSサーバでは名前解決に失敗しています。FortigateのDNSはこのWindowsサーバを指定していたため同様に名前解決ができず、FortiCloudが参照できないと警告が出ていました。 そこで、DNS設定をFortigate標準のものに変えたところ、警告が解消され、他のPCでもインターネットに接続できるようになりました。 今回の現象に対する推測ですが、Fortigateのバージョンアップにより、FortiCloudから最新のデータを取得できるまで通信をブロックする動きだったのではないかと。FortiCloudと通信するためにDNSで名前解決しようとしたところ、参照するDNSサーバ(AD兼DNSのWindowsサーバ)がFortigateの配下にあるため通信出来なかったと思われます。 その後、FortigateのDNSをForigate標準にしたことで、事前設定されたForitigateのDNSサーバに通信する形となってブロックされずに通信でき、FortiCloudの設定が完了してブロックが解除されたのではないかとおもわれる。 Fortigateが参照するDNSを配下のサーバにすると、今回のように通信ブロックをきっかけにFortigate自身が動作不能となる恐れがあることがわかった。Fortigate標準の設定やGoogleの8.8.8.8など、インターネット側の信頼できるサーバを指定すべきということだろう。

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

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

ChromebookでVisual Studio Code Server

TL;DR ChromebookでVScodeを使うのであればVisual Studio Code Serverが良いかも。 LinuxではなくChromeブラウザ上で動作するため、日本語変換の不安定さが解消されているように見える。 経緯 前の記事でChromebookのcrostiniによるLinux VMにインストールしたVS Codeの日本語変換の切り替えの不安定さに絶望していたのですが、以下の記事を見つけました。 【起動5秒】ChromebookでVSCodeを超快適に使う 上記記事はCoderという会社が開発、公開しているようでしたが、本家Microsoftのものに関する記事を見つけ、インストールしました。ひょっとしたら両者同じものなのかもしれませんが、調べきれていません。 VS Code Serverの使い方 記事にある通り、wget -O- https://aka.ms/install-vscode-server/setup.sh | shを実行してインストールし、code-server serve-localを実行して表示されるローカルホストのURLにアクセスするとVSCodeが起動しました。すごい!! 全画面表示すれば違いがほとんどわかりません。 現時点ではローカルホストへの接続のみ一般公開されているようですが、将来的には外部サーバで稼働してブラウザでリモートからアクセスして編集、といったことができるかもしれません。そうなると、バックグラウンド問題で開発作業と相性が悪いiPadにも日の目が当たるかもしれません。 バックエンド側は以前と同様Linux環境で動いているのですが、不安定な日本語切り替えを含むフロント部分がChromeOS側で動くため安定しており、今のところ快適です。

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