- From:
- To: chef <
>
- Subject: [chef] setting node attr if certain process is running
- Date: Tue, 3 Sep 2013 21:42:59 +0000
Hiya,
I'm creating an internal CI service for my group, and there's this bit I'm
trying to implement, but it's not working yet. I'm hoping someone could
provide
tips. It is possible I'm going about this in an anti-pattern way. Feedback
appreciated:
When a "worker" node is launched (ec2), a master CI node waits for the worker
node to finish running chef and become ready to take commands from the master
CI
node. My idea is, the master CI node polls the chef API looking for a certain
node attribute of this particular worker node.
On the worker node, in the first chef run, I want to have it set for itself an
attribute that indicates it's "ready". If it's not ready, it's "pending". For
now, let's just say node's readiness is satisfied if mysql is running. If it's
running, the node should set this attr within the recipe:
node.set['macabre']['salad']['bacon']['state'] = "ready"
But I'm failing at getting the node to set this correctly.
This code below was my first try, but it doesn't work at all in that it
falsely
sets "ready" every chef run, regardless if mysql is running or not. Should
this
work the way I've written it?
# This is falsely setting "ready" every time
if `/sbin/pidof mysql >/dev/null 2>&1`
Chef::Log.debug("HIGGS-BOSON: setting bacon state ready")
node.set['macabre']['salad']['bacon']['state'] = "ready"
else
Chef::Log.debug("HIGGS-BOSON: setting bacon state pending")
node.set['macabre']['salad']['bacon']['state'] = "pending"
end
And here's my second try. It's failing in that it takes 2 chef client runs to
actually get the correct state reported: if current node attr state is
"ready",
I stop mysql, then run chef again, the state gets set to "ready" again. But
upon
a second chef run, with mysql still stopped, the state correctly gets set to
"pending". When I see this kind of thing happening, it tells me I need to
think
about the chef client run in compile time vs run time. I tried the following,
but it takes 2 chef client runs to see the correct state:
e = execute "is mysql running" do
action :nothing
command "sleep 0"
user "root"
pidfile="/var/lib/mysql/#{node['fqdn']}.pid"
if File.exists?("#{pidfile}")
Chef::Log.debug("HIGGS-BOSON: setting bacon state ready. pidfile:
#{pidfile}")
node.set['macabre']['salad']['bacon']['state'] = "ready"
else
Chef::Log.debug("HIGGS-BOSON: setting bacon state pending")
node.set['macabre']['salad']['bacon']['state'] = "pending"
end
end
e.run_action(:run)
So, yeah. Any advice?
TIA,
kallen
- [chef] setting node attr if certain process is running, kallen, 09/03/2013
Archive powered by MHonArc 2.6.16.