管理用户的自定义文件
用户,与猫一样,常常觉得有必要标记他们的领地。 与猫不同,用户往往要定制自己的 shell 环境,如终端显示的颜色、别名等。 这通常是通过用户家目录下的一些以点开始的环境文件实现的,例如:.bash_profile。
通过修改上一节的 user::virtual::ssh_user 类,你可以将环境文件添加到基于 Puppet 的用户管理中。 在这个类中,你可以有选择地为客户提供 Puppet 文件仓库中的任何以点开头的文件。
操作步骤
对 user::virtual 类做如下修改:
class user::virtual { define user_dotfile( $username ) { file { "/home/${username}/.${name}": source => "puppet:///modules/user/${username}-${name}", owner => $username, group => $username, } } define ssh_user( $key, $dotfile = false ) { user { $name: ensure => present, managehome => true, } ssh_authorized_key { "${name}_key": key => $key, type => "ssh-rsa", user => $name, } if $dotfile { user_dotfile { $dotfile: username => $name, } } } @ssh_user { "john": key => "AAAAB3NzaC1yc2EAAAABIwAAAIEA3ATqENg +GWACa2BzeqTdGnJhNoBer8x6pfWkzNzeM8Zx7/2Tf2pl7kHdbsi TXEUawqzXZQtZzt/j3Oya+PZjcRpWNRzprSmd2UxEEPTqDw9LqY5S2B8 og/NyzWaIYPsKoatcgC7VgYHplcTbzEhGu8BsoEVBGYu3IRy5RkAcZik=", dotfile => [ "bashrc", "bash_profile" ], } }
使用如下内容创建 /etc/puppet/modules/user/files/john-bashrc 文件:
export PATH=$PATH:/var/lib/gems/1.8/bin
使用如下内容创建 /etc/puppet/modules/user/files/john-bash_profile 文件:
. ~/.bashrc
运行 Puppet。
工作原理
我们添加了一个名为 user_dotfile 的 define。 对于用户要使用的每个 dotfile 都要调用这个 define 一次。 在本例中,john 用户有两个 dotfiles:.bashrc 和 .bash_profile。 其声明如下:
@ssh_user { "john":
key => ...
dotfile => [ "bashrc", "bash_profile" ],
}
你既可以指定一个 dotfile,也可以像本例那样指定一个数组形式的列表。
对于每个 dotfile,user_dotfile 将在 modules/user/files 目录下查找相应源的文件。 例如,对名为 bashrc 的 dotfile,Puppet 将查找:
modules/user/files/john-bashrc
这将被拷贝为客户节点的如下文件:
/home/john/.bashrc
参见本书
- 本章的 使用虚拟资源管理用户 一节