On Monday, November 18, 2013 10:41:39 PM UTC-6, Rich Burroughs wrote:
>
> If you really mean assign, no. UIDs are managed through the user resource
> type:
>
> http://docs.puppetlabs.com/references/latest/type.html#user
>
>
>
Well, that's what Stuart is using. He switched up on you.
I take the question to be "is there a way to declare different UIDs for
different users in an array-titled User declaration?". The basic answer is
"not as such". The whole point of the array-title resource declaration
shortcut is that all the resources declared via any one such declaration
get the same parameter declarations.
That does not mean you cannot both use compact forms and assign different
parameters per user, however. There are several alternatives. One of the
simpler ones is to use resource parameter defaults (beware: unlike
variables, parameter defaults have dynamic scope) and multiple-distinct
resources per resource declaration block. Example:
class mymodule::users {
# These default parameters apply to all Users declared
# in this dynamic scope:
User {
ensure => 'present',
gid => 'users',
managehome => true,
shell => '/bin/bash'
}
# such as these:
user {
'alice': uid => 501;
'bob': uid => 502;
'charlie': uid => 503;
}
}
Another alternative is to use a defined-type wrapper to adapt your data
source to the User resource type:
class mymodule {
# A data source:
$user_uids = {
'david' => 504,
'emily' => 505,
'frank' => 506
}
}
# An adapter definition:
define mymodule::local_user(
$ensure = 'present',
$gid = 'users',
$managehome = 'true',
$shell = '/bin/bash') {
include 'mymodule'
user { $title:
ensure => $ensure,
# Here's where the magic happens:
uid => $mymodule::user_uids[$title],
gid => $gid,
managehome => $managehome,
shell => $shell
}
}
# The resource-declaring class:
class mymodule::other_users {
include 'mymodule'
# The keys() function is from the puppetlabs-stdlib module
$declared_users = keys($mymodule::user_uids)
mymodule::local_user { $declared_users: }
}
That's not an improvement for so few users, but by the time you get up even
to tens of users it's a win. Moreover, it's all driven by the single data
source, so you there is no risk of different data sources falling out of
sync with each other.
If the point is to keep your manifests simple, but you don't mind the data
being complex and repetitive, then you also have the option of declaring
multiple resources of the same type with whatever parameters you want via
the built-in create_resources() function. That might make sense if the
data are being loaded from an external source, perhaps via Hiera
(recommended):
class my_module::still_more_users {
$user_data = hiera('still_more_users')
create_resources('user', $user_data)
}
You can't get much simpler than that on the manifest side, but you need to
express all the non-default parameter values in the data.
John
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/06b0c9bf-c8a4-4005-b6e8-58f69721a4e0%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.