conjure 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/History.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### Version 0.1.5
2
+ 2013-11-22
3
+
4
+ * Add --verbose flag for debugging
5
+
1
6
  ### Version 0.1.4
2
7
  2013-11-19
3
8
 
@@ -4,8 +4,4 @@ module Conjure
4
4
  def self.config
5
5
  @config ||= Config.load Dir.pwd
6
6
  end
7
-
8
- def self.log(message)
9
- puts message
10
- end
11
7
  end
@@ -4,6 +4,12 @@ module Conjure
4
4
  class Command < Thor
5
5
  attr_accessor :application_options
6
6
 
7
+ class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "Show details of low-level operations for debugging"
8
+ def initialize(*args)
9
+ super
10
+ Log.level = :debug if options[:verbose]
11
+ end
12
+
7
13
  desc "deploy", "Deploy the app"
8
14
  method_option :branch, :aliases => "-b", :type => :string, :desc => "Specify branch to deploy"
9
15
  method_option :test, :type => :boolean, :desc => "Describe the deploy settings but don't deploy"
@@ -0,0 +1,15 @@
1
+ module Conjure
2
+ class Log
3
+ class << self
4
+ attr_accessor :level
5
+ end
6
+
7
+ def self.info(message)
8
+ puts message
9
+ end
10
+
11
+ def self.debug(message)
12
+ puts message if @level == :debug
13
+ end
14
+ end
15
+ end
@@ -3,6 +3,7 @@ module Conjure
3
3
  class CloudServer
4
4
  require "fog"
5
5
  require "digest/md5"
6
+ require "pathname"
6
7
 
7
8
  def initialize(name)
8
9
  @name = name
@@ -39,12 +40,12 @@ module Conjure
39
40
 
40
41
  def existing_server
41
42
  server = connection.servers.find{|s| s.name == @name }
42
- Conjure.log " [cloud] Using existing server #{@name}" if server
43
+ Log.info " [cloud] Using existing server #{@name}" if server
43
44
  server
44
45
  end
45
46
 
46
47
  def new_server
47
- Conjure.log " [cloud] Launching new server #{@name}"
48
+ Log.info " [cloud] Launching new server #{@name}"
48
49
  connection.servers.bootstrap bootstrap_options.merge(fog_credentials)
49
50
  end
50
51
 
@@ -48,12 +48,12 @@ module Conjure
48
48
  File.open file, "w" do |f|
49
49
  f.write base_image.command("/usr/bin/mysqldump #{client_options}")
50
50
  end
51
- Conjure.log "[export] #{File.size file} bytes exported to #{file}"
51
+ Log.info "[export] #{File.size file} bytes exported to #{file}"
52
52
  end
53
53
 
54
54
  def import(file)
55
55
  base_image.command "echo 'source /files/#{File.basename file}' | /usr/bin/mysql #{client_options}", files: [file]
56
- Conjure.log "[import] #{File.size file} bytes imported from #{file}"
56
+ Log.info "[import] #{File.size file} bytes imported from #{file}"
57
57
  end
58
58
 
59
59
  def client_options
@@ -52,12 +52,12 @@ module Conjure
52
52
  File.open file, "w" do |f|
53
53
  f.write base_image.command("#{bin_path}/pg_dump #{client_options} #{@db_name}")
54
54
  end
55
- Conjure.log "[export] #{File.size file} bytes exported to #{file}"
55
+ Log.info "[export] #{File.size file} bytes exported to #{file}"
56
56
  end
57
57
 
58
58
  def import(file)
59
59
  base_image.command "#{bin_path}/psql #{client_options} -d #{@db_name} -f /files/#{File.basename file}", files: [file]
60
- Conjure.log "[import] #{File.size file} bytes imported from #{file}"
60
+ Log.info "[import] #{File.size file} bytes imported from #{file}"
61
61
  end
62
62
 
63
63
  def client_options
@@ -3,8 +3,6 @@ require 'digest/sha1'
3
3
  module Conjure
4
4
  module Service
5
5
  class DockerHost
6
- VERBOSE = false
7
-
8
6
  def initialize(server_name)
9
7
  @server_name = server_name
10
8
  end
@@ -18,7 +16,7 @@ module Conjure
18
16
  end
19
17
 
20
18
  def new_docker_path
21
- Conjure.log "[docker] Installing docker"
19
+ Log.info "[docker] Installing docker"
22
20
  server.run "dd if=/dev/zero of=/root/swapfile bs=1024 count=524288"
