It would require a change to what's being passed to `variables`, but I think I'd prefer to see the explicit `string` and `array` stuff removed in favor of passing each of the variables through an array-i-fication call first.  Something like:

``` ruby
arrayed_vars = {}
node['ipf'].each do |k,v|
  arrayed_vars[k] = [*v]
end

# ... then later on, use the "array" version of the conf for either
# incoming strings or arrays (and please rename it to `ipf.conf.erb`)

template '/etc/ipf/ipf.conf' do
  source 'ipf_array.conf.erb'  # which should now replace `ipf.conf.erb`
  # ...
  variables arrayed_vars
end
```