Puppet:虚拟资源、类和定义如何使用命名空间?

3

我是一个新的 Puppet 用户,正在努力理解名称空间等概念。

我目前正在开发一个名为 user 的模块。它在 unixuser.ppunixgroup.pp 中有一个 unixuser 类和一个 unixgroup 类。我将限制我的问题只涉及用户创建。

init.pp 目前只包含:

class user {
  class {'user::unixuser': }
  class {'user::unixgroup': }

  # Create groups before creating users
  Class['user::unixgroup'] -> ['user::unixuser']
}

unixuser.ppunixgroup.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”的位置是什么?
我尽力了解决这个问题,但如果有些混乱,我很抱歉。 :)
1个回答

1
首先,如果用户被指定到一个组中,该组将自动要求,因此您不需要以下操作:
  # Create groups before creating users
  Class['user::unixgroup'] -> ['user::unixuser']

functions.pp 看起来没问题,请在 init.pp 中尝试以下操作:

class user {
  include user::functions
  include user::unixgroup
  include user::unixuser
}

以及unixuser.pp:

class user::unixuser {
  login { 'admin':
    uid => 1000,
    gid => 1000,
  }
  ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接