2015-04-15 2 views
1

Я использую шеф-повар для управления серверами Ubuntu. Я добавляю консольный инструментарий каждому пользователю, который присутствует на серверах, большинство из которых создаются во время первого запуска Chef. При запуске Chef в первый раз пользователи создаются, но этот блок кода не добавляет символическую ссылку на набор инструментов или не создает правильный .bashrc-файл. Я думаю, это связано с тем, что ruby ​​Dir.open('/home') скомпилирован в начале прогона до создания пользователей, потому что файлы добавляются правильно при следующем запуске Chef.Получить список каталогов mid chef run

Как получить список каталогов, чтобы отразить текущее состояние системы, когда этот рецепт фактически запущен? Я думаю, что 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 
+0

вы могли бы сделать что-то вроде добавить его в/и т.д./SKEL на поле так, что он создал автоматически как часть добавления пользователя? – Doon

+0

Ruby_block может быть решением да, определением или провайдером, так как он будет скомпилирован при вызове при сближении времени (и поэтому ваши диски были бы уже созданы). сделать это за два прохода (два прохода повара) - это еще один способ достичь этого. – Tensibai

ответ

1

Не может создавать эти шаблоны и ссылки в том же месте (внутри цикла), где вы создаете пользователь или используя точную и ту же петлю здесь (я имею в виду проходящий через пользователь, которые вы установили шеф а не через существующих пользователей)? Это было бы лучшим решением для меня.

Но если вы все еще хотите использовать его, как, что вы должны использовать 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 
+0

Я использую пользователя lwrp шеф-повара, чтобы добавить пользователей из пакетов данных, поэтому нет цикла, в котором я могу получить поддержку, чтобы обработать это. играли с различными способами, чтобы напасть на это, но им не повезло. Поскольку это не является чем-то критическим, я думаю, что я просто буду жить с ним, проведя 2 прогона, чтобы все наладилось. – Rockstar04

Смежные вопросы