How to know if a chef-client run is occuring


#1

Is there a definitive way of querying the chef server to see if a chef-client run is occurring on a node? We’ve noticed that a “knife status” will return a timestamp of “382528 hours ago”, or however many hours you are away from epoch, and but it’s not entirely consistent and using that in code feels like a bit of a hack. Ideally I’d like an API to return true or false if a chef-client run is occurring. Thoughts?

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773


#2

you mean in-flight chef runs? chef server cant say that, Chef 11 (may be
10.16 onward too) introduced file fcntl based locks while chef run is
underway, to prevent concurrent chef runs, you can use knife ssh against
the node in question and check if the lock is present, this will be a near
real time indicator of any on going chef run.
default location of the lock file is
Chef::Config[:file_cache_path]/chef-client-running.pid.


On Wed, Aug 21, 2013 at 9:22 AM, Michael Hart
michael.hart@arcticwolf.comwrote:

Is there a definitive way of querying the chef server to see if a
chef-client run is occurring on a node? We’ve noticed that a "knife status"
will return a timestamp of “382528 hours ago”, or however many hours you
are away from epoch, and but it’s not entirely consistent and using that in
code feels like a bit of a hack. Ideally I’d like an API to return true or
false if a chef-client run is occurring. Thoughts?

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773


#3

On Wednesday, August 21, 2013 at 9:22 AM, Michael Hart wrote:

Is there a definitive way of querying the chef server to see if a chef-client run is occurring on a node? We’ve noticed that a “knife status” will return a timestamp of “382528 hours ago”, or however many hours you are away from epoch, and but it’s not entirely consistent and using that in code feels like a bit of a hack. Ideally I’d like an API to return true or false if a chef-client run is occurring. Thoughts?

Chef client communicates over HTTP, which is a stateless protocol, so there’s no robust way for the server to know anything other than the last time a client made a request.

In Enterprise Chef (née Hosted and Private Chef), upcoming updates will include a node run history reporting feature that emulates the ability to track running clients by having them check in at the beginning and end of a run. How much of this makes it into the open source version and when is an open question at this point, but you could use a custom event dispatcher to track the state of clients in a similar way by integrating with a different system.

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773


Daniel DeLeo


#4

btw, knife status uses a node attribute called ‘ohai_time’, which is an
automatic attribute, provided by ohai. You can use that if you want to
check the last successfull chef run. Also, you can use the event handler
for real time chef run progress.

On Wed, Aug 21, 2013 at 9:42 AM, Ranjib Dey dey.ranjib@gmail.com wrote:

you mean in-flight chef runs? chef server cant say that, Chef 11 (may be
10.16 onward too) introduced file fcntl based locks while chef run is
underway, to prevent concurrent chef runs, you can use knife ssh against
the node in question and check if the lock is present, this will be a near
real time indicator of any on going chef run.
default location of the lock file is
Chef::Config[:file_cache_path]/chef-client-running.pid.

https://github.com/opscode/chef/blob/master/lib/chef/config.rb#L138
https://github.com/opscode/chef/blob/master/lib/chef/run_lock.rb#L45

On Wed, Aug 21, 2013 at 9:22 AM, Michael Hart <michael.hart@arcticwolf.com

wrote:

Is there a definitive way of querying the chef server to see if a
chef-client run is occurring on a node? We’ve noticed that a "knife status"
will return a timestamp of “382528 hours ago”, or however many hours you
are away from epoch, and but it’s not entirely consistent and using that in
code feels like a bit of a hack. Ideally I’d like an API to return true or
false if a chef-client run is occurring. Thoughts?

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773


#5

Thanks Daniel, the feature in Enterprise Chef sounds interesting. Do you know the timeline for this feature’s release in Enterprise Chef?

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773

On 2013-08-21, at 12:43 PM, Daniel DeLeo <dan@kallistec.commailto:dan@kallistec.com> wrote:

On Wednesday, August 21, 2013 at 9:22 AM, Michael Hart wrote:

Is there a definitive way of querying the chef server to see if a chef-client run is occurring on a node? We’ve noticed that a “knife status” will return a timestamp of “382528 hours ago”, or however many hours you are away from epoch, and but it’s not entirely consistent and using that in code feels like a bit of a hack. Ideally I’d like an API to return true or false if a chef-client run is occurring. Thoughts?
Chef client communicates over HTTP, which is a stateless protocol, so there’s no robust way for the server to know anything other than the last time a client made a request.

In Enterprise Chef (née Hosted and Private Chef), upcoming updates will include a node run history reporting feature that emulates the ability to track running clients by having them check in at the beginning and end of a run. How much of this makes it into the open source version and when is an open question at this point, but you could use a custom event dispatcher to track the state of clients in a similar way by integrating with a different system.

cheers
mike


Michael Hart
Arctic Wolf Networks
M: 226.388.4773


Daniel DeLeo


#6

On Wednesday, August 21, 2013 at 5:45 PM, Michael Hart wrote:

Thanks Daniel, the feature in Enterprise Chef sounds interesting. Do you know the timeline for this feature’s release in Enterprise Chef?

cheers
mike

We’re looking at a release some time in Q4 this year. The core code is there, but we have a lot of performance and other testing to do before we ship it to everyone.


Daniel DeLeo