23
21
  server.run "mkswap /root/swapfile; swapon /root/swapfile"
24
22
  server.run "curl https://get.docker.io/gpg | apt-key add -"
@@ -31,7 +29,7 @@ module Conjure
31
29
  def existing_docker_path
32
30
  path = server.run("which docker").stdout.to_s.strip
33
31
  path = nil if path == ""
34
- Conjure.log "[docker] Using installed #{path}" if path
32
+ Log.info "[docker] Using installed #{path}" if path
35
33
  path
36
34
  end
37
35
 
@@ -44,8 +42,8 @@ module Conjure
44
42
  full_command = "#{docker_path} #{command}"
45
43
  full_command = "nohup #{full_command}" if options[:nohup]
46
44
  full_command = "echo '#{shell_escape options[:stdin]}' | #{full_command}" if options[:stdin]
47
- Conjure.log " [scp] #{options[:files].inspect}" if VERBOSE and options[:files]
48
- Conjure.log " [ssh] #{full_command}" if VERBOSE
45
+ Log.debug " [scp] #{options[:files].inspect}" if options[:files]
46
+ Log.debug " [ssh] #{full_command}"
49
47
  result = server.run full_command, :stream_stdin => options[:stream_stdin], :files => options[:files], &block
50
48
  raise "Docker error: #{result.stdout} #{result.stderr}" unless result.status == 0
51
49
  result.stdout
@@ -117,7 +115,7 @@ module Conjure
117
115
 
118
116
  def run(command = "")
119
117
  unless running_container
120
- Conjure.log "[docker] Starting #{@label}"
118
+ Log.info "[docker] Starting #{@label}"
121
119
  run_options = host_volume_options(@host_volumes)
122
120
  run_options += port_options(@ports)
123
121
  command = shell_command command if command != ""
@@ -127,7 +125,7 @@ module Conjure
127
125
  raise "Docker: #{@label} daemon exited with: #{output}"
128
126
  end
129
127
  end
130
- Conjure.log "[docker] #{@label} is running at #{running_container.ip_address}"
128
+ Log.info "[docker] #{@label} is running at #{running_container.ip_address}"
131
129
  running_container
132
130
  end
133
131
 
@@ -157,7 +155,7 @@ module Conjure
157
155
 
158
156
  def build
159
157
  destroy_instances
160
- Conjure.log "[docker] Building #{@label} image"
158
+ Log.info "[docker] Building #{@label} image"
161
159
  raise_build_errors(@host.command "build -t #{expected_image_name} -", stdin: dockerfile)
162
160
  @host.containers.destroy_all_stopped
163
161
  end
@@ -225,7 +223,7 @@ module Conjure
225
223
 
226
224
  def destroy_all(options)
227
225
  while container = find(:image_name => options[:image_name]) do
228
- Conjure.log "[docker] Stopping #{options[:image_name]}"
226
+ Log.info "[docker] Stopping #{options[:image_name]}"
229
227
  host.command "stop #{container.id}"
230
228
  host.command "rm #{container.id}"
231
229
  end
@@ -10,11 +10,11 @@ module Conjure
10
10
  end
11
11
 
12
12
  def deploy
13
- Conjure.log "[deploy] Deploying #{@name}:#{@branch} to #{@environment}"
13
+ Log.info "[deploy] Deploying #{@name}:#{@branch} to #{@environment}"
14
14
  unless @test
15
15
  codebase.install
16
16
  rails.run
17
- Conjure.log "[deploy] Application deployed to #{docker.ip_address}"
17
+ Log.info "[deploy] Application deployed to #{docker.ip_address}"
18
18
  end
19
19
  end
20
20
 
@@ -42,12 +42,12 @@ module Conjure
42
42
  end
43
43
 
44
44
  def configure_database
45
- Conjure.log "[ repo] Generating database.yml"
45
+ Log.info "[ repo] Generating database.yml"
46
46
  volume.write "config/database.yml", database_yml
47
47
  end
48
48
 
49
49
  def configure_logs
50
- Conjure.log "[ repo] Configuring application logger"
50
+ Log.info "[ repo] Configuring application logger"
51
51
  setup = 'Rails.logger = Logger.new "#{Rails.root}/log/#{Rails.env}.log"'
52
52
  volume.write "config/initializers/z_conjure_logger.rb", setup
53
53
  end
@@ -50,7 +50,7 @@ module Conjure
50
50
  end
