# class Puppet::Util::JsonLockfile

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 Puppet::Util::Lockfile

### Public Instance Methods

lock(lock_data = nil) click to toggle source

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.

@param [Hash] #lock_data 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. <b>NOTE</b> 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.

@return [boolean] true if lock is successfully acquired, false otherwise.

Calls superclass method Puppet::Util::Lockfile#lock

    # File lib/puppet/util/json_lockfile.rb, line 23
    def lock(lock_data = nil)
      return false if locked?

      super(lock_data.to_pson)
    end

lock_data() click to toggle source

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

    was locked.

@return [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.

Calls superclass method Puppet::Util::Lockfile#lock_data

    # 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?
      PSON.parse(file_contents)
    end