💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 使用虚拟资源管理用户 用户管理是使虚拟资源能派上用场的另一个很好的例子。考虑下面的设置。 你有三个用户:John、Graham 和 Steven。为了简化管理大量主机,你为两种类型的用户定义了类: developers 和 sysadmins。每个机器都需要包含 sysadmins,但只有一部分机器允许 developer 访问: ``` node server { include user::sysadmins } node webserver inherits server { include user::developers } ``` John 是个系统管理员,Steven 是个开发者,而 Graham 既是系统管理员又是开发者, 所以 Graham 必须是两个组中的成员。这将在 webserver 上产生冲突,因为最终会导致重复定义用户 Graham。 为了避免这种情况,常见的做法是将所有用户设置成虚拟资源,并定义在一个单独的类 user::virtual 中,每个机器都包含这个类,然后在需要时对虚拟用户执行 realize。 #### 操作步骤 1. 创建如下的用户模块: ``` # mkdir -p /etc/puppet/modules/user/manifests ``` 2. 使用如下内容创建 /etc/puppet/modules/user/manifests/virtual.pp 文件: ``` class user::virtual { @user { "john": } @user { "graham": } @user { "steven": } } ``` 3. 使用如下内容创建 /etc/puppet/modules/user/manifests/developers.pp 文件: ``` class user::developers { realize( User["graham"], User["steven"] ) } ``` 4. 使用如下内容创建 /etc/puppet/modules/user/manifests/sysadmins.pp 文件: ``` class user::sysadmins { realize( User["john"], User["graham"] ) } ``` 5. 在一个节点中添加如下代码: ``` include user::virtual include user::sysadmins include user::developers ``` 6. 运行 Puppet: ``` # puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1305554239' notice: /Stage[main]/User::Virtual/User[john]/ensure: created notice: /Stage[main]/User::Virtual/User[steven]/ensure: created notice: /Stage[main]/User::Virtual/User[graham]/ensure: created notice: Finished catalog run in 2.36 seconds ``` #### 工作原理 每个节点都应该包含 user::virtual 类,作为基本配置的一部分,所有服务器都继承这个类。 这个类将为你的组织或站点定义所有的用户。同时也应包括只是为了运行应用程序或服务的任何用户 (即非登录用户,例如 apache 或 git)。 然后你可以对你的用户进行分组(不同于 UNIX 系统中的组,只是用于区分不同的团队或任务角色), 例如 developers 和 sysadmins。 对于一个组的类,可以 realize 组里需要的所有用户,例如: ``` class user::sysadmins { realize( User["john"], User["graham"] ) } ``` 之后便可以在任何需要的地方包含这些组,而不用担心因为多次定义同一个用户而产生的冲突。 #### 参见本书 * 本章的 [使用虚拟资源](#ch06sec01) 一节 * 本章的 [管理用户的自定义文件](#ch06sec04) 一节