docker-sync 0.0.9 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d1a5236f02cd1af95a2c5dd4f958653a2fb3509
4
- data.tar.gz: f9eea32e9ed875dcd767bd6c7309c7fe0aa0ea4b
3
+ metadata.gz: 5187439aee543a2580cae6188d1ff4e36a2d2fdc
4
+ data.tar.gz: 63ee4e96be043f0c1b7744e63c2c5da14575c2e9
5
5
  SHA512:
6
- metadata.gz: ca288151453629511d80e24436ea0efb072cb83ec559787249873b85932814f876e7bd66dad3ad07c288210a0d44612aef58507adbe27eab98afe9c1f5fd2ce1
7
- data.tar.gz: 515f0cda8d12222f52c2cd2f63566b8ae5ca8148b76b898fd5e3517fcddbd925743b96d65c4755990b8be3f5ddc09849b1e9bc673d303612014e67192f1a6626
6
+ metadata.gz: 45f6b738ef5138f7a9617694c519d83713cc7af09607f6ace0b3fd1125b37b820de4646448c09866c94d6ea325a729b81dc9bd88fab4524a138a8a114b34ff8d
7
+ data.tar.gz: 444d000796341735047b6f725e39ab2cbaa8bf1131161d6d1c093544d68328b5a48ad2b284f005137a2c05e32b81dd88d17b215889a935cf479a83461c192470
data/Thorfile CHANGED
@@ -2,9 +2,6 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
3
  thor = File.expand_path('../tasks', __FILE__)
4
4
 
5
- module Global
6
- DO_UPDATE_CHECK=false
7
- end
8
5
  Dir.glob(File.join(thor, '/**/*.thor')).each { |taskfile|
9
6
  load taskfile
10
7
  }
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.11
@@ -3,8 +3,8 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
 
4
4
  require 'thor'
5
5
  require 'update_check'
6
- DO_UPDATE_CHECK=true
7
- thor = File.expand_path('../../tasks', __FILE__)
6
+
7
+ thor = File.expand_path('../../tasks/sync', __FILE__)
8
8
  Dir.glob(File.join(thor, '/**/*.thor')).each { |taskfile|
9
9
  load taskfile
10
10
  }
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'thor'
5
+ require 'update_check'
6
+
7
+ # ensure docker-compose is installed, if not, do so
8
+ begin
9
+ gem 'docker-compose'
10
+ rescue Gem::LoadError
11
+ puts "docker-compose gem is missing, installing 'gem install docker-compose'"
12
+ system('gem install docker-compose')
13
+ puts 'docker-compose ruby gem installed, please start docker-sync-stack again'
14
+ exit 0
15
+ end
16
+
17
+ thor = File.expand_path('../../tasks/stack', __FILE__)
18
+ Dir.glob(File.join(thor, '/**/*.thor')).each { |taskfile|
19
+ # noinspection RubyResolve
20
+ load taskfile
21
+ }
22
+
23
+ Stack.start
@@ -0,0 +1,23 @@
1
+ require 'docker/compose'
2
+
3
+ class ComposeManager
4
+ include Thor::Shell
5
+ @compose_session
6
+ def initialize
7
+ @compose_session = Docker::Compose::Session.new(dir:'./')
8
+ end
9
+
10
+ def run
11
+ say_status 'ok','starting compose',:white
12
+ @compose_session.up
13
+ say_status 'success','started compose',:green
14
+ end
15
+
16
+ def stop
17
+ @compose_session.stop
18
+ end
19
+
20
+ def clean
21
+ @compose_session.down
22
+ end
23
+ end
@@ -8,6 +8,11 @@ module DockerSyncConfig
8
8
  return File.expand_path('~/.docker-sync-global.yml')
9
9
  end
10
10
 
11
+ def is_first_run
12
+ global_config_path = global_config_location
13
+ return !File.exist?(global_config_path)
14
+ end
15
+
11
16
  def global_config
12
17
  global_config_path = global_config_location
13
18
  date = DateTime.new(2001, 1, 1) #paste
@@ -34,6 +39,7 @@ module DockerSyncConfig
34
39
  raise('No docker-sync.yml configuration found in your path ( traversing up ) Did you define it for your project?')
35
40
  end
36
41
  end
42
+
37
43
  # this has been ruthlessly stolen from Thor/runner.rb - please do not hunt me for that :)
38
44
  def find_config_file(skip_lookup = false)
39
45
  # Finds docker-sync.yml by traversing from your current directory down to the root
@@ -12,6 +12,7 @@ module Docker_Rsync
12
12
  @sync_processes
13
13
  @configurations
14
14
  @config_path
15
+
15
16
  def initialize(options)
16
17
  @sync_processes = []
17
18
  @config_syncs = []
@@ -26,7 +27,7 @@ module Docker_Rsync
26
27
  raise "Config could not be loaded from #{@config_path} - it does not exist"
27
28
  end
