※当サイトの記事には、広告・プロモーションが含まれます。

Ansibleでdocker-compose logs相当の機能を持つモジュールが無いが条件を満たすまでログ出力続けたい...

www.itmedia.co.jp

 イーロン・マスク氏率いる投資家グループが、米OpenAIを管理する非営利団体の買収に974億ドルの入札を行ったと、Wall Street Journal(リンク先は要購読)が2月10日(現地時間)、マスク氏の弁護士マーク・トベロフ氏からのコメントを添えて報じた。

マスク氏、974億ドルのOpenAI買収を主導 「Twitterを97.4億ドルで買収しましょうか」とアルトマンCEO - ITmedia NEWS

 トベロフ氏が提供した声明文でマスク氏は「OpenAIがかつてそうであったような、オープンソースで安全性を重視し、公益のための組織に戻る時が来た。われわれはそれを必ず実現させる」と語った。

マスク氏、974億ドルのOpenAI買収を主導 「Twitterを97.4億ドルで買収しましょうか」とアルトマンCEO - ITmedia NEWS

 この報道を受け、OpenAIのサム・アルトマンCEOは(マスク氏がオーナーであるSNSの)X上に「いいえ、結構です。でも、よろしければTwitterを97.4億ドルで買収しましょうか」とポストした。

マスク氏、974億ドルのOpenAI買収を主導 「Twitterを97.4億ドルで買収しましょうか」とアルトマンCEO - ITmedia NEWS

⇧ う~む、利用者側からしたら、無償枠を続けてくれるのであれば、どちらでも構わないのだが、「AI」のモデルを活用している開発者側からすると、

forbesjapan.com

xtech.nikkei.com

⇧「DeepSeek」で話題に上がった「蒸留」を防ぐ有効な手段が無さそうなことから、「オープンソース」化してしまえってことなんかね?

「DeepSeek」が「蒸留」を行っていたのかが分らんのだが、

  1. 「蒸留」を利用した
  2. 「蒸留」を利用していない

を判断するには、利用元の「モデル」を特定できる情報を利用先の「モデル」に強制的に記録できるような仕組みが作れない限りは、無理なんじゃないのかぁ...

マルウェア」のような一部の制御を奪うでは無いが、

『「蒸留」した場合には、無害で、且つ、どの「モデル」を利用したのかが判定できる削除不可能なファイルを「蒸留」を利用して作成した「モデル」に埋め込む』

、みたいな仕組みを導入できれば良さそうではあるが...

「DeepSeek」は利用する場合のコストが破格らしいので、結局のところ、お金が全てというか、利権が得られるならば何でもしたくなるのが人情ということなんかね...

まぁ、「蒸留」してるかどうかは迷宮入りになりそうで、真相は藪の中ですが...

可及的速やかに「AI」を発展させて、「AI」を人間の「労働」を代替してくれるような存在にして、人間が「労働」をしなくても生活できる世の中になって欲しいですな...

Ansibleでdocker-compose logs相当のモジュールが存在しない...

前回、

ts0818.hatenablog.com

⇧「Ansible」の標準モジュールとして「Excel」ファイルに対応したものが存在しないという話をさせてもらったのだが、悲報は続く...

ansible.readthedocs.io

⇧ まさかの「docker-compose logs」未対応...

まぁ、「Excel」の対応ができていないのは致し方ないとしても、「Docker Compose」の主要な機能については対応していて欲しかった...

一応、最新のドキュメントを確認してみたが、

ansible.readthedocs.io

⇧ 変わらず「docker-compose logs」未対応っぽい...

う~む、「Docker Compose」で起動した「Dockerコンテナ」内のアプリケーションが正常に動作しているかログで確認したいことあるあるな気がするんだが...

「Ansible」の思想が分らんので何とも言えないんだが、モジュールの対応が中途半端過ぎて、結局のところ、「シェルスクリプト」を多用することになってしまうような気がするんだが...

で混在するのが辛いところなのだが、そもそも論として、「Ansible」側で用意されているモジュールで、

  • command
  • shell

とかが利用できるようになっていることから、「Ansible」のモジュールだけで完結するのは無理という事実を「忖度」しろってことなんでしょうね...

Ansibleでdocker-compose logs相当の機能を持つモジュールが無いが条件を満たすまでログ出力続けたい...

で、誠に遺憾ではありますが、「Ansible」のとしては、「docker-compose logs」相当のことが実現できないので、力業でどうにかするしかありませんと。

とりあえず、

qiita.com

⇧ 上記サイト様を参考にさせていただくと、「docker-compose logs -f」をgrepする場合でも適用できると信じて、

■実現したいことをシェルスクリプトで実装した場合

#!/bin/bash

# ファイルの行数
target_file_rows=$(cat target.txt | wc -l)

# 初期カウント
count=0

# 開始時刻を記録(秒単位)
start_time=$(date +%s)

# 1時間(3600秒)
timeout=3600

