Class: Puppet::Util::JsonLockfile

Inherits:
Lockfile show all
Defined in:
lib/puppet/util/json_lockfile.rb

Overview

This class provides a simple API for managing a lock file whose contents are a serialized JSON object. In addition to querying the basic state (#locked?) of the lock, managing the lock (#lock, #unlock), the contents can be retrieved at any time while the lock is held (#lock_data). This can be used to store structured data (state messages, etc.) about the lock.

See Also:

Instance Attribute Summary

Attributes inherited from Lockfile

#file_path

Instance Method Summary collapse

Methods inherited from Lockfile

#initialize, #locked?, #unlock

Constructor Details

This class inherits a constructor from Puppet::Util::Lockfile

Instance Method Details

#lock(lock_data = nil) ⇒ boolean

Lock the lockfile. You may optionally pass a data object, which will be retrievable for the duration of time during which the file is locked.

Parameters:

  • lock_data (Hash) (defaults to: nil)

    an optional Hash of data to associate with the lock. This may be used to store pids, descriptive messages, etc. The data may be retrieved at any time while the lock is held by calling the #lock_data method. NOTE that the JSON serialization does NOT support Symbol objects–if you pass them in, they will be serialized as Strings, so you should plan accordingly.

Returns:

  • (boolean)

    true if lock is successfully acquired, false otherwise.



23
24
25
26
27
# File 'lib/puppet/util/json_lockfile.rb', line 23

def lock(lock_data = nil)
  return false if locked?

  super(lock_data.to_json)
end

#lock_dataObject

Retrieve the (optional) lock data that was specified at the time the file

was locked.

Returns:

  • (Object)

    the data object. Remember that the serialization does not support Symbol objects, so if your data Object originally contained symbols, they will be converted to Strings.



34
35
36
37
38
39
40
41
42
# File 'lib/puppet/util/json_lockfile.rb', line 34

def lock_data
  return nil unless file_locked?
  file_contents = super
  return nil if file_contents.nil? or file_contents.empty?
  JSON.parse(file_contents)
rescue JSON::ParserError => e
  Puppet.warning _("Unable to read lockfile data from %{path}: not in JSON") % { path: @file_path }
  nil
end