获取目录列表 mid chef 运行
Get list of directories mid chef run
我正在使用 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
您不能在创建用户的同一位置(在循环内)或在此处使用完全相同的循环(我的意思是遍历您已安装的用户)来创建这些模板和 link由厨师而不是通过现有用户)?在我看来,那将是一个更好的解决方案。
但是,如果您仍想那样使用它,则必须使用 ruby_block 并动态声明模板和 link
ruby_block 'Creating link and template' do
block do
Dir.open('/home').each do |user_dir|
next if user_dir.start_with?('.')
link = Chef::Resource::Link.new "/home/#{user_dir}/.bash_it", run_context
link.to '/home/.bash_it/'
link.link_type :symbolic
link.run_action :create
tplt = Chef::Resource::Template.new "/home/#{user_dir}/.bashrc", run_context
tplt.source 'bashrc.erb'
tplt.owner user_dir
tplt.group user_dir
tplt.mode '0644'
tplt.run_action :create
end
end
end
我正在使用 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
您不能在创建用户的同一位置(在循环内)或在此处使用完全相同的循环(我的意思是遍历您已安装的用户)来创建这些模板和 link由厨师而不是通过现有用户)?在我看来,那将是一个更好的解决方案。
但是,如果您仍想那样使用它,则必须使用 ruby_block 并动态声明模板和 link
ruby_block 'Creating link and template' do
block do
Dir.open('/home').each do |user_dir|
next if user_dir.start_with?('.')
link = Chef::Resource::Link.new "/home/#{user_dir}/.bash_it", run_context
link.to '/home/.bash_it/'
link.link_type :symbolic
link.run_action :create
tplt = Chef::Resource::Template.new "/home/#{user_dir}/.bashrc", run_context
tplt.source 'bashrc.erb'
tplt.owner user_dir
tplt.group user_dir
tplt.mode '0644'
tplt.run_action :create
end
end
end