# docker-compose logs -f をバックグラウンドで実行
docker-compose -f docker-compose.yaml logs -f | grep --line-buffered "Success " | while read -r line; do
    # 出現したらカウントアップ
    count=$((count + 1))

    # 全て正常に処理されたら終了
    if [ "$count" -eq "$target_file_rows" ]; then
        echo "All Complete Done. Exiting log monitoring."
        exit 0
    fi
done &  # & でバックグラウンド実行

while true; do
    # 現在の時刻を取得(秒単位)
    current_time=$(date +%s)

    # 経過時間を計算
    elapsed_time=$((current_time - start_time))

    # 1時間が経過したら終了(タイムアウト)
    if [ "$elapsed_time" -ge "$timeout" ]; then
        echo "Result TimeOut... 1 hour has passed. Exiting log monitoring."
        kill $!  # バックグラウンドプロセス(docker-compose logs)を終了
        break
    fi

    # 少し待機してから再チェック
    sleep 1
done

⇧ のようなことを、「Ansible」でどう実装するかを調査しないといけませんと...

う~む、「Ansible」のモジュール対応の中途半端さが中々に辛いところですな...

ちなみに、「シェルスクリプト」の作成についてChatGPTに質問してみましたが、「幻覚(ハルシネーション)」が酷過ぎて、笑うしかない状況でした...

ありもしないことを「捏造」するのは本当に止めて欲しいのよね...

何故か、こちらが間違いを教える側になっているというね...

とりあえず、ChatGPTでは埒が明かない状況だったので、自分で調べて作成した「シェルスクリプト」を元に「Ansible」のモジュールで実装する形にしてもらうようにChatGPTにお願いしてみた。

■ChatGPTにシェルスクリプトから「Ansible」の記法に変換してもらったもの

---
- name: Monitor docker-compose logs
  hosts: localhost
  become: yes
  tasks:
    - name: Get target file rows
      command: wc -l < target.txt
      register: target_file_rows
      changed_when: false

    - name: Initialize variables
      set_fact:
        count: 0
        start_time: "{{ ansible_date_time.iso8601 }}"
        timeout: 3600  # 1 hour in seconds

    - name: Start monitoring docker-compose logs
      shell: |
        docker-compose -f docker-compose.yaml logs -f | grep --line-buffered "Success "
      async: 3600  # Timeout for the background task (1 hour)
      poll: 0  # This means the task runs in the background
      register: docker_logs

    - name: Check logs and count "Success"
      shell: |
        tail -f /tmp/docker_logs.log | grep --line-buffered "Success " | while read -r line; do
            count=$((count + 1))
            if [ "$count" -eq "$target_file_rows" ]; then
                echo "All Complete Done."
                exit 0
            fi
        done
      async: 3600  # Timeout for the background task (1 hour)
      poll: 0
      register: monitor_logs

    - name: Wait for background task to finish
      wait_for:
        path: "/tmp/docker_logs.log"
        state: absent
        timeout: "{{ timeout }}"
      when: docker_logs is defined

    - name: Handle timeout or success
      debug:
        msg: "TimeOut or all processes completed within 1 hour"

⇧ う~む、「シェルスクリプト」で満たしていた仕様を達成してくれているのかが全くもって分からん...

結局のところ、ググるしかないんだが...

未だGoogle検索は必要ということですな...

何か、ネットの情報を漁っていると『「AI」を絶賛している事象』が多く見受けられるのだが、全く「AI」の支援を感じられない私は異なる「世界線」に紛れ込んでしまったのだろうか...

今日も今日とて、徒労感とストレスだけが蓄積されていく...

2025年2月13日(木)追記:↓ ここから

ネットの情報を漁っていたところ、

stackoverflow.com

⇧「docker logs」なら「grep」と「--line-buffered」でリアルタイム検索はできそうではある。

後は、カウントアップが上手くいくかどうかよね...

何やら、

stackoverflow.com

⇧「&&」でカウントアップできると仰っておられる方もおりますが...

もう1つ懸念として「docker-compose logs -f」との組み合わせでいけるかも分からないですが...

2025年2月13日(木)追記:↑ ここまで

2025年2月14日(金)追記:↓ ここから

ネットの情報を漁っていたところ、

asuwa.hatenablog.com

www.gentei.org

zenn.dev

⇧ 上記サイト様で、grep処理をパイプして、while read lineに繋げていたので、シェルスクリプト的には、

  1. docker-compose logs -f
  2. grep --line-buffered "[検出したい文字] "
  3. while read; do
    • カウントアップ処理
    • 条件判定
    done &

⇧ をパイプで繋げていけば、docker-compose logsのリアルタイム検出はできそうではある。

「&」を付けて、バックグラウンド処理にしておいて、条件が満たせなかった場合に処理を終了できるように、タイムアウトもできるようにしておく必要はあるが...

問題は、Ansibleのモジュールでどう実装すれば良いのかってとこなんよね...

2025年2月14日(金)追記:↑ ここまで

毎度モヤモヤ感が半端ない…

今回はこのへんで。