I think it might be better to just create a raw `connection` object here. For example:

```ruby
def chef
  @chef ||= ChefAPI::Connection.new(
    endpoint: @config.chef_server_url,
    client: node_name,
    key: cached_client_key_path.to_s,

    # Proxy
    proxy_address: vagrant_config.proxy_address,
    proxy_port: vagrant_config.proxy_port,
    proxy_username: vagrant_config.proxy_username,
    proxy_password:  vagrant_config.proxy_password,

    # SSL
    ssl_pem_file: vagrant_config.ssl_pem_file_path_magical_method,
    ssl_verify: vagrant_config.ssl_verify?,
  )
end
```

It's okay to just "set" proxy and SSL information without checking if it's `nil` and all that jazz. ChefAPI handles that for you :smile:.

Is there a bug to report in ChefAPI that you can't pass the key as a `Pathname`? That parameters is magical and should accepts a file path, raw key, or `OpenSSL::PKey::RSA` object.

Also, after writing all of this, I realized that you can't do much with a raw `connection` object (yet). Ideally you would be able to do something like:

```ruby
chef.clients.delete(node_name)
# chef.clients.create(...)
```

which seems more Rubyesqueish to me. However, I never got around to implementing (read "testing") that... Alternatively I could take the Octokit approach and do something like:

```ruby
chef.delete_client(node_name)
# chef.create_client(...)
```