After mulling this a while, I think the real issue is that we're
treating ensure as an attribute-set rather than as an attribute.  It's
a magic feature that semantically sets a whole slew of features.  When
we say "ensure => present" we really mean "present => true" and so on:

"ensure => absent" means "present => false"
"ensure => 3.2" means "present => true; version => 3.2"
"ensure => running" means "present => true; running => true"
"ensure => eatable" means "present => true; toxic => false; palatable => true"

and so on.  Then all the special casing is on the two-valued "present"
attribute instead of trying to figure out what "ensure => scrumulous"
means, we just say that any of the above which set "present => false"
also set all other state attributes to undef, while leaving identity
attributes (e.g. name, target, provider) unchanged.

-- Markus
-----------------------------------------------------------
The power of accurate observation is
commonly called cynicism by those
who have not got it.  ~George Bernard Shaw
------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to