Chef::Provisioning::Ssh
TODO: Write a gem description
Installation
Add this line to your application's Gemfile: e
gem 'chef-provisioning-ssh'
And then execute:
$ bundle
Or install it yourself as:
$ gem install chef-provisioning-ssh
Usage
The machine_options
for provisioning ssh now use the key transport_options
which line up directly with the transport_options
for chef-provisioning proper. Transport_options can be a string or symbol and will be properly converted. The transport_options can be viewed in the code for chef-provisioning here:
https://github.com/chef/chef-provisioning/blob/master/lib/chef/provisioning/transport/ssh.rb#L17-L34
The snippet from that link is:
- host: the host to connect to, e.g. '145.14.51.45'
- username: the username to connect with
- ssh_options: a list of options to Net::SSH.start
- options: a hash of options for the transport itself, including:
- :prefix: a prefix to send before each command (e.g. "sudo ")
- :ssh_pty_enable: set to false to disable pty (some instances don't
support this, most do)
- :ssh_gateway: the gateway to use, e.g. "[email protected]:222".
nil (the default) means no gateway. If the username is omitted,
then the default username is used instead (i.e. the user running
chef, or the username configured in .ssh/config).
The options are used in
Net::SSH.start(host, username, ssh_options)
In addition to host, ip_address and hostname are also additional options.
valid ssh options are:
:auth_methods, :bind_address, :compression, :compression_level, :config, :encryption, :forward_agent, :hmac, :host_key, :keepalive, :keepalive_interval, :kex, :keys, :key_data, :languages, :logger, :paranoid, :password, :port, :proxy, :rekey_blocks_limit, :rekey_limit, :rekey_packet_limit, :timeout, :verbose, :global_known_hosts_file, :user_known_hosts_file, :host_key_alias, :host_name, :user, :properties, :passphrase, :keys_only, :max_pkt_size, :max_win_size, :send_env, :use_agent
machine resource example:
require 'chef/provisioning/ssh_driver' with_driver 'ssh' machine "sshone" do action [:ready, :setup, :converge] 'transport_options' => { 'ip_address' => '192.168.33.22', 'username' => 'vagrant', 'ssh_options' => { 'password' => 'vagrant' } } recipe 'vagrant::sshone' converge true end machine "sshtwo" do action [:ready, :setup, :converge] :transport_options => { 'ip_address' => '192.168.33.23', 'username' => 'vagrant', 'ssh_options' => { 'keys' => ['/home/username/.vagrant.d/insecure_private_key'] } } recipe 'vagrant::sshtwo' converge true end
To test it out, clone the repo:
git clone https://github.com/double-z/chef-provisioning-ssh.git
in the test directory there is a Vagrantfile with 2 nodes.
Run:
vagrant up
which will bring up both nodes.
Then run from the test directory:
chef-client -z -o vagrant::test_provisioning_ssh
This will run chef-provisioning on each of the two vagrant nodes.
thats it.
party on wayne.
Contributing
- Fork it ( http://github.com/double-z/chef-provisioning-ssh/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request