51
51
 
52
52
  def install_gems
53
- Conjure.log "[ rails] Installing gems"
53
+ Log.info "[ rails] Installing gems"
54
54
  base_image.command "cd #{@app_name}; bundle --deployment"
55
55
  end
56
56
 
@@ -59,17 +59,17 @@ module Conjure
59
59
  end
60
60
 
61
61
  def database_exists
62
- Conjure.log "[ rails] Checking the database status"
62
+ Log.info "[ rails] Checking the database status"
63
63
  base_image.command("cd #{@app_name}; bundle exec rake db:version; true").include? "Current version:"
64
64
  end
65
65
 
66
66
  def migrate_database
67
- Conjure.log "[ rails] Migrating the database"
67
+ Log.info "[ rails] Migrating the database"
68
68
  base_image.command "cd #{@app_name}; bundle exec rake db:migrate"
69
69
  end
70
70
 
71
71
  def initialize_database
72
- Conjure.log "[ rails] Setting up the database"
72
+ Log.info "[ rails] Setting up the database"
73
73
  base_image.command "cd #{@app_name}; bundle exec rake db:setup"
74
74
  end
75
75
 
@@ -12,18 +12,13 @@ module Conjure
12
12
  @options = options
13
13
  end
14
14
 
15
- def run(command, options = {})
16
- stdout, stderr, exit_status = ["", "", nil]
15
+ def run(command, options = {}, &block)
16
+ result = nil
17
17
  session.open_channel do |channel|
18
18
  channel.request_pty
19
19
  channel.exec command do |c, success|
20
20
  raise "Failed to execute command via SSH" unless success
21
- channel.on_data do |c, data|
22
- yield data if block_given?
23
- stdout << data
24
- end
25
- channel.on_extended_data { |c, type, data| stderr << data }
26
- channel.on_request("exit-status") { |c, data| exit_status = data.read_long }
21
+ result = Result.new(channel, &block)
27
22
  end
28
23
  if options[:stream_stdin]
29
24
  channel.on_process do
@@ -36,9 +31,9 @@ module Conjure
36
31
  else
37
32
  session.loop
38
33
  end
39
- Result.new stdout, stderr, exit_status
34
+ result
40
35
  end
41
-
36
+
42
37
  def session
43
38
  session_options = {
44
39
  :auth_methods => ["publickey"],
@@ -58,8 +53,20 @@ module Conjure
58
53
  ensure
59
54
  system "stty -raw echo"
60
55
  end
56
+
57
+ class Result
58
+ attr_accessor :stdout, :stderr, :status
59
+ def initialize(channel)
60
+ @stdout, @stderr = "", ""
61
+ channel.on_data do |c, data|
62
+ yield data if block_given?
63
+ @stdout << data
64
+ end
65
+ channel.on_extended_data { |c, type, data| @stderr << data }
66
+ channel.on_request("exit-status") { |c, data| @status = data.read_long }
67
+ end
68
+ end
61
69
  end
62
70
 
63
- Result = Struct.new(:stdout, :stderr, :status)
64
71
  end
65
72
  end
@@ -19,12 +19,12 @@ module Conjure
19
19
  end
20
20
 
21
21
  def checkout_code
22
- Conjure.log "[ repo] Checking out code from git"
22
+ Log.info "[ repo] Checking out code from git"
23
23
  git_shell.command "git clone -b #{@branch} #{@origin_url} #{code_path}"
24
24
  end
25
25
 
26
26
  def fetch_code_updates
27
- Conjure.log "[ repo] Fetching code updates from git"
27
+ Log.info "[ repo] Fetching code updates from git"
28
28
  git_shell.command "cd #{code_path}; git reset --hard; git checkout #{@branch}; git pull"
29
29
  end
30
30
 
@@ -1,3 +1,3 @@
1
1
  module Conjure
2
- VERSION = "0.1.4" unless defined?(VERSION)
2
+ VERSION = "0.1.5" unless defined?(VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conjure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-19 00:00:00.000000000 Z
12
+ date: 2013-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -113,6 +113,7 @@ files:
113
113
  - lib/conjure/service/docker_host.rb
114
114
  - lib/conjure/service/docker_shell.rb
115
115
  - lib/conjure/service/database.rb
116
+ - lib/conjure/log.rb
116
117
  - lib/conjure/config.rb
117
118
  - lib/conjure/version.rb
118
119
  - lib/conjure/command.rb