获取中厨运行的目录列表

问题描述 投票:2回答:1

我正在使用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
chef
1个回答
2
投票

你不能在创建用户的同一个地方(在循环中)创建这些模板和链接,或者在这里使用完全相同的循环(我的意思是通过chef安装的用户,而不是通过现有用户)? 在我看来,这将是一个更好的解决方案。

但如果你仍然想这样使用,你必须使用ruby_block,并声明模板和动态连接

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
© www.soinside.com 2019 - 2024. All rights reserved.