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", } }
正如你所看到的,我已经创build了一个定义的types,并将其包装在一个users:add类中。 我试图从site.pp调用,但是当我试图testing这个
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
我得到上面的错误信息。 我也计划使用ENC脚本生成yaml。 什么是yaml格式?
关于你的傀儡代码的两件事。
定义应该在它自己的文件(名为add_user.pp,位于<modulename>/manifests/文件夹)中,而不是在类文件中。
设置定义(将$ name更改为$ username,因为$ name是一个保留variables),然后将相同的一组参数添加到定义的类中。 (在你的例子中,它将是$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