Found the solution.
Essentially, I just need to add this:
supports :status => true, :restart => true, :reload => true
This means that it will start up the service if isn’t running. Now it works as expected when I add chef-client to the run list.
Here is the updated code:
when "bsd"
case node['platform']
when "freebsd"
directory "/etc/rc.conf.d" do
owner "root"
group "wheel"
mode "0644"
action :create
end
template "/etc/rc.d/chef-client" do
source "#{dist_dir}/rc.d/chef-client.erb"
owner "root"
group "wheel"
mode 0755
end
template "/etc/rc.conf.d/chef" do
source "#{dist_dir}/rc.conf.d/chef.erb"
mode 0644
notifies :start, "service[chef-client]", :delayed
end
service "chef-client" do
supports :status => true, :restart => true, :reload => true
action [:start]
end
else
log "You specified service style 'bsd'. You will need to set up your rc.local file."
log "Hint: chef-client -i #{node["chef_client"]["client_interval"]} -s #{node["chef_client"]["client_splay"]}"
end
else
log "Could not determine service init style, manual intervention required to start up the chef-client service."
end