2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
やらかしlineinfine 〜冪等性が失われた日、そしてreplaceへ〜(全1記事)
リンクをコピー
記事をブックマーク
林如弥氏:私の大いなる力で、lineinfileを責任を持って行使してしまって、やらかしましたという発表です。お願いします。
みなさん、ansible.builtin.lineinfileモジュールを使っていると思います。とても便利ですよね。ドキュメントの一角を切り取ってきたのですが「Manage lines in text files」ということで、テキストファイルの中の文字列を管理できるモジュールで、とても便利です。
私たちのユースケースでいうと、主にアプリや、OSの設定を一部変えることをやっています。
詳細は割愛しますが、こういうことをゴチャゴチャとlineinfileで、ありがたいことに使わせてもらっています。
copyやtemplatesという便利なモジュールもありますが、ファイルを丸ごと置き換えられないようなケースで使うのがlineinfileかなと思っていますし、特定の行を、シュパッと狙い撃って修正できる、これもまたいいところです。
ちょっとうちのつらみなんですけれども、けっこう手作業で作られた不揃いの環境があって(笑)、同じファイルでぜんぜん中身が違うけど、特定のパラメーターだけを変えたり、追加できたりするのがlineinfileで、だからみんな大好きですよね。
そんなlineinfileのやらかしを、2つほど持ってきたので、紹介します。
1個目、やらかし1ということで「実行するたびに重複が発生する/etc/hosts」というタイトルです。
これはサンプルですが、172.18.9.32みたいなIPに、今ショートネームみたいな、s1 sv1みたいなのがついています。ここに、ちょっと見直しをしてserver1みたいなものを追加したくなったわけです。
ここでやはりlineinfileですよと。regexpで先頭の正規表現かけて、後半はグループ化でbackrefsであとで再利用する。それで、最後の末尾にserver1を足すと。
これ、一見すごくよさそうに見えるんです。1回なら動くんです。
しかし、これは打つたびにserver1がこのように増えていく、増えていく、増えていく。しかも、これってhostsファイルとしては、どうも問題がないらしくて、気づくまでに時間がかかってしまいます。いろいろなケースで再利用したせいで、どんどん増えていったという問題が起きました。
こうして、Ansibleの代名詞と言ってもいいぐらいの冪等性を、lineinfileを使って(笑)失ってしまったというやらかしが1個目です。
そして、やらかし2です。「変換対象が複数回出るなら、replaceモジュールを使いましょう」というやらかし。
もう、この時点でピーンときた方もいると思うのですが、とあるミドルウェアの設定ファイルに、DB01みたいな宛先が書いてあったんです。そのDBをバージョンアップして、その向き先だけアプリでは書くことがあったんです。
「テキストの中の特定文字列を変えるならlineinfileだろう!」と思って、こんな感じのことを書きました。
先ほどとあまり変わらないのですが、regexpでDestの文字列を拾って、変えたい部分だけNewDB01みたいなかたちで書いたんです。すると、こうなりました。
どういう動きをしたかというと、後半のDB01だけNewDB01というかたちになるんです。つまり、1個目に出たDB01は変換されなかったんです。もう1回同じPlaybookをそのまま打つと、きちんと変換されます。
つまり、1回の実行だけだと1箇所しか変換されないんです。これに気づかなかった私が、アプリチームに「どうぞ、もう変えておきましたので」と言って、正常確認をお願いしたのですが、特定のコネクションプールだけ古いほうにつながり、新しいところには1箇所だけつながっている。そういう状況を作ってしまって、混乱を生んでしまいました。当時の同僚のみなさんにお詫びをしたいと思います。
これは、しっかりとドキュメントに書いてあります。Synopsisという、概要とでも訳すんですかね、そこに「See the ansible.builtin.replace module if you want to change multiple, similar lines」。「似たような、複数の場所を変更するなら、きちんとreplaceモジュールを見てね」ときっちりと書いてあるのに、僕はlineinfileを好きすぎて、1回で失敗したというやらかしの話でした(笑)。
まとめです。lineinfileは、やはりとても便利ですが、書き方次第では冪等性が失われます(笑)。きちんと複数回実行しても、同じ箇所が同じだけきちんとOKになるか、2回目やったら増えないかというところを確認しましょう。
あとは、複数箇所を同時に1回のplaybookの実行で変えたいのであれば、ここはreplaceモジュールの出番なので、lineinfileはまた別の機会で使ってくださいという話で、私の発表を終わります。ご清聴ありがとうございました。
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには