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"]
}
}
}
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",
}
}
Как видите, я создал определенный тип и заключил его в класс users: add. Я пытался позвонить с site.pp, но когда попытался проверить это
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 на узле darkguard-dr.eglbp.corp.company.com
я получаю сообщение об ошибке выше. Я также планирую сгенерировать yaml с помощью сценария ENC. Каким должен быть формат yaml?
Две вещи относительно вашего марионеточного кода.
Определение должно быть в собственном файле (названном add_user.pp и расположенном в <modulename>/manifests/
папка), а не в файле класса.
Настройте определение (измените $ name на $ username, поскольку $ name - это зарезервированная переменная), а затем добавьте тот же набор параметров, который использует определение для класса. (который в вашем примере будет $modulepath/users/manifests/add.pp
чтобы он работал с автозагрузчиком)
Если вы измените класс следующим образом:
class users::add( $u_name, $u_comment, $u_home, $u_shell, $u_uid, $u_gid, $u_password)
{
users::add_user{ $u_name:
$username => $u_name,
$comment => $u_comment,
$home => $u_home,
$shell => $u_shell,
$uid => $u_uid,
$gid => $u_gid,
$password => $u_password,
}
}
И измените site.pp на:
import "classes/*.pp"
node default{
class { 'add_user':
username => "saga",
comment => "Arun Sag",
gid => "100",
home => "/home/saga",
password => '$1$passwordhash/',
shell => "/bin/bash",
uid => "70960",
}
}
Для yaml это подойдет что-то вроде этого, см. документация Больше подробностей:
---
classes:
users::add:
parameters:
name: some_name
comment: some_comment
home: home_value
shell: /bin/sh
uid: 3990
gid: 3990
password: superstrongpassword
environment:
production