Monday, September 13, 2010

How To Deploy Application To Remote Server Using Chef-Solo From Local Machine

Hello Guys

Since chef-solo never uses chef server as storage for cookbook , it needs all resources on the machine where deployment has to be done. below is the simple ruby code by which we can fulfill dependency of chef-solo and deploy remote server easily :

chef_deploy.rb :
#!/usr/bin/env ruby

require 'rubygems'
require 'net/ssh'
require 'net/scp'
require 'net/sftp'

$CONF_FILE_NAME = ARGV[0]

require 'yaml'
class AutoDeploy
attr_accessor :ip, :pass, :uname, :filename , :remote_webapps_path , :run_program ,:mod_name

def initialize(config_name)
@config_name = config_name
end

def read_config
config = YAML.load_file("#{@config_name}")
@uname = config["config"]["uname"]
@ip = config["config"]["ip"]
@pass = config["config"]["pass"]
@filename = config["config"]["filename"]
@mod_name = config["config"]["mod_name"]
@run_program = config["config"]["run_program"]
@remote_webapps_path= config["config"]["remote_webapps_path"]
end

def run_ruby
Net::SSH.start("#{@ip}", "#{@uname}", :password => "#{@pass}" ) do |ssh|
rest = ssh.exec("#{@run_program}")
end
end




def do_scp_tasks
Net::SCP.start("#{@ip}", "#{@uname}", :password => "#{@pass}" ) do |scp|
scp.upload!( "#{@filename}" , "#{@remote_webapps_path}" , :recursive => true )
end
end
end

deploy = AutoDeploy.new($CONF_FILE_NAME)
deploy.read_config
@git_var = deploy.mod_name
puts deploy.mod_name
deploy.do_scp_tasks
puts "[INFO] chef_resources copy done successfully"
deploy.run_ruby
puts "[INFO] chef done successfully"

app_details.yml :
config:
mod_name: _deploy
uname: root
ip: 113.213.216.148
pass: aap-stagiwwwneegV1ce
filename: programs/chef-101.tar.gz
remote_webapps_path: /opt
run_program: "cd /opt/ && tar -zxvf chef-101.tar.gz && cd /opt/chef-101/ && chef-solo -l debug -c config/solo.rb -j config/dna.json"

1. create direcory

mkdir /opt/chef_me/ and save above two files :

ls /opt/chef_me/

chef_deploy.rb app_details.yml programs/

2 . programs folder which contains compressed tar of your solo recipes .


3 . call program : ruby chef_deploy.rb app_details.yml

No comments: