Issue #2285 has been updated by Luke Kanies. Status changed from Needs design decision to Duplicate
---------------------------------------- Refactor #2285: Improved Resource Identification http://projects.puppetlabs.com/issues/2285 Author: James Turnbull Status: Duplicate Priority: Normal Assigned to: Luke Kanies Category: Target version: unplanned Affected version: 0.24.8 Branch: Puppet currently uses what is known as the namevar to uniquely identify resources, so you don't try to manage twice the same resource in the same manifest. For example, in the case of files, the whole path of the file acts as the namevar, so if you include two file resources with the same path in a manifest puppet will abort showing an error. This is not enough, as in certain cases the namevar parameter doesn't uniquely identify a resource. For example, in Gentoo you may have two different packages with the same name under different categories (dev-java/ant and app-vim/ant or app-admin/sudo and app-vim/sudo, to name a few), so you wouldn't be able to install both those packages with puppet, as it would think they are the same one. Proposed solution Some changes have to be made in order to use puppet to handle such resources. Here they are: Compound keys A compound key is a key that consist of two or more attributes. In the case of puppet, types should be able to define which set of parameters form their key to uniquely identify a resource, so you may have resources identified with a set of parameters instead of a single parameter. For example, in the case of packages, you may have that {category, name} uniquely identifies a package. Per provider specific parameters Although at first it may seem this is not directly related to the problem of improved resource identification, it's an important part of the solution. Puppet tries to abstract away from the implementation details, and in the abstraction process there are some bits of information that are lost: you cannot intend to create a type with parameters for all the possible implementation details for that type out there. So sometimes you find that you can't access some key functionality in your system because the puppet type doesn't take into account all those implementation details. For example, there are lots of parameters in package managers you can't access using puppet, as it would be unmanageable to have a type with every imaginable parameter from every imaginable package manager. Anyway, as there is the need to access some of that functionality, some puppet types currently have some parameters that are applicable only to some provider. As we can't expect to have every parameter for every type provider in the type, we should follow another path: per provider specific parameters. In this case, a provider should be able to define its own set of parameters, so we would be able to access functionality for that specific provider without the need to add parameters to the generic type, that would still handle the basic aspects of the resource. Addition of per provider specific parameters to compound keys The concept of unique resources may change from platform to platform (from provider to provider in puppet's terminology). For example, Gentoo has what is known as slotted packages: you may have Apache 1 and 2 installed in the same system, with different sets of configuration files, just in case you need to run both version of the package. While in other platforms the package Apache would be uniquely identified by its name, in Gentoo you would need an additional attribute to identify it (slot in this case), so a package resource in Gentoo is uniquely identified by the tuple {category, name, slot}. It's clear that slot is specific to the Gentoo platform and the portage provider, so providers should be able to add some of its parameters to the key of the corresponding type, so they can tweak the concept of oneness. -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" 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-bugs?hl=en.
