docker-sync 0.2.3 → 0.3.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.
@@ -0,0 +1,57 @@
1
+ require 'docker-sync/preconditions/preconditions_osx'
2
+ require 'docker-sync/preconditions/preconditions_linux'
3
+
4
+ require 'singleton'
5
+ require 'os'
6
+
7
+ module DockerSync
8
+ module Preconditions
9
+ class Strategy
10
+ include Singleton
11
+
12
+ attr_accessor :strategy
13
+
14
+ def initialize
15
+ if DockerSync::Preconditions::Strategy.is_osx
16
+ @strategy = DockerSync::Preconditions::Osx.new
17
+ elsif DockerSync::Preconditions::Strategy.is_linux
18
+ @strategy = DockerSync::Preconditions::Linux.new
19
+ end
20
+ end
21
+
22
+ def self.is_osx
23
+ return OS.mac?
24
+ end
25
+
26
+ def self.is_linux
27
+ return OS.linux?
28
+ end
29
+
30
+ def check_all_preconditions(config)
31
+ strategy.check_all_preconditions(config)
32
+ end
33
+
34
+ def docker_available
35
+ strategy.docker_available
36
+ end
37
+
38
+ def docker_running
39
+ strategy.docker_running
40
+ end
41
+
42
+ def rsync_available
43
+ strategy.rsync_available
44
+ end
45
+
46
+
47
+ def fswatch_available
48
+ strategy.fswatch_available
49
+ end
50
+
51
+ def unison_available
52
+ strategy.unison_available
53
+ end
54
+ end
55
+ end
56
+ end
57
+
@@ -3,10 +3,6 @@ require 'thor/shell'
3
3
  require 'docker-sync/sync_process'
4
4
  # noinspection RubyResolve
5
5
  require 'docker-sync/execution'
6
- require 'yaml'
7
- require 'dotenv'
8
- require 'docker-sync/config_template'
9
- require 'docker-sync/config'
10
6
 
11
7
  module Docker_sync
12
8
  class SyncManager
@@ -17,31 +13,9 @@ module Docker_sync
17
13
  @config_path
18
14
 
19
15
  def initialize(options)
20
- DockerSyncConfig.load_dotenv
21
-
22
16
  @sync_processes = []
23
- @config_syncs = []
24
- @config_global = []
25
- @config_string = options[:config_string]
26
- @config_path = options[:config_path]
27
- load_configuration
28
- end
29
17
 
30
- def load_configuration_file
31
- unless File.exist?(@config_path)
32
- raise "Config could not be loaded from #{@config_path} - it does not exist"
33
- end
34
- return File.read(@config_path)
35
- end
36
-
37
- def load_configuration
38
- # try to interpolate supplied inline config string, alternatively load the configuration file
39
- config = ConfigTemplate::interpolate_config_string(@config_string || load_configuration_file())
40
-
41
- validate_config(config)
42
- @config_global = config['options'] || {}
43
- @config_syncs = config['syncs']
44
- upgrade_syncs_config
18
+ load_configuration(options)
45
19
  end
46
20
 
47
21
  def global_options
@@ -87,26 +61,6 @@ module Docker_sync
87
61
  end
88
62
  end
89
63
 
90
- def validate_config(config)
91
- unless config.key?('syncs')
92
- raise ('no syncs defined')
93
- end
94
-
95
- config['syncs'].each do |name, sync_config|
96
- validate_sync_config(name, sync_config)
97
- end
98
-
99
- return true
100
- end
101
-
102
- def validate_sync_config(name, sync_config)
103
- config_mandatory = %w[src]
104
- config_mandatory.push('sync_host_port') if sync_config['sync_strategy'] == 'rsync' #TODO: Implement autodisovery for other strategies
105
- config_mandatory.each do |key|
106
- raise ("#{name} does not have #{key} configuration value set - this is mandatory") unless sync_config.key?(key)
107
- end
108
- end
109
-
110
64
  def init_sync_processes(sync_name = nil)
111
65
  return if @sync_processes.size != 0
112
66
  if sync_name.nil?
@@ -199,5 +153,20 @@ module Docker_sync
199
153
  sync_process.watch
200
154
  }
201
155
  end
156
+
157
+ private
158
+
159
+ def load_configuration(options)
160
+ config = options[:config] ||
161
+ DockerSync::ProjectConfig.new(
162
+ config_path: options[:config_path],
163
+ config_string: options[:config_string]
164
+ )
165
+
166
+ @config_global = config['options'] || {}
167
+ @config_syncs = config['syncs']
168
+ upgrade_syncs_config
169
+ end
170
+
202
171
  end
203
172
  end
@@ -31,34 +31,26 @@ module Docker_Sync
31
31
  end
32
32
 
