christinedraper / chef-provisioning-ssh

Provision Machines Via SSH or WinRM Using Chef Provisioning

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Gem Version

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.

The transport_options key must be a symbol.

Sub-keys should be strings.

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. "jkeiser@145.14.51.45: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, options)

In addition to host, ip_address and hostname are also additional options.

  • the ssh_options key accepts options from Net::SSH.start, the full list can be seen here:

    http://net-ssh.github.io/ssh/v2/api/classes/Net/SSH.html#M000002

  • full machine_options for SSH example:

      with_machine_options  :transport_options => {
              'is_windows' => false,
              'ip_address' => '192.168.33.23',
              'host' => 'somehost',
              'username' => 'vagrant',
              'ssh_options' => {
                  'auth_methods' => '', 
                  'bind_address' => '',
                  'compression' => '',
                  'compression_level' => '',
                  'config' => '',
                  'encryption' => '',
                  'forward_agent' => '',
                  'hmac' => '',
                  'host_key' => '',
                  'keepalive' => '',
                  'keepalive_interval' => '',
                  'kex' => '',
                  'keys' => ['/home/username/.vagrant.d/insecure_private_key'],
                  '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' => ''
              },
              'options' => {
                'prefix' => 'sudo ',
                'ssh_pty_enable' => false,
                'ssh_gateway' => 'yourgateway'
              }
            }
    
  • full machine_options for WinRM example:

      with_machine_options  :transport_options => {
                  'is_windows' => true,
                  'host' => '192.168.33.23',
                  'port' => 5985,
                  'username' => 'vagrant',
                  'password' => 'vagrant'
              }
    
  • machine resource example:

      	require 'chef/provisioning/ssh_driver'
    
      	with_driver 'ssh'
    
      	machine "ssh" do
      	  action [:ready, :setup, :converge]
      	  machine_options :transport_options => {
      	    'ip_address' => '192.168.33.22',
      	    'username' => 'vagrant',
      	    'ssh_options' => {
      	      'password' => 'vagrant'
      	    }
      	  }
      	  recipe 'vagrant::sshone'
      	  converge true
      	end
    
          ##
          # With WinRM you must use a remote chef-server
          # local-mode chef server is not currently supported
    
          with_chef_server "https://api.opscode.com/organizations/double-z",
                           :client_name => Chef::Config[:node_name],
                           :signing_key_filename => Chef::Config[:client_key]
    
      	machine "winrm" do
      	  action [:ready, :setup, :converge]
      	  machine_options :transport_options => {
      	    'is_windows' => true,
      	    'host' => '192.168.33.23',
              'port' => 5985,
      	    'username' => 'vagrant',
      	    'password' => 'vagrant'
      	  }
      	  recipe 'windows'
      	  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_ssh

NOTE: if the second machine fails it will be a result of issues with your vagrant key.

This will run chef-provisioning on each of the two vagrant nodes.

thats it.

party on wayne.

Contributing

  1. Fork it ( http://github.com/double-z/chef-provisioning-ssh/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Provision Machines Via SSH or WinRM Using Chef Provisioning

License:MIT License


Languages

Language:Ruby 100.0%