dehio3’s diary

仕事、生活、趣味のメモ

docker版RundeckのデフォルトのUUIDについて

f:id:dehio3:20190629194323p:plain

はじめに

Rundeck(version:3.0.22)のdocker版を冗長構成で利用しようとしたところ、全てのコンテナのUUIDが同じで、再起動しても毎回同じ値になるので設定箇所を調査した。

調査

実際の設定値

コンテナに入り、設定値を確認

 docker exec -it 45b59a2ea285 bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

rundeck@45b59a2ea285:~$ grep uuid /home/rundeck/etc/framework.properties 
rundeck.server.uuid = a14bc3e6-75e8-4fe4-a90d-a16dcc976bf6
rundeck@45b59a2ea285:~$

再起動しても同じ a14bc3e6-75e8-4fe4-a90d-a16dcc976bf6 が設定される

uuidの設定箇所

コンテナ起動時に実行されるのはentry.sh

rundeck/Dockerfile at release/3.0.22 · rundeck/rundeck · GitHub

ENTRYPOINT [ "/tini", "--", "docker-lib/entry.sh" ]

entry.sh内ではRUNDECK_SERVER_UUID変数の値から判断

rundeck/entry.sh at release/3.0.22 · rundeck/rundeck · GitHub

# Generate a new server UUID
if [[ "${RUNDECK_SERVER_UUID}" = "RANDOM" ]] ; then
    RUNDECK_SERVER_UUID=$(uuidgen)
fi
echo "rundeck.server.uuid = ${RUNDECK_SERVER_UUID}" > ${REMCO_TMP_DIR}/framework/server-uuid.properties

コンテナ起動時にRUNDECK_SERVER_UUID変数は特に指定していない

デフォルト値はどこ?

entry.sh内でincludeしてるファイルがある

rundeck/entry.sh at release/3.0.22 · rundeck/rundeck · GitHub

for inc in $(ls $DIR/includes | sort -n); do
    source $DIR/includes/$inc
done

100_defaults.sh内でデフォルト値が設定されてた!

rundeck/100_defaults.sh at release/3.0.22 · rundeck/rundeck · GitHub

RUNDECK_SERVER_UUID="${RUNDECK_SERVER_UUID:-a14bc3e6-75e8-4fe4-a90d-a16dcc976bf6}"

結論

clusterモードでジョブを他系に引き継ぐにはUUIDがそれぞれでユニークになる必要あるので、起動時にRUNDECK_SERVER_UUID変数を明示的に指定する必要がある。

hub.docker.com

RUNDECK_SERVER_UUID Identifies Rundeck instances when multiple are running in the same cluster. While hard-coded to a default for getting started, this should be set manually for more advanced configurations.