33
33
  def set_sync_strategy
34
- if @options.key?('sync_strategy')
35
- case @options['sync_strategy']
36
- when 'rsync'
37
- @sync_strategy = Docker_Sync::SyncStrategy::Rsync.new(@sync_name, @options)
38
- else
39
- @sync_strategy = Docker_Sync::SyncStrategy::Unison.new(@sync_name, @options)
40
- end
41
- else
34
+ case @options['sync_strategy']
35
+ when 'rsync'
36
+ @sync_strategy = Docker_Sync::SyncStrategy::Rsync.new(@sync_name, @options)
37
+ when 'unison'
42
38
  @sync_strategy = Docker_Sync::SyncStrategy::Unison.new(@sync_name, @options)
39
+ else
40
+ raise "Unknown sync_strategy #{@options['sync_strategy']}"
43
41
  end
44
42
  end
45
43
 
46
44
  def set_watch_strategy
47
- if @options.key?('watch_strategy')
48
- case @options['watch_strategy']
49
- when 'fswatch'
50
- @watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
51
- when 'disable','dummy'
52
- @watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
53
- else
54
- @watch_strategy = Docker_Sync::WatchStrategy::Unison.new(@sync_name, @options)
55
- end
45
+ case @options['watch_strategy']
46
+ when 'fswatch'
47
+ @watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
48
+ when 'dummy'
49
+ @watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
50
+ when 'unison'
51
+ @watch_strategy = Docker_Sync::WatchStrategy::Unison.new(@sync_name, @options)
56
52
  else
57
- if @options['sync_strategy'] == 'rsync'
58
- @watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
59
- else
60
- @watch_strategy = Docker_Sync::WatchStrategy::Unison.new(@sync_name, @options)
61
- end
53
+ raise "Unknown watch_strategy #{@options['watch_strategy']}"
62
54
  end
63
55
  end
64
56
 
@@ -1,5 +1,5 @@
1
1
  require 'thor/shell'
2
- require 'docker-sync/preconditions'
2
+ require 'docker-sync/preconditions/strategy'
3
3
  require 'terminal-notifier'
4
4
 
5
5
  module Docker_Sync
@@ -22,9 +22,9 @@ module Docker_Sync
22
22
  end
23
23
 
24
24
  begin
25
- Preconditions::rsync_available
25
+ DockerSync::Preconditions::Strategy.instance.rsync_available
26
26
  rescue Exception => e
27
- say_status 'error', "#{@sync_name} has been configured to sync with rsync, but no rsync binary available", :red
27
+ say_status 'error', "#{@sync_name} has been configured to sync with rsync, but no rsync or fswatch binary available", :red
28
28
  say_status 'error', e.message, :red
29
29
  exit 1
30
30
  end
@@ -1,5 +1,5 @@
1
1
  require 'thor/shell'
2
- require 'docker-sync/preconditions'
2
+ require 'docker-sync/preconditions/strategy'
3
3
  require 'docker-sync/execution'
4
4
  require 'open3'
5
5
  require 'socket'
@@ -26,9 +26,7 @@ module Docker_Sync
26
26
  @docker_image = 'eugenmayer/unison'
27
27
  end
28
28
  begin
29
- Preconditions::unison_available
30
- Preconditions::unox_available
31
- Preconditions::macfsevents_available
29
+ DockerSync::Preconditions::Strategy.instance.unison_available
32
30
  rescue Exception => e
33
31
  say_status 'error', "#{@sync_name} has been configured to sync with unison, but no unison available", :red
34
32
  say_status 'error', e.message, :red
@@ -217,7 +215,7 @@ module Docker_Sync
217
215
  end
218
216
 
219
217
  def stop_container
220
- `docker ps | grep #{get_container_name} && docker stop #{get_container_name}`
218
+ `docker ps | grep #{get_container_name} && docker stop #{get_container_name} && docker wait #{get_container_name}`
221
219
  end
222
220
 
223
221
  def reset_container
@@ -1,6 +1,6 @@
1
1
  require 'gem_update_checker'
2
2
  require 'thor/actions'
3
- require 'docker-sync/config'
3
+ require 'docker-sync/config/global_config'
4
4
 
5
5
  class UpdateChecker
6
6
  include Thor::Shell
@@ -8,7 +8,7 @@ class UpdateChecker
8
8
  @newer_image_found
9
9
 
10
10
  def initialize
11
- @config = DockerSyncConfig::global_config
11
+ @config = DockerSync::GlobalConfig.load
12
12
  @newer_image_found = false
13
13
  end
14
14
 
@@ -22,22 +22,28 @@ class UpdateChecker
22
22
  end
23
23
 
24
24
  # do not check the image if its the first run - since this it will be downloaded anyway
