とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

helmとhelm templateについての気づき 最終回 csplitを使ったマニフェストの分割

次にcsplitを使ったマニフェストの分割について試しました。 普段使いの環境はmacOSなのですが、csplitコマンドがインストールされていました。 どうやらHomebrewを使い始めるときにインストールする、コマンドラインツールに含まれるようです。

ChatGPTさんは次のように実行すればうまくいくと提示してくれました。

csplit -s -z -f manifest_ -b "%03d.yaml" hogehuga-myapp-manifests.yaml '/^---$/' '{*}'

ところが実行すると、csplit: illegal option -- zというエラーが表示されます。 それに対して、次のような回答がありました。

ああ、そうなんです!💡
macOS に入っている csplit は BSD版 で、-z オプション(空ファイルを削除)は GNU版のみ対応 なんです。
なので csplit: illegal option -- z のエラーが出ちゃいます。

そのあと、解決策として-zオプションを使わない方法と、GNU版 csplitを使う方法が例示されました。 なるべく余計なものをインストールしたくないので、最初の案を採用しました。

csplit -s -f manifest_ -b "%03d.yaml" hogehuga-myapp-manifests.yaml '/^---$/' '{*}'
find . -name 'manifest_*.yaml' -size 0 -delete

ところが、一つ目のコマンドを実行したタイミングでcsplit: illegal option -- bというエラーになりました。 それに対して、次のような回答がありました。

そうなんです、鋭い指摘ありがとうございます!💡
macOS の標準 csplit(= BSD版)は実は かなりオプションが少ない です。
    -b(ファイル名の書式指定)も
    -z(空ファイル削除)も
GNU版限定機能なんです。

先に言ってよw

そのあと、macOS標準で使えるBSD版のcsplitを使って頑張る方法が例示されたので実行したところ、csplit: *}: bad repetition countというエラーになりました。 そのことについて聞くと、さらにmacOS標準で使えるBSD版のcsplitを使って頑張る方法が出てきたのですが、ここで根を上げて次の方法で解決することにしました。

$ brew install coreutils
$ gcsplit -s -z -f manifest_ -b "%03d.yaml" hogehuga-myapp-manifests.yaml '/^---$/' '{*}'

これでyqを使った時と同じような結果になります。 yqを使うのとGNU版csplitを使う方法のどちらがいいかと聞かれれば、どっちもどっちみたいな感じでしょうか。

「AIは案外面倒くさいな」と思った人もいるかもしれませんが、質問をしてズバリの回答がきても面白くないと思うんですよね。 なんとなくよく聞かないと正解がもらえなかったり、いざ実行するとうまく動かなくて、情報を伝えていくとゴールに向かっていくような感じは人間くさく感じました。

今回色々はまったおかげで、少しだけ賢くなったような気持ちになりましたし..。いや嘘です。