我有多个节点要引导。我不想手动为每个节点键入刀具引导命令。如何自动引导节点并自动删除节点,而不是手动执行?否则可以用单刀引导命令引导多个节点。任何建议......
答案 0 :(得分:0)
我总是使用一个简单的脚本从json或yaml文件中读取并循环遍历节点。这也允许我为每个节点包含一个run_list和一组属性(如果它们不同)。
答案 1 :(得分:0)
我很久以前就尝试过这种方法,并且无法做到这一点感到沮丧。我在ec2工作,所以用户名是相同的,但它是如下所示。
它不是一个漂亮的脚本,它按顺序运行,所以可能需要一些时间,但这是一个快速的方法,只需给它一个列表然后去。
输入
./bootstrap.sh "0.0.0.0:name 1.1.1.1:name2 2.2.2.2:name3"
输入必须像上面一样引用它才能正常工作,我不想进入命令行解析,只是想要一些简单的工作。
#!/usr/bin/bash
export IFS=" "
echo "Got server list..."
echo $1
for PAIR in $1; do
SERVER=`echo $PAIR | cut -d: -f1`
NAME=`echo $PAIR | cut -d: -f2`
#knife bootstrap $SERVER -x ec2-user -i ~/.ssh/key.pem -N $NAME -r "runlist" -j '{"json":"json"}'
echo "knife bootstrap $SERVER -x ec2-user -i ~/.ssh/key.pem -N $NAME -r "runlist" -j '{"json":"json"}'"
done
现在只打印出它将运行的命令,您必须取消注释上面的行以实际运行命令。如上所述,在它周围写一些红宝石可能是个更好的主意。
哦,就在一个命令中删除许多节点而言,你可以通过刀查看批量删除。
答案 2 :(得分:0)
我使用标准的shell技巧,比如循环和awk
在循环中运行bootstrap:
for n in host1 host2 host3; do knife bootstrap $n -x -sudo -x user -r role[myapp]; done
运行以下命令:
knife bootstrap host1 -x -sudo -x user -r role[myapp]
knife bootstrap host2 -x -sudo -x user -r role[myapp]
knife bootstrap host3 -x -sudo -x user -r role[myapp]
以下命令清除Chef服务器上的所有节点(警告!)
knife node list | awk '{printf "knife node delete %s -y\nknife client delete %s -y\n",$1,$1}' | bash
运行以下一系列命令:
knife node delete host1 -y
knife client delete host1 -y
knife node delete host2 -y
knife client delete host2 -y
knife node delete host3 -y
knife client delete host3 -y