25
- unless DockerSyncConfig::is_first_run
26
- check_rsync_image
27
- check_unison_image
28
-
29
- # stop if there was an update
30
- if @newer_image_found
31
- say_status 'warning', 'One or more images have been updated. Please use "docker-sync clean" before you start docker-sync again', :red
32
- exit 0
25
+ unless @config.first_run?
26
+ unless has_internet?
27
+ check_unison_image
28
+ check_rsync_image
29
+ # stop if there was an update
30
+ if @newer_image_found
31
+ say_status 'warning', 'One or more images have been updated. Please use "docker-sync clean" before you start docker-sync again', :red
32
+ exit 0
33
+ end
33
34
  end
34
-
35
35
  end
36
36
 
37
37
  check_and_warn(@config['update_enforce'])
38
38
  end
39
39
 
40
+ def has_internet?
41
+ `ping -c1 -t 1 8.8.8.8 &2>1 /dev/null`
42
+ return $?.success?
43
+ end
44
+
40
45
  def should_run
46
+ return false unless has_internet?
41
47
  now = DateTime.now
42
48
  last_check = DateTime.iso8601(@config['update_last_check'])
43
49
  check_after_days = 2
@@ -86,10 +92,7 @@ class UpdateChecker
86
92
 
87
93
  def check_and_warn(update_enforced = true)
88
94
  # update the timestamp
89
- now = DateTime.now
90
- @config['update_last_check'] = now.iso8601(9)
91
-
92
- DockerSyncConfig::global_config_save(@config)
95
+ @config.update! 'update_last_check' => DateTime.now.iso8601(9)
93
96
 
94
97
  check = docker_sync_update_check
95
98
  if check.update_available
@@ -1,12 +1,12 @@
1
1
  require 'gem_update_checker'
2
2
  require 'thor/actions'
3
- require 'docker-sync/config'
3
+ require 'docker-sync/config/global_config'
4
4
 
5
5
  class UpgradeChecker
6
6
  include Thor::Shell
7
7
  @config
8
8
  def initialize
9
- @config = DockerSyncConfig::global_config
9
+ @config = DockerSync::GlobalConfig.load
10
10
  end
11
11
 
12
12
  def run
@@ -17,13 +17,18 @@ class UpgradeChecker
17
17
  end
18
18
 
19
19
  def last_upgraded_version
20
- @config['upgrade_status'] || ''
20
+ @config['upgrade_status']
21
21
  end
22
22
 
23
23
  def should_run
24
24
  # get the update_status which is the version of the update hook which has been run already
25
25
  upgrade_status = last_upgraded_version
26
- if upgrade_status == '' || Gem::Version.new(upgrade_status) < Gem::Version.new(UpgradeChecker.get_current_version) # thats how we compare the version
26
+ if upgrade_status == ''
27
+ @config.update! 'upgrade_status' => "#{UpgradeChecker.get_current_version}"
28
+ return
29
+ end
30
+
31
+ if Gem::Version.new(upgrade_status) < Gem::Version.new(UpgradeChecker.get_current_version) # thats how we compare the version
27
32
  return true
28
33
  end
29
34
 
@@ -59,9 +64,22 @@ class UpgradeChecker
59
64
  end
60
65
  end
61
66
 
67
+ if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.3.0')
68
+ Thor::Shell::Basic.new.say_status 'warning', "The installation progress of docker-sync 0.3.0 has changed, brew is now mandatory - you need to uninstall docker-sync/unox/unison ! : \n\n_Please_ read :): https://github.com/EugenMayer/docker-sync/wiki/1.3-Upgrade-Guide\n\n", :red
69
+
70
+ cmd1 = 'rm -f /usr/loca/bin/unison-fsmonitor && gem uninstall docker-sync && brew tap eugenmayer/dockersync && brew install eugenmayer/dockersync/dockersync"'
71
+ Thor::Shell::Basic.new.say_status 'ok', "The installation progress of docker-sync 0.3.0 has changed, brew is now mandatory - you need to uninstall docker-sync/unox/unison ! : \n\n_Please_ read :): https://github.com/EugenMayer/docker-sync/wiki/1.3-Upgrade-Guide\n\n", :rwhite
72
+
73
+ if Thor::Shell::Basic.new.yes?('I will install reinstall docker-sync for you using the above command (y/N)')
74
+ system cmd1
75
+ else
76
+ raise('Please reinstall docker-sync yourself')
77
+ exit 1
78
+ end
79
+ end
80
+
62
81
 
63
82
  # update the upgrade_status
64
- @config['upgrade_status'] = "#{UpgradeChecker.get_current_version}"
65
- DockerSyncConfig::global_config_save(@config)
83
+ @config.update! 'upgrade_status' => "#{UpgradeChecker.get_current_version}"
66
84
  end
