docker_deploy 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c87bef033c84edc20c5374e3db7e1dd4529134a
4
- data.tar.gz: 4d1d410a0943d2f588fd77c391996d75886286d5
3
+ metadata.gz: 618c41243bbfc6326b2e47d0213e6706a7a27a04
4
+ data.tar.gz: 7626dd1c00d644e7a2ee649edf02b58093aa35ae
5
5
  SHA512:
6
- metadata.gz: ad82a948cb2860c0ced2e2088a16610f14e37c8abebf07b9a6906a796a32a4654d65255b3b042f094ebcfbe78edf164401c9633682df0c89206d21a319639f51
7
- data.tar.gz: 00c4c938679942f75f5accb4bb0ce7d0b3ec75b2bb77f6ae4578b32a433b267f8ce5e264e0fc33f8af6337722e4aa3e596bd24e0bc621b4f35f6b646e73bdf24
6
+ metadata.gz: 4ccb8cd48d557375771a5bc5519789179753083d5d79d29855ca4bb894137225096484770c8c974274fd5c0dccc00d250a069f6d63237cf58f75113acf8268aa
7
+ data.tar.gz: 172aa8b76dab46e8436e31aee6b67ae1c11e695ea7ba281fba805d6b69d8619c2f73e219784cb438a86d471221a5882d5e89f638df14f055157e0b30625d6c72
@@ -39,8 +39,14 @@ module DockerDeploy
39
39
  @revision ||= `git rev-parse HEAD`.chomp[0...8]
40
40
  end
41
41
 
42
+ def local(&block)
43
+ stage = LocalStage.new(self)
44
+ stage.instance_eval(&block)
45
+ @stages << stage
46
+ end
47
+
42
48
  def stage(name, &block)
43
- stage = Stage.new(self, name)
49
+ stage = RemoteStage.new(self, name)
44
50
  stage.instance_eval(&block)
45
51
  @stages << stage
46
52
  end
@@ -0,0 +1,18 @@
1
+ module DockerDeploy
2
+ class LocalStage < Stage
3
+ def initialize(context)
4
+ super(context, :local)
5
+ @servers = []
6
+ @deploy = ["docker:build", :restart]
7
+ end
8
+
9
+ def server(server)
10
+ @servers << SSHKit::Host.new(server)
11
+ end
12
+
13
+ def run(cmd)
14
+ sh(cmd)
15
+ end
16
+ alias_method :run_once, :run
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ module DockerDeploy
2
+ class RemoteStage < Stage
3
+ def initialize(context, name)
4
+ super
5
+ @servers = []
6
+ end
7
+
8
+ def server(server)
9
+ @servers << SSHKit::Host.new(server)
10
+ end
11
+
12
+ def run(cmd)
13
+ on servers do
14
+ execute(cmd)
15
+ end
16
+ end
17
+
18
+ def run_once(cmd)
19
+ on servers.first do
20
+ execute(cmd)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,11 +1,12 @@
1
1
  module DockerDeploy
2
2
  class Stage
3
- attr_reader :name, :servers, :variables, :links, :env_files
3
+ include Rake::FileUtilsExt
4
+
5
+ attr_reader :name, :servers, :variables, :links, :env_files, :deploy
4
6
 
5
7
  def initialize(context, name)
6
8
  @context = context
7
9
  @name = name
8
- @servers = []
9
10
  @env_files = []
10
11
  @variables = {}
11
12
  @ports = {}
@@ -29,20 +30,11 @@ module DockerDeploy
29
30
  @env_files.push(env_file)
30
31
  end
31
32
 
32
- def deploy(sequence = nil)
33
- @deploy = sequence if sequence
34
- @deploy
35
- end
36
-
37
33
  def host(name = nil)
38
34
  @host = name if name
39
35
  @host
40
36
  end
41
37
 
42
- def server(server)
43
- @servers << SSHKit::Host.new(server)
44
- end
45
-
46
38
  def link_mappings
47
39
  format_params("--link %s:%s", @context.links.merge(@links))
48
40
  end
@@ -26,40 +26,46 @@ module DockerDeploy
26
26
 
