SaltStackスクリプトをテストするためのラボプラットフォームとしてLXCを使用しています。ラボは+5のUbuntu12.04 LTSコンテナーで構成されており、salt-minion
がプリインストールされたテンプレートコンテナーのクローンを作成して作成します。
テンプレートコンテナを作成してsalt-minion
をインストールすると、テンプレートはhostname
(minion_id
)に基づいてSalt test-template
を取得します。このテンプレートをlxc-clone
すると、すべてのクローンにそのテンプレートのminion_id
が含まれますが、クローンにはhostname
(minion_id
)と一致するtest-machine-{1,2,3,4,5}
が必要です。
これをbash
でスクリプト化する方法はありますか、それとも同じ効果に別の方法をとる必要がありますか?
[〜#〜] update [〜#〜]:
lxc
スクリプトのいくつかを調べたところ、lxc
スクリプトが/usr/share/lxc/lxc.functions
関数を定義するget_default_lxcpath
ファイルを使用していることがわかりました。したがって、現在のスクリプトは次のようになります。
. /usr/share/lxc/lxc.functions
# clone template
lxc-clone -o $template -n "$container"
# create saltstack minion config dir if does not exist
minion_id_path="$(get_default_lxcpath)/$container/rootfs/etc/salt"
mkdir -p "$minion_id_path"
# set minion-id directly from container name
echo "$container" > "$minion_id_path/minion_id"
このソリューションはlxcとsaltstackの両方の内部に大きく依存しているため、好きではありませんが、機能します。
更新2:
既存のコマンドが削除されたときにsalt-minion
が新しいminion_id
を生成する方法についてコメントで提案した後、これを2つのコマンドに減らしました。
. /usr/share/lxc/lxc.functions
# clone template
lxc-clone -o $template -n "$container"
# delete minion_id to allow salt-minion to generate a new one
rm "$(get_default_lxcpath)/$container/rootfs/etc/salt/minion_id"
SaltStackやLXCの内部に依存しない、より一般的で堅牢なアプローチを引き続き望んでいます。
docker
と dockerfile
を使用します。 salt-minion
と salt-master
の両方の例をオンラインで簡単に見つけることができます。
ファイルを取得して、イメージの作成に進みます(常に タグを付けることをお勧めします )。このようなディレクトリ構造が与えられた場合(上記の例に厳密に従う):
docker/
├── salt-master
│ ├── Dockerfile
│ └── supervisor-salt.conf
└── salt-minion
├── Dockerfile
└── supervisor-salt.conf
cd docker/salt-master
して発行する必要があります:
# docker build -t kstaken/ubuntu-salt-master .
salt-minion
に相当:
# cd docker/salt-minion
# docker build -t kstaken/ubuntu-salt-minion .
このプロセスにより、再利用可能なイメージが作成されます。
# docker images | grep kstaken
kstaken/ubuntu-salt-minion latest 557c052f5b14 19 seconds ago 253.5 MB
kstaken/ubuntu-salt-master latest 1f41866d05e1 5 minutes ago 262.7 MB
必要に応じて、フォアグラウンド(およびそれらにアタッチ)またはバックグラウンドで開始できます。また、 リンク それらを行うことができます:
# docker run --detach=true --hostname=salt-master --networking=true kstaken/ubuntu-salt-maste
# docker run --detach=true --hostname=minion1 --networking=true --link bersek_morse:linked-server kstaken/ubuntu-salt-minion
# docker run --detach=true --hostname=minion2 --networking=true --link berserk_morse:linked-server kstaken/ubuntu-salt-minion
結果は非常に簡単にスクリプト化できます。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fae47241a73 kstaken/ubuntu-salt-minion:latest /usr/bin/supervisord 4 seconds ago Up 2 seconds goofy_fermi
6030e7f882ba kstaken/ubuntu-salt-minion:latest /usr/bin/supervisord 25 seconds ago Up 23 seconds desperate_hawking
22b18a387e21 kstaken/ubuntu-salt-master:latest /usr/bin/supervisord 3 minutes ago Up 3 minutes 4505/tcp, 4506/tcp berserk_morse,desperate_hawking/linked-server,goofy_fermi/linked-server