【发布时间】:2020-06-10 16:25:44
【问题描述】:
我正在使用 Chef 来管理 Ubuntu 服务器。我正在为服务器上存在的每个用户添加一个控制台工具包,其中大部分是在第一次 Chef 运行期间创建的。第一次运行 Chef 时,会创建用户,但此代码块不会将符号链接添加到工具包,或创建正确的 .bashrc 文件。我认为这是因为 ruby Dir.open('/home') 在创建用户之前在运行开始时被编译,因为文件在下一次 Chef 运行时被正确添加。
当这个配方实际运行时,我如何获取目录列表以反映系统的当前状态?我认为ruby_block 可能是我需要查看的内容,但我不确定如何在此处应用它。
# Loop over all user folders
Dir.open('/home').each do |user_dir|
next if user_dir.start_with?('.')
link "/home/#{user_dir}/.bash_it" do
to '/home/.bash_it/'
link_type :symbolic
end
template "/home/#{user_dir}/.bashrc" do
source 'bashrc.erb'
owner user_dir
group user_dir
mode '0644'
end
end
【问题讨论】:
-
你能不能把它添加到盒子上的 /etc/skel 中,以便它作为添加用户的一部分自动创建?
-
一个 ruby_block 可能是解决方案,是的,一个定义或一个提供者,因为它会在收敛时被调用(因此你的目录已经创建)。以两次通过方式(两个厨师运行)来实现这一目标的另一种方式
标签: chef-infra