如何自动引导节点?

时间:2015-01-07 12:15:15

标签: chef

我有多个节点要引导。我不想手动为每个节点键入刀具引导命令。如何自动引导节点并自动删除节点,而不是手动执行?否则可以用单刀引导命令引导多个节点。任何建议......

3 个答案:

答案 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

现在只打印出它将运行的命令,您必须取消注释上面的行以实际运行命令。如上所述,在它周围写一些红宝石可能是个更好的主意。

哦,就在一个命令中删除许多节点而言,你可以通过刀查看批量删除。

https://docs.chef.io/knife_node.html#bulk-delete

答案 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