Class: DanarchyDeploy::RemoteDeploy

Inherits:
Object
  • Object
show all
Defined in:
lib/danarchy_deploy.rb

Class Method Summary collapse

Class Method Details

.install_gem(connector, options) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/danarchy_deploy.rb', line 67

def self.install_gem(connector, options)
  puts "\n > Installing danarchy_deploy on #{connector[:hostname]}"
  install_result = DanarchyDeploy::Helpers.run_command("ssh -i #{connector[:ssh_key]} #{connector[:ssh_user]}@#{connector[:ipv4]} -o ConnectTimeout=30 'sudo gem install -f danarchy_deploy && test -d #{options[:working_dir]} || sudo mkdir -vp #{options[:working_dir]} && sudo chown -Rc #{connector[:ssh_user]}:#{connector[:ssh_user]} #{options[:working_dir]}'", options)

  if install_result[:stderr]
    puts '   ! Gem install failed!'
    abort("STDERR:\n#{install_result[:stderr]}")
  else
    puts "   |+ Gem installed!"
  end
end

.new(deployment, options) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/danarchy_deploy.rb', line 38

def self.new(deployment, options)
  puts "\n" + self.name
  options[:working_dir] = options[:deploy_dir] + '/' + deployment[:hostname]
  connector = { hostname: deployment[:hostname],
                ipv4:     deployment[:ipv4],
                ssh_user: deployment[:ssh_user],
                ssh_key:  deployment[:ssh_key] }

  install_gem(connector, options)
  push_deployment(connector, options)
  deploy_result = remote_LocalDeploy(connector, options)

  if deploy_result[:stderr]
    puts '   ! Deployment failed!'
    abort("STDERR:\n#{deploy_result[:stderr]}")
  else
    puts deploy_result[:stdout]
  end

  pull_deployment(connector, options)
  remote_Cleanup(connector, options)

  puts "\nRemote deployment complete!"
  deployment = JSON.parse(File.read(options[:deploy_file]), symbolize_names: true) if options[:deploy_file].end_with?('.json')
  deployment = YAML.load_file(options[:deploy_file]) if options[:deploy_file].end_with?('.yaml')
  deployment
end

.pull_deployment(connector, options) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/danarchy_deploy.rb', line 107

def self.pull_deployment(connector, options)
  puts "\n > Pulling deployment: #{options[:deploy_file]}"
  pull_result = DanarchyDeploy::Helpers.run_command("scp -i #{connector[:ssh_key]} #{connector[:ssh_user]}@#{connector[:ipv4]}:#{options[:deploy_file]} #{options[:deploy_file]}", options)
  
  if pull_result[:stderr]
    puts '   ! Deployment pull failed!'
    abort("STDERR:\n#{pull_result[:stderr]}")
  else
    puts "   |+ Deployment pulled!"
  end
end

.push_deployment(connector, options) ⇒ Object

Add ssh-keygen function, then update



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/danarchy_deploy.rb', line 80

def self.push_deployment(connector, options)
  puts "\n > Pushing deployment: #{options[:deploy_file]}"
  push_result = DanarchyDeploy::Helpers.run_command("rsync --rsh 'ssh -i #{connector[:ssh_key]}' -Havzu --delete #{options[:working_dir]}/ #{connector[:ssh_user]}@#{connector[:ipv4]}:#{options[:working_dir]}/", options)
  # push_result = DanarchyDeploy::Helpers.run_command("scp -i #{connector[:ssh_key]} #{options[:deploy_file]} #{connector[:ssh_user]}@#{connector[:ipv4]}:#{options[:deploy_dir]}/#{connector[:hostname]}/", options)
  
  if push_result[:stderr]
    puts '   ! Deployment push failed!'
    abort("STDERR:\n#{push_result[:stderr]}")
  else
    puts "   |+ Deployment pushed!"
  end
end

.remote_Cleanup(connector, options) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
# File 'lib/danarchy_deploy.rb', line 119

def self.remote_Cleanup(connector, options)
  puts "\n > Cleaning up: #{options[:deploy_dir]}"
  cleanup_result = DanarchyDeploy::Helpers.run_command("ssh -i #{connector[:ssh_key]} #{connector[:ssh_user]}@#{connector[:ipv4]} 'sudo rm -rfv #{options[:working_dir]}'", options)

  if cleanup_result[:stderr]
    puts '   ! Deployment cleanup failed!'
    abort("STDERR:\n#{cleanup_result[:stderr]}")
  else
    puts "   |+ Deployment cleaned up!"
  end
end

.remote_LocalDeploy(connector, options) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/danarchy_deploy.rb', line 93

def self.remote_LocalDeploy(connector, options)
  puts "\n > Running LocalDeploy on #{connector[:hostname]}\n\tOutput will return at the end of deployment."

  deployment =  "ssh -i #{connector[:ssh_key]} #{connector[:ssh_user]}@#{connector[:ipv4]} 'sudo danarchy_deploy local "
  deployment += '--first-run '   if options[:first_run]
  deployment += '--ssh-verbose ' if options[:ssh_verbose]
  deployment += '--pretend '     if options[:pretend]
  deployment += '--json '        if options[:deploy_file].end_with?('.json')
  deployment += '--yaml '        if options[:deploy_file].end_with?('.yaml')
  deployment += options[:deploy_file] + '\''

  DanarchyDeploy::Helpers.run_command(deployment, options)
end