27
27
  desc "Pull down code from the docker registry"
28
28
  task :pull do
29
- on stage.servers do
30
- execute :docker, "pull #{context.image}"
31
- end
29
+ stage.run "docker pull #{context.image}"
32
30
  end
33
31
 
34
32
  desc "Stop the application and remove its container"
35
33
  task :stop do
36
- on stage.servers do
37
- execute :docker, "inspect #{context.container} 2>&1 > /dev/null && docker stop #{context.container} && docker rm #{context.container} || true"
38
- end
34
+ stage.run "docker inspect #{context.container} 2>&1 > /dev/null && docker stop #{context.container} && docker rm #{context.container} || true"
39
35
  end
40
36
 
41
37
  desc "Start the application in a container using the latest image."
42
38
  task :start do
43
- on stage.servers do
44
- execute :docker, "run -d #{stage.port_mappings} #{stage.link_mappings} #{stage.options} --name #{context.container} #{context.image}:latest"
45
-
46
- puts "\n\nStarted: #{stage.host}\n"
47
- end
39
+ stage.run "docker run -d #{stage.port_mappings} #{stage.link_mappings} #{stage.options} --name #{context.container} #{context.image}:latest"
48
40
  end
49
41
 
50
42
  desc "Run migrations in the latest image."
51
43
  task :migrate do
52
- on stage.servers.first do
53
- execute :docker, "run #{stage.link_mappings} #{stage.options} -i -t --rm=true #{context.image}:latest bundle exec rake db:create db:migrate"
54
- end
44
+ stage.run_once "docker run #{stage.link_mappings} #{stage.options} -i -t --rm=true #{context.image}:latest bundle exec rake db:create db:migrate"
55
45
  end
56
46
 
57
- desc "Run a Rails console in the container"
47
+ desc "Run a Rails console in a container"
58
48
  task :console do
59
- puts "Console is currently broken :("
60
- puts "Run:\n"
61
- puts "ssh #{stage.servers.first}"
62
- puts "docker run #{stage.options} -i -t --rm=true #{stage.link_mappings} #{context.image}:latest bundle exec rails console"
49
+ cmd = "docker run #{stage.options} -i -t --rm=true #{stage.link_mappings} #{context.image}:latest bundle exec rails console"
50
+ if stage.is_a?(RemoteStage)
51
+ puts "Console is currently broken :("
52
+ puts "SSH in and run:\n"
53
+ puts cmd
54
+ else
55
+ stage.run_once(cmd)
56
+ end
57
+ end
58
+
59
+ desc "Run a shell in a container"
60
+ task :shell do
61
+ cmd = "docker run #{stage.options} -i -t --rm=true #{stage.link_mappings} #{context.image}:latest /bin/bash"
62
+ if stage.is_a?(RemoteStage)
63
+ puts "Shell is currently broken :("
64
+ puts "SSH in and run:\n"
65
+ puts cmd
66
+ else
67
+ stage.run_once(cmd)
68
+ end
63
69
  end
64
70
 
65
71
  desc "Restart the running container."
@@ -1,3 +1,3 @@
1
1
  module DockerDeploy
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/docker_deploy.rb CHANGED
@@ -5,6 +5,8 @@ require "shellwords"
5
5
  require "docker_deploy/version"
6
6
  require "docker_deploy/context"
7
7
  require "docker_deploy/stage"
8
+ require "docker_deploy/remote_stage"
9
+ require "docker_deploy/local_stage"
8
10
  require "docker_deploy/task"
9
11
 
10
12
  # Improvement on the broken piece of crap text formatter in SSHKit.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-03 00:00:00.000000000 Z
12
+ date: 2014-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sshkit
@@ -69,6 +69,8 @@ files:
69
69
  - docker_deploy.gemspec
70
70
  - lib/docker_deploy.rb
71
71
  - lib/docker_deploy/context.rb
72
+ - lib/docker_deploy/local_stage.rb
73
+ - lib/docker_deploy/remote_stage.rb
72
74
  - lib/docker_deploy/stage.rb
73
75
  - lib/docker_deploy/task.rb
74
76
  - lib/docker_deploy/version.rb