我使用LXC作为testingSaltStack脚本的实验平台。 该实验室由+5 Ubuntu 12.04 LTS容器组成,我通过克隆模板容器来预先安装salt-minion 。
一旦我创build模板容器并安装salt-minion minion_id ,模板将根据hostname ( test-template )获取它的Salt minion_id 。 如果我lxc-clone这个模板,那么所有的克隆都会有这个模板的minion_id ,但是我希望克隆的minion_id与它们的hostname相匹配( test-machine-{1,2,3,4,5} minion_id test-machine-{1,2,3,4,5} )。
有没有办法让这个脚本与bash或者我应该采取另一条path相同的效果?
更新 :
我查看了一些lxc脚本,发现lxc脚本使用定义了get_default_lxcpath函数的/usr/share/lxc/lxc.functions文件,所以我当前的脚本如下所示:
. /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"
我不喜欢这个解决scheme,因为它很大程度上依赖于lxc和saltstack的内部,但是完成这个工作。
更新2 :
在提出了关于salt-minion minion_id在删除现有的minion_id时候产生新的minion_idbuild议之后,我把它简化为两个命令:
. /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内部的更通用/健壮的方法。
使用dockerfile 。 你可以很容易地find在线salt-minion例子。
抓住文件,并继续构build图像(它们总是一个好主意 )。 给定一个像这样的目录结构(紧接着上面的例子):
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 .
这个过程创build可重用的图像:
# 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