28
29
 
29
- config = YAML.load_file(@config_path)
30
+ config = YAML.load_file(@config_path)
30
31
  validate_config(config)
31
32
  @config_options = config['options'] || {}
32
33
  @config_syncs = config['syncs']
@@ -70,7 +71,7 @@ module Docker_Rsync
70
71
 
71
72
  def init_sync_processes(sync_name = nil)
72
73
  if sync_name.nil?
73
- @config_syncs.each { |name,sync_configuration|
74
+ @config_syncs.each { |name, sync_configuration|
74
75
  @sync_processes.push(create_sync(name, sync_configuration))
75
76
  }
76
77
  else
@@ -102,27 +103,23 @@ module Docker_Rsync
102
103
  @sync_processes.each { |sync_process|
103
104
  sync_process.run
104
105
  }
106
+ end
105
107
 
108
+ def join_threads
106
109
  begin
107
110
  @sync_processes.each do |sync_process|
108
111
  sync_process.watch_thread.join
109
112
  end
110
113
 
111
114
  rescue SystemExit, Interrupt
112
-
113
- puts "Shutting down..."
115
+ say_status 'shutdown', 'Shutting down...', :blue
114
116
  @sync_processes.each do |sync_process|
115
117
  sync_process.stop
116
118
  end
117
- @sync_processes.each do |sync_process|
118
- sync_process.watch_thread.kill
119
- end
120
119
 
121
120
  rescue Exception => e
122
-
123
121
  puts "EXCEPTION: #{e.inspect}"
124
122
  puts "MESSAGE: #{e.message}"
125
-
126
123
  end
127
124
  end
128
125
 
@@ -132,7 +129,12 @@ module Docker_Rsync
132
129
  end
133
130
 
134
131
  def stop
135
-
132
+ @sync_processes.each { |sync_process|
133
+ sync_process.stop
134
+ unless sync_process.watch_thread.nil?
135
+ sync_process.watch_thread.kill
136
+ end
137
+ }
136
138
  end
137
139
  end
138
140
  end
@@ -55,9 +55,7 @@ module Docker_Sync
55
55
  args = []
56
56
 
57
57
  unless @options['sync_excludes'].nil?
58
- # TODO: does unison support excludes as a command parameter? seems to be a config-value only
59
- say_status 'warning','Excludes are yet not implemented for unison!', :yellow
60
- # args = @options['sync_excludes'].map { |pattern| "--exclude='#{pattern}'" } + args
58
+ args = @options['sync_excludes'].map { |pattern| "-ignore='Path #{pattern}'" } + args
61
59
  end
62
60
  args.push(@options['src'])
63
61
  args.push('-auto')
@@ -12,12 +12,13 @@ class UpdateChecker
12
12
 
13
13
  def run
14
14
  unless @config['update_check']
15
- say_status 'hint','Skipping up-to-date check since it has been disabled in yout ~/.docker-sync-global.yml configuration',:yellow
15
+ say_status 'hint','Skipping up-to-date check since it has been disabled in your ~/.docker-sync-global.yml configuration',:yellow
16
16
  return
17
17
  end
18
18
  unless should_run
19
19
  return
20
20
  end
21
+ check_rsync_image unless is_first_run # do not check the image if its the first run - since this it will be downloaded anyway
21
22
  check_and_warn(@config['update_enforce'])
22
23
  end
23
24
 
@@ -32,6 +33,18 @@ class UpdateChecker
32
33
  return false
33
34
  end
34
35
 
36
+ def check_rsync_image
37
+ say_status 'ok','Checking if a newer rsync image is available'
38
+
39
+ if system("docker pull eugenmayer/rsync | grep 'Downloaded newer image for'")
40
+ say_status 'warning', 'Downloaded newer image for rsync', :red
41
+ say_status 'warning', 'Please use "docker-sync clean" before you start docker-sync again', :red
42
+
43
+ exit 0
44
+ end
45
+ say_status 'success','Image is (now) up to date'
46
+ end
47
+
35
48
  def get_current_version
36
49
  path = File.expand_path('../../', __FILE__)
37
50
  return File.read("#{path}/VERSION")
@@ -55,6 +68,8 @@ class UpdateChecker
55
68
  say_status 'warning',"There is an update (#{check.latest_version}) available (current version #{check.current_version}). Please update before you continue",:yellow
56
69
  if yes?("Shall i update docker-sync to #{check.latest_version} for you?")
57
70
  system('gem update docker-sync')
71
+ say_status 'success','Successfully updated, please restart docker-sync and check the changelog at https://github.com/EugenMayer/docker-sync/wiki/5.-Changelog',:green
72
+ exit 0
58
73
  else
59
74
  exit 1 if update_enforced
60
75
  end
@@ -0,0 +1,93 @@
1
+ require 'docker_sync/sync_manager'
2
+ require 'config'
3
+ require 'preconditions'
4
+ require 'update_check'
5
+ require 'compose'
6
+
7
+ class Stack < Thor
8
+ include DockerSyncConfig
9
+ include Preconditions
10
+
11
+ class_option :config, :aliases => '-c', :default => nil, :type => :string, :desc => 'Path of the docker_sync config'
12
+ class_option :sync_name, :aliases => '-n', :type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
13
+
14
+ desc 'start', 'Start sync services, watcher and then your docker-compose defined stack'
15
+
16
+ def start
17
+ # do run update check in the start command only
18
+ updates = UpdateChecker.new
19
+ updates.run
20
+
21
+ begin
22
+ check_all_preconditions
23
+ rescue Exception => e
24
+ say_status 'error', e.message, :red
25
+ exit 1
26
+ end
27
+
28
+ if options[:config]
29
+ config_path = options[:config]
30
+ else
31
+ begin
32
+ config_path = find_config
33
+ rescue Exception => e
34
+ say_status 'error', e.message, :red
35
+ return
36
+ end
37
+ end
38
+
39
+ @sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
40
+ @sync_manager.run(options[:sync_name])
41
+
42
+ @compose_manager = ComposeManager.new
43
+
44
+ compose_thread = Thread.new {
45
+ @compose_manager.run
46
+ }
47
+
48
+ begin
49
+ compose_thread.join
50
+ #@sync_manager.join_threads
51
+ rescue SystemExit, Interrupt
52
+ say_status 'shutdown', 'Shutting down...', :blue
53
+
54
+ @sync_manager.stop
55
+ @compose_manager.stop
56
+ rescue Exception => e
57
+
58
+ puts "EXCEPTION: #{e.inspect}"
59
+ puts "MESSAGE: #{e.message}"
60
+
61
+ end
62
+ end
63
+
64
+ desc 'clean', 'compose down your app stack, stop and clean up all sync endpoints'
65
+
66
+ def clean
67
+ begin
68
+ check_all_preconditions
69
+ rescue Exception => e
70
+ say_status 'error', e.message, :red
71
+ exit 1
72
+ end
73
+
74
+ if options[:config]
75
+ config_path = options[:config]
76
+ else
77
+ begin
78
+ config_path = find_config
79
+ rescue Exception => e
80
+ say_status 'error', e.message, :red
81
+ return
82
+ end
83
+ end
84
+ @compose_manager = ComposeManager.new
85
+ @compose_manager.clean
86
+ say_status 'success', 'Finished cleaning up your app stack', :green
87
+
88
+ @sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
89
+ @sync_manager.clean(options[:sync_name])
90
+ say_status 'success', 'Finished cleanup. Removed stopped, removed sync container and removed there volumes', :green
91
+ end
92
+ end
93
+
@@ -35,9 +35,10 @@ class Sync < Thor
35
35
  end
36
36
  @sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
37
37
  @sync_manager.run(options[:sync_name])
38
+ @sync_manager.join_threads
38
39
  end
39
40
 
40
- desc 'sync_only', 'sync - do not start a watcher'
41
+ desc 'sync', 'sync - do not start a watcher'
41
42
  def sync
42
43
  begin
43
44
  check_all_preconditions
@@ -87,7 +88,6 @@ class Sync < Thor
87
88
  desc 'list', 'List all sync-points of the project configuration path'
88
89
  method_option :verbose, :default => false, :type => :boolean, :desc => 'Verbose output'
89
90
  def list
90
- pp Gem.configuration
91
91
  begin
92
92
  check_all_preconditions
93
93
  rescue Exception => e
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugen Mayer
@@ -16,39 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.19'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.19.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '0'
29
+ version: '0.19'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.19.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: gem_update_checker
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: 0.2.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.2.0
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
39
48
  - !ruby/object:Gem::Version
40
- version: '0'
49
+ version: 0.2.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.2.0
41
53
  description: Sync your code live to docker-containers without losing any performance
42
54
  on OSX
43
55
  email: eugen.mayer@kontextwork.de
44
56
  executables:
45
57
  - docker-sync
58
+ - docker-sync-stack
46
59
  extensions: []
47
60
  extra_rdoc_files: []
48
61
  files:
49
62
  - Thorfile
50
63
  - VERSION
51
64
  - bin/docker-sync
65
+ - bin/docker-sync-stack
66
+ - lib/compose.rb
52
67
  - lib/config.rb
53
68
  - lib/docker_sync/sync_manager.rb
54
69
  - lib/docker_sync/sync_process.rb
@@ -58,7 +73,8 @@ files:
58
73
  - lib/execution.rb
59
74
  - lib/preconditions.rb
60
75
  - lib/update_check.rb
61
- - tasks/sync.thor
76
+ - tasks/stack/stack.thor
77
+ - tasks/sync/sync.thor
62
78
  homepage: https://github.com/EugenMayer/docker_sync
63
79
  licenses:
64
80
  - GPL