Sha256: 289c1b2a7a6ba69f744c25da6eeb6bc62233320ec427c58cc892ce09567fac4e

Contents?: true

Size: 1.63 KB

Versions: 8

Compression:

Stored size: 1.63 KB

Contents

require 'puppet/provider/package'

Puppet::Type.type(:package).provide :dmgapp, :parent => Puppet::Provider::Package do
    desc "Install Apps on Mac OSX distributed using simple .dmg files with name.app inside"
  
    confine :exists => "/Applications"
    confine :operatingsystem => "Darwin"
    commands :hdiutil => "/usr/bin/hdiutil"

    def self.instance_properties
      Dir["/Applications/*.app"].map do |app_path|
        name = File.basename(app_path)[/(.*)\.app/, 1]
        {
          :name => name,
          :provider => :dmgapp,
          :ensure => :installed
        }
      end
    end

    def self.instances
      instance_properties.map {|h| new(h)}
    end

    def query
      self.class.instance_properties.find { |h| h[:name] == name }
    end

    def install
        source = nil
        unless source = @resource[:source]
            self.fail ":source required"
        end
        unless name = @resource[:name]
            self.fail "missing resource name"
        end

        unless source =~ /\.dmg$/i
            self.fail ":source must be a .dmg"
        end
        
        plist = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", source
        mount_dir = plist[/<string>(.*\/tmp\/.*)<\/string>/, 1]

        app_file_name = "#{name}.app"

        begin
          if File.exists?(app_file_path = File.join(mount_dir, app_file_name))
            FileUtils.cp_r app_file_path, "/Applications/"
          else
            self.fail "#{app_file_name} not found: #{Dir["#{mount_dir}/*"] * " "}"
          end
        ensure
          hdiutil "eject", mount_dir
        end
    end
end



Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
server-blender-manifest-0.1.2 lib/puppet/dmgapp.rb
server-blender-manifest-0.1.1 lib/puppet/dmgapp.rb
server-blender-manifest-0.1.0 lib/puppet/dmgapp.rb
server-blender-manifest-0.0.19 lib/puppet/dmgapp.rb
server-blender-manifest-0.0.18 lib/puppet/dmgapp.rb
server-blender-manifest-0.0.17 lib/puppet/dmgapp.rb
server-blender-manifest-0.0.16 lib/puppet/dmgapp.rb
server-blender-manifest-0.0.15 lib/puppet/dmgapp.rb