Reloading ohai during compilation?

So if I have code like this:

user “deploy”

file “#{node[‘etc’][‘passwd’][‘deploy’][‘dir’]}/.somefile” do
source "somefile"

How do I make it work without giving me an error like this one:


You must supply a name when declaring a dir resource

… and without “assuming” that deploy’s home directory is always going to be /home/deploy?

I tried using this trick:

but it doesn’t seem to get run during the compile phase at all (which makes sense). Is there a way around this problem? Do I have to force all users to get created during the compile phase?

The error you included doesn’t seem to match the example resource you
provided, but I think I can gather what you’re trying to do. There’s a
number of tricks required here.

  1. Tell Ruby to close the passwd file so ohai can pick up your changes
  2. Reload the ohai etc plugin after the creation of the user
  3. Use the delayed attribute evaluation (lazy) so we don’t evaluate
    the attribute before it exists (CHEF-3731)

Note if you’re dealing with LDAP or modifying nsswitch.conf for
anything, you’ve got another problem, and it’s name is glibc

user “btm-test” do
supports :manage_home => true
home "/home/btm-test"

ruby_block “close the passwd file in Ruby” do
block do

ohai “reload passwd plugin” do
action :reload
plugin "passwd"

file “foo-btm” do
path lazy { “#{node[‘etc’][‘passwd’][‘btm-test’][‘dir’]}/foo” }
content "words words words"

Bryan McLellan | opscode | technical program manager, open source
© 206.607.7108 | (t) @btmspox | (b)