My users.pp
class users::add
{
define add_user ( $name, $comment, $home, $shell, $uid, $gid, $password)
{
# Create the user. This is where most of the magic happens.
user { "$name":
name => "$name",
ensure => present,
comment => "$comment",
home => "$home",
shell => "$shell",
uid => "$uid",
password => "$password",
gid => "$gid"
}
file { "/home/$name/":
ensure => directory,
owner => $name,
group => $gid,
mode => 750,
require => [User[$name]]
}
# And a place with the right permissions for the SSH related configs
file { "/home/$name/.ssh":
ensure => directory,
owner => $name,
group => $gid,
mode => 700,
require => File["/home/$name/"]
}
# Now make sure that the ssh key authorized files is around
file { "/home/$name/.ssh/authorized_keys":
ensure => present,
owner => $name,
group => $gid,
mode => 600,
require => file["/home/$name/.ssh"]
}
}
}
My site.pp
import "classes/*.pp"
node default{
include users::add
add_user{"saga":name => "saga",comment => "Arun Sag",gid => "100",home => "/home/saga",password => '$1$passwordhash/',shell => "/bin/bash",uid => "70960",
}
}
As you can see, i have created a defined type and wrapped it inside a users:add class. I tried to call from site.pp, but when i tried to test this
sudo puppet master –compile=darkguard-dr.eglbp.corp.company.com –debug –verbose
debug: Using cached node for darkguard-dr.eglbp.corp.company.com
debug: importing '/etc/puppet/manifests/classes/users.pp' in environment production
warning: Deprecation notice: Resource references should now be capitalized on line 49 in file /etc/puppet/manifests/classes/
users.pp
err: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type add_user at /etc/puppet/manifests/s
ite.pp:5 on node darkguard-dr.eglbp.corp.company.com
Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type add_user at
/etc/puppet/manifests/site.p
p:5 on node darkguard-dr.eglbp.corp.company.com
i get above error message. I am also planning to generate yaml using a ENC script. What must be the yaml format?
Best Answer
Two things regarding your puppet code.
The define should be in it's own file (named add_user.pp, and located in the
<modulename>/manifests/
folder) , rather than in the class file.Set the define up (change $name to $username, as $name is a reserved variable), and then add the same set of parameters as the define uses to the class. (which in your example would be
$modulepath/users/manifests/add.pp
to make it work with the autoloader)If you change the class as follows:
And change the site.pp to:
For the yaml, something like this will do it, please refer to the documentation for more details: