Using local variables isn't necessarily frowned upon, but you shouldn't just use local variables for the sake of using local variables. For example, making a local variable because a node variable is used a few times doesn't really provide added readability:

```ruby
file node['blah']['script'] do
  contents <<-EOF
  #!/bin/sh
  echo "Hello!"
  EOF
end

execute node['blah']['script']
```

This is perfectly fine and doesn't need to be replaced by:

```ruby
blah_script = node['blah']['script']

file blah_script do
  contents <<-EOF
  #!/bin/sh
  echo "Hello!"
  EOF
end

execute blah_script
```

But, in this case where `cloud` is used to index into the `node`, what Kannan has written is much more readable than:

```ruby
if node[node['cloud']['provider']].keys.any? { |key| key.match(/block_device_mapping_ephemeral\d+/) }
  ephemeral_devices = node[node['cloud']['provider']].keys.collect do |key|
    if key.match(/block_device_mapping_ephemeral\d+/)
      node[node['cloud']['provider']][key].match(/\/dev\//) ? node[node['cloud']['provider']][key] : "/dev/#{node[node['cloud']['provider']][key]}"
    end
  end
```

Our coding style should be a guideline for writing readable maintainable code, not a rigid set of rules that force you to do things where they don't necessarily make sense.