compass-adapters/cobbler/snippets/kickstart_chef_run.sh
xiaodongwang eefaa34a4f make cobbler support multi target systems
Change-Id: Ibf540efdef10309a7772e99274346f8233ca5e91
2014-09-21 01:31:58 -07:00

58 lines
1.9 KiB
Bash

cat << EOF > /etc/chef/run.sh
#!/bin/bash
touch /tmp/chef.log
while true; do
echo "run chef-client on \`date\`" &>> /tmp/chef.log
clients=\\$(pgrep chef-client)
if [ "\\$?" == "0" ]; then
echo "there are chef-clients '\\$clients' running" &>> /tmp/chef.log
break
else
set >> /tmp/chef.log
echo "knife search nodes" &>> /tmp/chef.log
USER=root HOME=/root knife search node "name:\\$HOSTNAME.*" -i -a name &>> /tmp/chef.log
nodes=\\$(USER=root HOME=/root knife search node "name:\\$HOSTNAME.*" -i -a name | grep 'name: ' | awk '{print \\$2}')
echo "found nodes \\$nodes" &>> /tmp/chef.log
let all_nodes_success=1
for node in \\$nodes; do
mkdir -p /var/log/chef/\\$node
if [ ! -f "/etc/chef/\\$node.pem" ]; then
cat << EOL > /etc/rsyslog.d/\\$node.conf
\\\\$ModLoad imfile
\\\\$InputFileName /var/log/chef/\\$node/chef-client.log
\\\\$InputFileReadMode 0
\\\\$InputFileTag \\$node
\\\\$InputFileStateFile chef_\\${node}_log
\\\\$InputFileSeverity notice
\\\\$InputFileFacility local3
\\\\$InputRunFileMonitor
\\\\$InputFilePollInterval 1
local3.info @$server:514
EOL
rm -rf /var/lib/rsyslog/chef_\\$node_log
service rsyslog restart
fi
if [ -f "/etc/chef/\\$node.done" ]; then
chef-client --node-name \\$node --client_key /etc/chef/\\$node.pem &>> /tmp/chef.log
else
chef-client --node-name \\$node --client_key /etc/chef/\\$node.pem -L /var/log/chef/\\$node/chef-client.log &>> /tmp/chef.log
fi
if [ "\\$?" != "0" ]; then
echo "chef-client --node-name \\$node run failed" &>> /tmp/chef.log
let all_nodes_success=0
else
echo "chef-client --node-name \\$node run success" &>> /tmp/chef.log
touch /etc/chef/\\$node.done
fi
done
if [ \\$all_nodes_success -eq 0 ]; then
sleep 1m
else
break
fi
fi
done
EOF
chmod +x /etc/chef/run.sh