我是一个新的 Puppet 用户,正在努力理解名称空间等概念。
我目前正在开发一个名为 user
的模块。它在 unixuser.pp
和 unixgroup.pp
中有一个 unixuser
类和一个 unixgroup
类。我将限制我的问题只涉及用户创建。
init.pp
目前只包含:
class user {
class {'user::unixuser': }
class {'user::unixgroup': }
# Create groups before creating users
Class['user::unixgroup'] -> ['user::unixuser']
}
在
unixuser.pp
和unixgroup.pp
中,我只想定义虚拟资源。完成这个任务的函数应放在functions.pp
中以提高可读性。问题1:
functions.pp
只应包含定义,还是定义应该位于类内部?因此,在代码中,functions.pp
是否应包含以下内容:class user::functions {
define login ($uid, $gid) {
user { $title:
ensure => present,
uid => $uid,
gid => $gid,
}
}
}
那么define login
是否应该不在user::functions类中?如果是这样,define
行应该是define user::login
还是其他什么?
进一步地,unixuser.pp
将包含类似于以下不完整段落:
class user::unixuser {
@something { 'admin':
uid => 1000,
gid => 1000,
}
}
如果所有的内容都完成了,那么我将使用类似于“realize User::Something ['admin']”这样的东西来实现从“nodes.pp”中获取用户。
问题2:如何让类“user::unixuser”知道“login”函数?这是通过让“class user::unixuser inherits user::functions”实现,还是应该有“include user::functions”或“class {'user::functions': }”等?
问题3:根据问题2,当“user::unixuser”类与“functions.pp”协作时,“@something”的位置是什么?
我尽力了解决这个问题,但如果有些混乱,我很抱歉。 :)