67
- end
85
+ end
@@ -1,6 +1,5 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
- require 'docker-sync/preconditions'
4
3
 
5
4
  module Docker_Sync
6
5
  module WatchStrategy
@@ -1,6 +1,6 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
- require 'docker-sync/preconditions'
3
+ require 'docker-sync/preconditions/strategy'
4
4
  require 'pathname'
5
5
 
6
6
  module Docker_Sync
@@ -19,7 +19,7 @@ module Docker_Sync
19
19
  @events_to_watch = %w(AttributeModified Created Link MovedFrom MovedTo Renamed Removed Updated)
20
20
 
21
21
  begin
22
- Preconditions::fswatch_available
22
+ DockerSync::Preconditions::Strategy.instance.fswatch_available
23
23
  rescue Exception => e
24
24
  say_status 'error', e.message, :red
25
25
  exit 1
@@ -1,6 +1,5 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
- require 'docker-sync/preconditions'
4
3
  require 'docker-sync/sync_strategy/unison'
5
4
 
6
5
  module Docker_Sync
@@ -1,6 +1,6 @@
1
+ require 'docker-sync'
1
2
  require 'docker-sync/sync_manager'
2
- require 'docker-sync/config'
3
- require 'docker-sync/preconditions'
3
+ require 'docker-sync/preconditions/strategy'
4
4
  require 'docker-sync/update_check'
5
5
  require 'docker-sync/upgrade_check'
6
6
  require 'daemons'
@@ -1,10 +1,12 @@
1
+ require 'docker-sync'
1
2
  require 'docker-sync/sync_manager'
2
- require 'docker-sync/config'
3
- require 'docker-sync/preconditions'
3
+ require 'docker-sync/preconditions/strategy'
4
4
  require 'docker-sync/update_check'
5
5
  require 'docker-sync/upgrade_check'
6
6
  require 'docker/compose'
7
7
  require 'docker-sync/compose'
8
+ require 'docker-sync/config/project_config'
9
+
8
10
  class Stack < Thor
9
11
  class_option :config, :aliases => '-c', :default => nil, :type => :string, :desc => 'Path of the docker_sync config'
10
12
  class_option :sync_name, :aliases => '-n', :type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
@@ -26,26 +28,16 @@ class Stack < Thor
26
28
  upgrades.run
27
29
 
28
30
  begin
29
- Preconditions::check_all_preconditions
31
+ config = DockerSync::ProjectConfig.new(config_path: options[:config])
32
+ DockerSync::Preconditions::Strategy.instance.check_all_preconditions(config)
30
33
  rescue Exception => e
31
34
  say_status 'error', e.message, :red
32
- exit 1
33
- end
34
-
35
- if options[:config]
36
- config_path = options[:config]
37
- else
38
- begin
39
- config_path = DockerSyncConfig::project_config_path
40
- rescue Exception => e
41
- say_status 'error', e.message, :red
42
- return
43
- end
35
+ exit(1)
44
36
  end
45
37
 
46
38
  say_status 'note:', 'You can also run docker-sync in the background with docker-sync --daemon'
47
39
 
48
- @sync_manager = Docker_sync::SyncManager.new(:config_path => config_path)
40
+ @sync_manager = Docker_sync::SyncManager.new(config: config)
49
41
  @sync_manager.run(options[:sync_name])
50
42
  global_options = @sync_manager.global_options
51
43
  @compose_manager = ComposeManager.new(global_options)
@@ -77,23 +69,14 @@ class Stack < Thor
77
69
  end
78
70
 
79
71
  begin
80
- Preconditions::check_all_preconditions
72
+ config = DockerSync::ProjectConfig.new(config_path: options[:config])
73
+ DockerSync::Preconditions::Strategy.instance.check_all_preconditions(config)
81
74
  rescue Exception => e
82
75
  say_status 'error', e.message, :red
83
- exit 1
76
+ exit(1)
84
77
  end
85
78
 
86
- if options[:config]
87
- config_path = options[:config]
88
- else
89
- begin
90
- config_path = DockerSyncConfig::project_config_path
91
- rescue Exception => e
92
- say_status 'error', e.message, :red
93
- return
94
- end
95
- end
96
- @sync_manager = Docker_sync::SyncManager.new(:config_path => config_path)
79
+ @sync_manager = Docker_sync::SyncManager.new(config: config)
97
80
  global_options = @sync_manager.global_options
98
81
  # shutdown compose first
99
82
  @compose_manager = ComposeManager.new(global_options)
@@ -105,4 +88,3 @@ class Stack < Thor
105
88
  say_status 'success', 'Finished cleanup. Removed stopped, removed sync container and removed their volumes', :green
106
89
  end
107
90
  end
108
-