--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/058beb1c-3438-4881-9bd7-4961cb752b4e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoXMgnXvTOwe62Yz2o80E%3D5SqytRMrRXSXLZORiV50tnDg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALVJ9S%2BaxPFO6ZC92OACep0-pWsQjKv3CJVOtyjTuBwmy0TsUA%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALprHx8hEvtyhMkwU1rKbhPXuWZt8NgVdiEu657-krix6d2nUg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscribe@googlegroups.com.To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/531C426F.1000903%40dasz.at.
send an email to puppet-dev+unsubscribe@googlegroups.com [1].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/531C426F.1000903%40dasz.at
[2].tvau...@onyxpoint.com [5]
For more options, visit https://groups.google.com/d/optout [3].
-- This account not approved for unencrypted proprietary information
--
--
You received this message because you are subscribed to the Google
Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to puppet-dev+unsubscribe@googlegroups.com [6].
https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoUwQXSZ%2BTL%2BxMMMff%3DnGLbpdurM9roQRAETX7EQxGPmQQ%40mail.gmail.com
To view this discussion on the web visit
[7].
For more options, visit https://groups.google.com/d/optout [8].
Links:
------
[1] mailto:puppet-dev%2Bunsu...@googlegroups.com
[2] https://groups.google.com/d/msgid/puppet-dev/531C426F.1000903%40dasz.at
[3] https://groups.google.com/d/optout
[4] mailto:da...@dasz.at
[5] mailto:tvau...@onyxpoint.com
[6] mailto:puppet-dev+unsubscribe@googlegroups.com
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscribe@googlegroups.com.To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/ae3fafce9cb7e3521c2437070c291e2e%40hosting.edv-bus.at.
How does 'exec' do it?
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/b38dada5-bc4a-4fd9-a28b-80f2f1a1d6c6%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/7eb053d7-be1b-47b0-8a72-73a57d898612%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/74d181f4-60ed-40d3-bcb8-84cc3543d862%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/15b633d6-9713-4d94-8210-b202447e02c9%40googlegroups.com.
Well, I'm certainly a fan.
Now, we just need some upstream traction.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoV0g7gj5d__c-24DRJVcryszZNbARLKBiBH83KrKs4LEg%40mail.gmail.com.
Pedro
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALprHx_tTEKX%3D-%2B3iZiDDiWOS0fp20fT91TV%3DpWpd92eRNtVSA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to a topic in the Google Groups "Puppet Developers" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/puppet-dev/LatVZFUkwEM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoVJxr7FwwqZPhKuZ4RuHihkt1pTD6c-hsXjys7N-7LTag%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALVJ9SKe5JWSA%3D1syKLHownEOu87GkXRyr_fpw%3DSUuA4b2vWmw%40mail.gmail.com.
On Tue, Mar 11, 2014 at 5:29 PM, Andy Parker <an...@puppetlabs.com> wrote:
> Personally, I would be ok with yet another hack in puppet 3 to handle this
> issue since it has been coming up so often and since I also don't know a
> clear timeline for getting new functionality in to address this specific
> issue in a better way. And yes, my idealism is cracking :/
It's great to finally see traction on this. I still don't understand
why this is a hack though. This is what is broken:
package {"foo_deb":
name => foo,
provider => apt,
}
package {"foo_gem":
name => foo,
provider => gem,
}
But the only reason this doesn't work is that we used $name to
override the deb/gem name. This on the other hand would work fine:
exec {"foo_as_root":
command => "/bin/foo",
user => root,
}
exec {"foo_as_someuser":
command => "/bin/foo",
user => someuser,
}
Yet the only difference between the two cases is that we used $command
and not $name to override the default given by $title.
Package was designed assuming the meaningless tokens we pass to apt to
select debs have some relation to the meaningless tokens we pass to
gem to select gems.
This is just a bug in Package, fixing it isn't a hack.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALprHx8bXHLiwWaUq3iSxqYw78OmmxA6FcDdF5O1C8jKo9fFRQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/53219896.6080206%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CF470C6D.14D64%25drew.blessing%40buckle.com.
For more options, visit https://groups.google.com/d/optout.
Looking at the list of providers for file, on RHEL systems you'll probably only run into conflicts with *native* (yum, rpm, up2date), pip, and gem.I also am not opposed to this. As far as I can tell, 'package' is the only type that doesn't follow the rules of the other types (manage one thing and manage it well). It rolls lots of different things under the same abstract header.
Frankly, if I have to specify provider => 'gem', that's not any more work than specifying gem { 'name': ... } and the latter is a lot clearer in terms of dependency maintenance.
So, +1 from me for just creating a bunch of new types.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/67e90ed8-a8af-4e3a-a02b-f8f2e2ee035a%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/5321BD0F.5090507%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
SecondaryPackage wouldn't fix it if you wanted to install using pip and gem on the same system.
--
John
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/3c52ca61-15b1-48e7-a694-c3fafd70b11c%40googlegroups.com.
Sorry to resurrect an old thread, but this came to my attention again today.On Fri, Mar 14, 2014 at 6:20 AM, John Bollinger <john.bo...@stjude.org> wrote:
On Thursday, March 13, 2014 8:50:19 AM UTC-5, Trevor Vaughan wrote:SecondaryPackage wouldn't fix it if you wanted to install using pip and gem on the same system.
I see I should have devoted more text to my last statement: "The trick here would be that the provider(s) must not be based on package type, so that the package type could be used as part of a composite name." If the type's name were a composite of type (gem, pip, etc.) and name within that type, then it very well could support different package types all in one resource type. I suppose the individual package types could be features. Whereas such an approach cannot work for Package, it would be eminently workable for a unified SecondaryPackage type.
Putting it all in one type might make it a bit easier to convert existing manifests, and it would give users a single place to look for support for this sort of thing. On the other hand, the provider(s) would have to support multiple (secondary) package types. It's a trade-off between what aspects must be complicated and what parts can be simple.I think there might be a much simpler solution to the entire thing. I noticed that all of the error messages that I've seen about this are about being unable to alias. What seems to be happening is that since the "name" parameter of a package resource is the namevar, the system is automatically creating an alias for the package resource using the name. That means that we have both a Package[title] reference and a Package[name] reference. The same thing occurred in the comment that was recently added to the ticket about the tidy type.So here is my proposal: just remove the automatic aliasing. That means that the only way to reference a resource is via the title or an explicit alias. I tried this out on a VM by simply commenting out one line (https://github.com/puppetlabs/puppet/blob/master/lib/puppet/resource/catalog.rb#L90) and it seemed to work wonders.Why not just go with that change? Am I missing something?
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/90cc269a-13c4-4736-99a8-c3c81bd94d1e%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/a9e37f89-3cc3-4c3e-a989-116b26317da5%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/54352621.7050200%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
Cheers,
Felix
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/54353D47.8040108%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
Separate types undoes basically what "package" now tries to make as transparent as possible. I guess a case could be made to have "package" only deal with the OS native package provider and have separate types and providers for "secondary" packages like gem, wheel/egg/whatever etc.
Cheers,
Felix
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/54353D47.8040108%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
On 10/08/2014 01:23 PM, Trevor Vaughan wrote:
>
> service { 'my_service': require => Package['mysql']{ :provider => 'gem' } }
How about require => Package<| title == 'mysql' and provider == 'gem' |>
Not that it matters - having two Package[mysql] resources will *never*
be a thing.
If I understand Andy correctly, we might have something like
package { 'mysql-gem': package_name => mysql, provider => gem }
...which is awful I guess. Anyway, relationship targets will not be
jeopardized (that I can see).
On Wednesday, October 8, 2014 6:55:19 AM UTC-5, Felix Frank wrote:
If I understand Andy correctly, we might have something like
package { 'mysql-gem': package_name => mysql, provider => gem }
...which is awful I guess. Anyway, relationship targets will not be
jeopardized (that I can see).
It is more than awful. It either overloads the package title in dangerous ways, or else it deeply undermines Puppet's protections against duplicate resources. Consider, what is the meaning of this:
package { 'mysql-gem': package_name => 'mysql', provider => 'yum' }
?
Does it duplicate any or all of these resources?
package { 'mysql-yum': package_name => 'mysql', provider => 'yum' }
package { 'mysql-rpm': package_name => 'mysql', provider => 'rpm' }
package { 'mysql-gem': package_name => 'mysql' }
?
Do the the above Package['mysql-yum'] and Package['mysql-rpm'] conflict with each other? (They should.)
I can come up with bunches of similar issues.
My proposal allowspackage { 'mysql-gem': name => mysql, provider => gem, ensure => installed }package { 'mysql': ensure => installed }Such statements would have previously collided because both would have created a reference of Package[mysql]. My proposal is that the Package[mysql-gem] no longer gets aliased as Package[mysql], which means that the collision never occurs.John is right that this approach is a little bit like throwing in the towel. It does drop some of the uniqueness constraints that have been part of puppet for a while, but only in the case where an author has decided that they don't want those constraints, specifically in cases where the author has determined that the title should be different from the namevar. It does open up some unwanted catalogs, specifically things like:package { 'remove-mysql': name => mysql, ensure => absent }package { mysql: ensure => installed }Is protecting against that absolutely needed?
## How does exec do this?Exec is an interesting type. It doesn't seem to play by the rules of the other types. For example you can do:exec { "one": command => "/bin/echo hi" }exec { "two": command => "/bin/echo hi" }This works in spite of the fact that "command" is the namevar for exec (if you leave out command, it defaults to the title). How does it do this?The answer is that you can mark a type as "not isomorphic" (the default is that they are "isomorphic"). The only thing that this seems to control is to stop creating that pesky alias that gets in the way! There is a bit of documentation about this at https://github.com/puppetlabs/puppet/blob/master/lib/puppet/type.rb#L58-L61
Another solution is to mark package as not isomorphic as well. Based on other comments, user is also not isomorphic. Neither is tidy. Maybe others as well. Doing this would achieve the same thing as my original suggestion.
Other Topics covered so far-------------------------------------There have been a lot of other proposals floated. They either don't address the issue, or they don't solve it in any fashion that is complete enough based on various cases I've seen.## Introduce a new pkgname parameter
I see this solution as equivalent to what I proposed above.
## Primary/Secondary packagesThe proposals to have "primary" and "secondary" package types and split the providers seems like a losing battle to me. There just isn't a clear distinction. For instance RPM is on a lot of different OSes, but isn't the primary packaging system (SLES?). Often users want to manage both ruby gems and python pips on the same node, but both are considered secondary package management tools.
## Drop Package, have a type per providerThe proposal for separate types entirely is interesting (and also throws in the towel). If I'm understanding it correctly we would stop trying to have a single type with multiple providers and instead have a single type has a single provider.
This would allow for the some more flexibility, but also makes writing reusable modules much more of a pain. You could no longer write:package { 'apache': ensure => installed }
However, in practice I'm not sure that that has really worked out too well. Just take a look at what it really takes to install apache: https://github.com/puppetlabs/puppetlabs-apache/blob/master/manifests/package.pp .
## Providers are subtypes of the Package typeA variation of the last proposal is to allow types to be subtypes. What exactly that would mean isn't entirely clear.
I think it is that rpm_package would inherit all of the parameters/properties of package, which is great! It allows rpm specific parameters to be on an RPM type. However, how to references work? Does this work:rpm_package { 'rpm-apache': name => 'apache', ensure => installed }file { '/etc/apache/httpd.conf': require => Package[apache] }
Thoughts---------------I looked into removing the constraint on unique namevars after noticing that all examples of users trying to get around this problem involved them setting a unique title and a conflicting namevar. That indicated that the mental model of most users is that the titles need to be unique and the explicit namevar value is the escape hatch. We can make that expectation work by either dropping the aliasing for the namevar universally or by marking certain types as not-isomorphic.
The essence of this problem is that people are trying to describe completely valid configurations on a node, but the constraints imposed by puppet's modeling system does not allow these configurations.
A classic problem of type systems. My proposal allows some invalid configurations in addition to the valid configurations. I haven't seen any proposal yet that allows the valid configurations the people want as well as disallowing the invalid configurations.
Since this problem has gone on for so long, I'm not sure if we *will* find such a solution and so think we should just move ahead with either dropping the aliasing completely or making package non-isomorphic. I'd like to get this fixed in puppet 4.0.0. So as a way of driving to a conclusion: what would making package non-isomorphic break?
On 10/08/2014 10:34 PM, Charlie Sharpsteen wrote:
> On Wednesday, October 8, 2014 11:51:32 AM UTC-7, John Bollinger wrote:
>
>
>
> On Wednesday, October 8, 2014 6:55:19 AM UTC-5, Felix Frank wrote:
>
> package { 'mysql-gem': package_name => mysql, provider => gem }
>
> ...which is awful I guess. Anyway, relationship targets will not be
> jeopardized (that I can see).
>
>
>
> It is more than awful. It either overloads the package title in
> dangerous ways, or else it deeply undermines Puppet's protections
> against duplicate resources. Consider, what is the meaning of this:
>
> package { 'mysql-gem': package_name => 'mysql', provider => 'yum' }
> ?
Sorry, I should have been more clear. The resource title is supposed to
be arbitrary here. These manage the same resource:
package { 'mysql-gem': package_name => 'mysql', provider => 'gem' }
package { 'mysql-foo': package_name => 'mysql', provider => 'gem' }
package { 'apache': package_name => 'mysql', provider => 'gem' }
> Does it duplicate any or all of these resources?
>
> package { 'mysql-yum': package_name => 'mysql', provider => 'yum' }
> package { 'mysql-rpm': package_name => 'mysql', provider => 'rpm' }
> package { 'mysql-gem': package_name => 'mysql' }
> ?
Only titles clash, so these three could share one catalog. If yum is
your default provider, then the first and third do manage the same resource.
> To me, this proposal seams like the most pragmatic way to alleviate the
> problem without a major retool of how the Package type works. At the
> moment, I'm not convinced that opening up the possibility of accidental
> misuse outweighs the current issues surrounding the workarounds people
> have to use in order to install a package and a gem that happen to share
> the same name.
Thanks for this summary Charlie, it mirrors my feeling quite exactly.
If we open Pandora's box, users will have ample new opportunity to shoot
their own feet. I don't think that there can be a solution that prevents
abuse in the form of conflicting resources, but we do allow a use case
that we know is problematic for several if not many users.
So in response to Andy's request for a pick, I feel that making packages
non-isomorphic and allow namevar != title would be a fair compromise.
package { 'mysql-foo': name => 'mysql', provider => 'gem' }
Yes this might get abused by Forge modules. Nothing we can do about
that, as far as I can tell.
If we open Pandora's box, users will have ample new opportunity to shoot
their own feet. I don't think that there can be a solution that prevents
abuse in the form of conflicting resources, but we do allow a use case
that we know is problematic for several if not many users.
If making packages non-isomorphic were the only viable way to serve that use case then I would find that argument more persuasive. It isn't.
So in response to Andy's request for a pick, I feel that making packages
non-isomorphic and allow namevar != title would be a fair compromise.
package { 'mysql-foo': name => 'mysql', provider => 'gem' }
Yes this might get abused by Forge modules. Nothing we can do about
that, as far as I can tell.
I'm not so much worried about abuse as about well-intentioned and seemingly reasonable use that mixes badly with other well-intentioned and seemingly reasonable use. Hypothetical examples:
(1)
Module A declares
package { 'foo-gem': name => 'foo', ensure => '1.0', provider => 'gem' }
Module B declares
package { 'gem-foo': name => 'foo', ensure => '2.0', provider => 'gem' }
Result is that either A or B breaks.
(2)
Module A declares
package { 'web-server': name => 'httpd-server', ensure => '2.0.12' }
Module B declares
package { 'httpd-server': ensure => '2.4.0' }
Again, either A or B breaks.
One of Puppet's major features is that it avoids damaging managed systems systems by being conservative about what configuration specifications it is willing to accept. That trait is far more valuable to me than an ability to use specifically the Package type to manage gems etc..
--
John
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/4cd4be7c-c0ce-4700-b0b3-8dafe7bfdf16%40googlegroups.com.
That would conflict for the secondary_package resources. We could try not unifying the different providers under a single name:
package { 'mysql': ensure => installed }
gem { 'mysql': ensure => installed }
pip { 'mysql': ensure => installed }
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANhgQXs-pcUaDsfkK0ic8GQ82rFaPfQ0x8smVFLZxQEwebDreg%40mail.gmail.com.
I greatly favor anything else over making Package non-isomorphic.
I greatly favor anything else over making Package non-isomorphic.I completely appreciate what you're saying. However, I don't think this was the intent of the provider abstraction. It was intended to make the OS-specific provider transparent, right? The different types of packages we're talking about really don't fit that model.
To have a package and secondary_package type seems more confusing than it should be, where the solution proposed by Daniele and Andy seems straightforward IMO.
Whether such an alternative type is called "Secondary_package" or "Module" or "Software", or whether there are several ("Gem", "Pip", "Cpan", ...) is very much a secondary concern to me.
John
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAAAzDLdBexTyBmvzq30vdwAo884xseU0rauZzpMcOVzNaO65mg%40mail.gmail.com.
I think that dropping isomorphism would be clearer to end users.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoWTLtRMk1MHsLPHdKSFGBQomhdjbrohJg6%3DsETT_OdiZA%40mail.gmail.com.
On Thursday, October 9, 2014 3:10:55 PM UTC-7, John Bollinger wrote:
On Thursday, October 9, 2014 9:12:41 AM UTC-5, Felix Frank wrote:So in response to Andy's request for a pick, I feel that making packages
non-isomorphic and allow namevar != title would be a fair compromise.
package { 'mysql-foo': name => 'mysql', provider => 'gem' }
Yes this might get abused by Forge modules. Nothing we can do about
that, as far as I can tell.
I'm not so much worried about abuse as about well-intentioned and seemingly reasonable use that mixes badly with other well-intentioned and seemingly reasonable use. Hypothetical examples:
(1)
Module A declares
package { 'foo-gem': name => 'foo', ensure => '1.0', provider => 'gem' }
Module B declares
package { 'gem-foo': name => 'foo', ensure => '2.0', provider => 'gem' }
Result is that either A or B breaks.
(2)
Module A declares
package { 'web-server': name => 'httpd-server', ensure => '2.0.12' }
Module B declares
package { 'httpd-server': ensure => '2.4.0' }
Again, either A or B breaks.
One of Puppet's major features is that it avoids damaging managed systems systems by being conservative about what configuration specifications it is willing to accept. That trait is far more valuable to me than an ability to use specifically the Package type to manage gems etc..
JohnSo, to recap, the issue with making packages non-isomorphic is that the title becomes the only method to enforce uniqueness of resources.
We may be able to solve the problem of name clashes and retain stronger guarantees by switching the Package type to use a composite namevar instead of dropping isomorphism.