From a28d3937c77ea7d16f7a005778e787f2d3eba92f Mon Sep 17 00:00:00 2001 From: Will Farrington Date: Sat, 2 Jun 2012 17:03:22 -0700 Subject: [PATCH] reimplement as a puppet-defined custom type --- README.md | 17 ++++------- lib/puppet/provider/defaults/osx.rb | 46 ----------------------------- lib/puppet/type/defaults.rb | 8 ----- manifests/osx_defaults.pp | 27 +++++++++++++++++ 4 files changed, 33 insertions(+), 65 deletions(-) delete mode 100644 lib/puppet/provider/defaults/osx.rb delete mode 100644 lib/puppet/type/defaults.rb create mode 100644 manifests/osx_defaults.pp diff --git a/README.md b/README.md index 0a6b35d..eaf17a7 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,18 @@ boolean, integer, or string types. ## Requirements * Ruby 1.8 or 1.9 -* Puppet 2.7.0 or later +* Puppet 2.6.0 or later * OS X ## Usage ``` -defaults { 'translucent_dock_icons': - domain => 'com.apple.dock', - key => 'showhidden', - value => true, +osx_defaults { "require pass at screensaver": ensure => present, - notify => Exec['restart_dock'] -} - -exec { 'restart_dock': - command => 'killall Dock', - refreshonly => true + domain => 'com.apple.screensaver', + key => 'askForPassword', + value => 1, + user => 'dummy' } ``` diff --git a/lib/puppet/provider/defaults/osx.rb b/lib/puppet/provider/defaults/osx.rb deleted file mode 100644 index 50ff7e2..0000000 --- a/lib/puppet/provider/defaults/osx.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'rubygems' - -Puppet::Type.type(:defaults).provide(:osx) do - desc "Manage OSX defaults" - - confine :operatingsystem => :darwin - - commands :defaults => "/usr/bin/defaults" - - def create - type_and_val = self.class.get_type_val_string(resource[:value]) - defaults(:write, resource[:domain], resource[:key], type_and_val) - end - - def defaults(command) - if resource[:user] - asuser(resource[:user]) { super } - end - end - - def destroy - defaults(:delete, resource[:domain], resource[:key]) - end - - def exists? - su_str = "su - #{resource[:user]}" if resource[:user] - `#{su_str} /usr/bin/defaults read #{resource[:domain]} | grep '#{resource[:key]}'` - if $? == 0 - defaults(:read, resource[:domain], resource[:key]).split(' ')[1] == resource[:value].to_s - else - false - end - end - - def self.get_type_val_string(val) - if val.kind_of? Numeric - "-int #{val}" - elsif val.kind_of? String - "-string '#{val}'" - elsif val.kind_of?(TrueClass) || val.kind_of?(FalseClass) - "-bool #{val}" - else - raise ArgumentError, "The type of #{val} is not supported" - end - end -end diff --git a/lib/puppet/type/defaults.rb b/lib/puppet/type/defaults.rb deleted file mode 100644 index c7df45b..0000000 --- a/lib/puppet/type/defaults.rb +++ /dev/null @@ -1,8 +0,0 @@ -Puppet::Type.newtype(:defaults) do - ensurable - - newparam(:name, :namevar => true) - newparam(:domain) - newparam(:key) - newparam(:value) -end diff --git a/manifests/osx_defaults.pp b/manifests/osx_defaults.pp new file mode 100644 index 0000000..d56749c --- /dev/null +++ b/manifests/osx_defaults.pp @@ -0,0 +1,27 @@ +define osx_defaults( + $ensure = 'present', + $domain = undef, + $key = undef, + $value = undef, + $user = undef, +) { + $defaults_cmd = "/usr/bin/defaults" + + if $ensure == 'present' { + if ($domain != undef) and ($key != undef) and ($value != undef) { + exec { "osx_defaults write ${domain}:${key}=>${value}": + command => "${defaults_cmd} write ${domain} ${key} ${value}", + unless => "${defaults_cmd} read ${domain} ${key}|egrep '^${value}$'", + user => $user + } + } else { + warn("Cannot ensure present without domain, key, and value attributes") + } + } else { + exec { "osx_defaults delete ${domain}:${key}": + command => "${defaults_cmd} delete ${domain} ${key}", + onlyif => "${defaults_cmd} read ${domain} | grep ${key}", + user => $user + } + } +}