docker-sync 0.0.11 → 0.0.12
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 +4 -4
- data/VERSION +1 -1
- data/bin/docker-sync +1 -1
- data/bin/docker-sync-stack +10 -10
- data/lib/docker-sync/compose.rb +33 -0
- data/lib/{config.rb → docker-sync/config.rb} +11 -10
- data/lib/{execution.rb → docker-sync/execution.rb} +7 -5
- data/lib/{preconditions.rb → docker-sync/preconditions.rb} +7 -7
- data/lib/{docker_sync → docker-sync}/sync_manager.rb +19 -5
- data/lib/{docker_sync → docker-sync}/sync_process.rb +8 -3
- data/lib/{docker_sync → docker-sync}/sync_strategy/rsync.rb +9 -4
- data/lib/{docker_sync → docker-sync}/sync_strategy/unison.rb +9 -8
- data/lib/{update_check.rb → docker-sync/update_check.rb} +5 -6
- data/lib/docker-sync/watch_strategy/dummy.rb +42 -0
- data/lib/{docker_sync → docker-sync}/watch_strategy/fswatch.rb +4 -5
- data/tasks/stack/stack.thor +17 -17
- data/tasks/sync/sync.thor +12 -14
- metadata +27 -12
- data/lib/compose.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22787f972ef84ff342df17b05894ec25b79ec521
|
4
|
+
data.tar.gz: 5d7a83c05ec3194d7292b9f2ab2798bfc9909c76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a5141387dd95c343f467c9d72bc32038b953e2ec56d5d71ff8e378b667a230333bb8345c5bc049c31c7e6e5d2fa8a9a2c54ea8eef7b1d7eef427adcf1603f12
|
7
|
+
data.tar.gz: 8ddf36c4068404754d969de94d00a70ea56a528f4d127fc600b7d01d656f39b2430e6bc63f30c55a4cba4df85a7555875e6474bb0747e1277f93d7d6009c7f68
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.12
|
data/bin/docker-sync
CHANGED
data/bin/docker-sync-stack
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
3
|
|
4
4
|
require 'thor'
|
5
|
-
require 'update_check'
|
5
|
+
require 'docker-sync/update_check'
|
6
6
|
|
7
|
-
#
|
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
|
7
|
+
# TODO: remove this later, not longer needed
|
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
16
|
|
17
17
|
thor = File.expand_path('../../tasks/stack', __FILE__)
|
18
18
|
Dir.glob(File.join(thor, '/**/*.thor')).each { |taskfile|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'docker/compose'
|
2
|
+
|
3
|
+
class ComposeManager
|
4
|
+
include Thor::Shell
|
5
|
+
@compose_session
|
6
|
+
@global_options
|
7
|
+
def initialize(global_options)
|
8
|
+
@global_options = global_options
|
9
|
+
compose_file_path = 'docker-compose.yml'
|
10
|
+
if @global_options.key?('compose-file-path')
|
11
|
+
path = File.expand_path(@global_options['compose-file-path'])
|
12
|
+
unless File.exist?(path)
|
13
|
+
raise("Your referenced docker-compose file in docker-sync.yml was not found at #{@global_options['compose-file-path']}")
|
14
|
+
end
|
15
|
+
compose_file_path = @global_options['compose-file-path']
|
16
|
+
end
|
17
|
+
@compose_session = Docker::Compose::Session.new(dir:'./', :file => compose_file_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
say_status 'ok','starting compose',:white
|
22
|
+
@compose_session.up
|
23
|
+
say_status 'success','started compose',:green
|
24
|
+
end
|
25
|
+
|
26
|
+
def stop
|
27
|
+
@compose_session.stop
|
28
|
+
end
|
29
|
+
|
30
|
+
def clean
|
31
|
+
@compose_session.down
|
32
|
+
end
|
33
|
+
end
|
@@ -4,18 +4,19 @@ require 'yaml'
|
|
4
4
|
# this has basically completely reused from Thor::runner.rb - thank you!
|
5
5
|
|
6
6
|
module DockerSyncConfig
|
7
|
-
def global_config_location
|
7
|
+
def self.global_config_location
|
8
8
|
return File.expand_path('~/.docker-sync-global.yml')
|
9
9
|
end
|
10
10
|
|
11
|
-
def is_first_run
|
11
|
+
def self.is_first_run
|
12
12
|
global_config_path = global_config_location
|
13
13
|
return !File.exist?(global_config_path)
|
14
14
|
end
|
15
15
|
|
16
|
-
def global_config
|
16
|
+
def self.global_config
|
17
17
|
global_config_path = global_config_location
|
18
18
|
date = DateTime.new(2001, 1, 1) #paste
|
19
|
+
# noinspection RubyStringKeysInHashInspection
|
19
20
|
defaults = {'update_check'=>true, 'update_last_check' => date.iso8601(9), 'update_enforce' => true}
|
20
21
|
if File.exist?(global_config_path)
|
21
22
|
config = YAML.load_file(global_config_path)
|
@@ -26,13 +27,13 @@ module DockerSyncConfig
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
def global_config_save(config)
|
30
|
+
def self.global_config_save(config)
|
30
31
|
global_config_path = global_config_location
|
31
32
|
File.open(global_config_path, 'w') {|f| f.write config.to_yaml }
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
-
files =
|
35
|
+
def self.project_config_path
|
36
|
+
files = project_config_find
|
36
37
|
if files.length > 0
|
37
38
|
return files.pop
|
38
39
|
else
|
@@ -41,7 +42,7 @@ module DockerSyncConfig
|
|
41
42
|
end
|
42
43
|
|
43
44
|
# this has been ruthlessly stolen from Thor/runner.rb - please do not hunt me for that :)
|
44
|
-
def
|
45
|
+
def self.project_config_find(skip_lookup = false)
|
45
46
|
# Finds docker-sync.yml by traversing from your current directory down to the root
|
46
47
|
# directory of your system. If at any time we find a docker-sync.yml file, we stop.
|
47
48
|
#
|
@@ -66,7 +67,7 @@ module DockerSyncConfig
|
|
66
67
|
|
67
68
|
unless skip_lookup
|
68
69
|
Pathname.pwd.ascend do |path|
|
69
|
-
docker_sync_files =
|
70
|
+
docker_sync_files = globs_for_project_config(path).map { |g| Dir[g] }.flatten
|
70
71
|
break unless docker_sync_files.empty?
|
71
72
|
end
|
72
73
|
end
|
@@ -77,12 +78,12 @@ module DockerSyncConfig
|
|
77
78
|
|
78
79
|
# Where to look for docker-sync.yml files.
|
79
80
|
#
|
80
|
-
def
|
81
|
+
def self.globs_for_project_config(path)
|
81
82
|
path = escape_globs(path)
|
82
83
|
["#{path}/docker-sync.yml"]
|
83
84
|
end
|
84
85
|
|
85
|
-
def escape_globs(path)
|
86
|
+
def self.escape_globs(path)
|
86
87
|
path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
|
87
88
|
end
|
88
89
|
end
|
@@ -17,14 +17,16 @@ module Execution
|
|
17
17
|
end
|
18
18
|
|
19
19
|
Thread.new {
|
20
|
-
Open3.popen3(command) do |
|
20
|
+
Open3.popen3(command) do |_, stdout, stderr, _|
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
# noinspection RubyAssignmentExpressionInConditionalInspection
|
23
|
+
while line_out = stdout.gets
|
24
|
+
say_status prefix, line_out, color
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
# noinspection RubyAssignmentExpressionInConditionalInspection
|
28
|
+
while line_err = stderr.gets
|
29
|
+
say_status prefix, line_err, :red
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
@@ -1,44 +1,44 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
|
3
3
|
module Preconditions
|
4
|
-
def check_all_preconditions
|
4
|
+
def self.check_all_preconditions
|
5
5
|
docker_available
|
6
6
|
docker_running
|
7
7
|
fswatch_available
|
8
8
|
end
|
9
9
|
|
10
|
-
def docker_available
|
10
|
+
def self.docker_available
|
11
11
|
if (find_executable0 'docker').nil?
|
12
12
|
raise('Could not find docker binary in path. Please install it, e.g. using "brew install docker" or install docker-for-mac')
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def docker_running
|
16
|
+
def self.docker_running
|
17
17
|
`docker ps`
|
18
18
|
if $?.exitstatus > 0
|
19
19
|
raise('No docker daemon seems to be running. Did you start your docker-for-mac / docker-machine?')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def fswatch_available
|
23
|
+
def self.fswatch_available
|
24
24
|
if (find_executable0 'fswatch').nil?
|
25
25
|
raise('No fswatch available. Install it by "brew install fswatch"')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def docker_sync_available
|
29
|
+
def self.docker_sync_available
|
30
30
|
if (find_executable0 'docker-sync').nil?
|
31
31
|
raise('No docker-sync available. Install it by "gem install docker-sync"')
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def rsync_available
|
35
|
+
def self.rsync_available
|
36
36
|
if (find_executable0 'rsync').nil?
|
37
37
|
raise('Could not find rsync binary in path. Please install it, e.g. using "brew install rsync"')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def unison_available
|
41
|
+
def self.unison_available
|
42
42
|
if (find_executable0 'unison').nil?
|
43
43
|
raise('Could not find unison binary in path. Please install it, e.g. using "brew install unison"')
|
44
44
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'thor/shell'
|
2
2
|
# noinspection RubyResolve
|
3
|
-
require '
|
3
|
+
require 'docker-sync/sync_process'
|
4
4
|
# noinspection RubyResolve
|
5
|
-
require 'execution'
|
5
|
+
require 'docker-sync/execution'
|
6
6
|
require 'yaml'
|
7
7
|
|
8
8
|
module Docker_Rsync
|
@@ -17,7 +17,6 @@ module Docker_Rsync
|
|
17
17
|
@sync_processes = []
|
18
18
|
@config_syncs = []
|
19
19
|
@config_options = []
|
20
|
-
@config_syncs = []
|
21
20
|
@config_path = options[:config_path]
|
22
21
|
load_configuration
|
23
22
|
end
|
@@ -34,6 +33,10 @@ module Docker_Rsync
|
|
34
33
|
upgrade_syncs_config
|
35
34
|
end
|
36
35
|
|
36
|
+
def global_options
|
37
|
+
return @config_options
|
38
|
+
end
|
39
|
+
|
37
40
|
def get_sync_points
|
38
41
|
return @config_syncs
|
39
42
|
end
|
@@ -41,13 +44,24 @@ module Docker_Rsync
|
|
41
44
|
def upgrade_syncs_config
|
42
45
|
@config_syncs.each do |name, config|
|
43
46
|
@config_syncs[name]['config_path'] = @config_path
|
47
|
+
# expand the sync source to remove ~ and similar expressions in the path
|
44
48
|
@config_syncs[name]['src'] = File.expand_path(@config_syncs[name]['src'])
|
49
|
+
|
50
|
+
# set the global verbose setting, if the sync-endpoint does not define a own one
|
45
51
|
unless config.key?('verbose')
|
46
52
|
@config_syncs[name]['verbose'] = false
|
47
53
|
if @config_options.key?('verbose')
|
48
54
|
@config_syncs[name]['verbose'] = @config_options['verbose']
|
49
55
|
end
|
50
56
|
end
|
57
|
+
|
58
|
+
# for each strategy check if a custom image has been defined and inject that into the sync-endpoints
|
59
|
+
# which do fit for this strategy
|
60
|
+
%w(rsync unison).each do |strategy|
|
61
|
+
if config.key?("#{strategy}_image") && @config_syncs[name]['sync_strategy'] == strategy
|
62
|
+
@config_syncs[name]['image'] = config["#{strategy}_image"]
|
63
|
+
end
|
64
|
+
end
|
51
65
|
end
|
52
66
|
end
|
53
67
|
|
@@ -108,7 +122,7 @@ module Docker_Rsync
|
|
108
122
|
def join_threads
|
109
123
|
begin
|
110
124
|
@sync_processes.each do |sync_process|
|
111
|
-
sync_process.watch_thread.join
|
125
|
+
sync_process.watch_thread.join unless sync_process.watch_thread.nil?
|
112
126
|
end
|
113
127
|
|
114
128
|
rescue SystemExit, Interrupt
|
@@ -132,7 +146,7 @@ module Docker_Rsync
|
|
132
146
|
@sync_processes.each { |sync_process|
|
133
147
|
sync_process.stop
|
134
148
|
unless sync_process.watch_thread.nil?
|
135
|
-
sync_process.watch_thread.kill
|
149
|
+
sync_process.watch_thread.kill unless sync_process.watch_thread.nil?
|
136
150
|
end
|
137
151
|
}
|
138
152
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'thor/shell'
|
2
2
|
# noinspection RubyResolve
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'docker-sync/sync_strategy/rsync'
|
4
|
+
require 'docker-sync/sync_strategy/unison'
|
5
5
|
# noinspection RubyResolve
|
6
|
-
require '
|
6
|
+
require 'docker-sync/watch_strategy/fswatch'
|
7
|
+
require 'docker-sync/watch_strategy/dummy'
|
7
8
|
|
8
9
|
module Docker_Sync
|
9
10
|
class SyncProcess
|
@@ -48,6 +49,10 @@ module Docker_Sync
|
|
48
49
|
case @options['watch_strategy']
|
49
50
|
when 'fswatch'
|
50
51
|
@watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
|
52
|
+
when 'disable'
|
53
|
+
@watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
|
54
|
+
when 'dummy'
|
55
|
+
@watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
|
51
56
|
else
|
52
57
|
@watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
|
53
58
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/preconditions'
|
3
3
|
|
4
4
|
module Docker_Sync
|
5
5
|
module SyncStrategy
|
6
6
|
class Rsync
|
7
7
|
include Thor::Shell
|
8
|
-
include Preconditions
|
9
8
|
|
10
9
|
@options
|
11
10
|
@sync_name
|
@@ -14,9 +13,15 @@ module Docker_Sync
|
|
14
13
|
def initialize(sync_name, options)
|
15
14
|
@sync_name = sync_name
|
16
15
|
@options = options
|
16
|
+
# if a custom image is set, apply it
|
17
|
+
if @options.key?('image')
|
18
|
+
@docker_image = @options['image']
|
19
|
+
else
|
20
|
+
@docker_image = 'eugenmayer/rsync'
|
21
|
+
end
|
17
22
|
|
18
23
|
begin
|
19
|
-
rsync_available
|
24
|
+
Preconditions::rsync_available
|
20
25
|
rescue Exception => e
|
21
26
|
say_status 'error', "#{@sync_name} has been configured to sync with rsync, but no rsync binary available", :red
|
22
27
|
say_status 'error', e.message, :red
|
@@ -88,7 +93,7 @@ module Docker_Sync
|
|
88
93
|
user_mapping = get_user_mapping
|
89
94
|
group_mapping = get_group_mapping
|
90
95
|
|
91
|
-
cmd = "docker run -p '#{@options['sync_host_port']}:873' -v #{volume_name}:#{@options['dest']} #{user_mapping} #{group_mapping} -e VOLUME=#{@options['dest']} --name #{container_name} -d
|
96
|
+
cmd = "docker run -p '#{@options['sync_host_port']}:873' -v #{volume_name}:#{@options['dest']} #{user_mapping} #{group_mapping} -e VOLUME=#{@options['dest']} --name #{container_name} -d #{@docker_image}"
|
92
97
|
else # container already created, just start / reuse it
|
93
98
|
say_status 'ok', "starting #{container_name} container", :white if @options['verbose']
|
94
99
|
cmd = "docker start #{container_name}"
|
@@ -1,26 +1,27 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/preconditions'
|
3
3
|
require 'open3'
|
4
4
|
|
5
5
|
module Docker_Sync
|
6
6
|
module SyncStrategy
|
7
7
|
class Unison
|
8
8
|
include Thor::Shell
|
9
|
-
include Preconditions
|
10
|
-
|
11
9
|
|
12
10
|
@options
|
13
11
|
@sync_name
|
14
12
|
@watch_thread
|
15
|
-
UNISON_IMAGE = 'leighmcculloch/unison'
|
16
|
-
UNISON_VERSION = '2.48.3'
|
17
13
|
UNISON_CONTAINER_PORT = '5000'
|
18
14
|
def initialize(sync_name, options)
|
19
15
|
@sync_name = sync_name
|
20
16
|
@options = options
|
21
|
-
|
17
|
+
# if a custom image is set, apply it
|
18
|
+
if @options.key?('image')
|
19
|
+
@docker_image = @options['image']
|
20
|
+
else
|
21
|
+
@docker_image = 'eugenmayer/unison'
|
22
|
+
end
|
22
23
|
begin
|
23
|
-
unison_available
|
24
|
+
Preconditions::unison_available
|
24
25
|
rescue Exception => e
|
25
26
|
say_status 'error', "#{@sync_name} has been configured to sync with unison, but no unison available", :red
|
26
27
|
say_status 'error', e.message, :red
|
@@ -80,7 +81,7 @@ module Docker_Sync
|
|
80
81
|
exists = `docker ps --filter "status=exited" --filter "name=#{container_name}" | grep #{container_name}`
|
81
82
|
if exists == ''
|
82
83
|
say_status 'ok', "creating #{container_name} container", :white if @options['verbose']
|
83
|
-
cmd = "docker run -p '#{@options['sync_host_port']}:#{UNISON_CONTAINER_PORT}' -v #{volume_name}:#{@options['dest']} -e
|
84
|
+
cmd = "docker run -p '#{@options['sync_host_port']}:#{UNISON_CONTAINER_PORT}' -v #{volume_name}:#{@options['dest']} -e UNISON_DIR=#{@options['dest']} --name #{container_name} -d #{@docker_image}"
|
84
85
|
else
|
85
86
|
say_status 'ok', "starting #{container_name} container", :white if @options['verbose']
|
86
87
|
cmd = "docker start #{container_name}"
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'gem_update_checker'
|
2
2
|
require 'thor/actions'
|
3
|
-
require 'config'
|
3
|
+
require 'docker-sync/config'
|
4
4
|
|
5
5
|
class UpdateChecker
|
6
6
|
include Thor::Shell
|
7
|
-
include DockerSyncConfig
|
8
7
|
@config
|
9
8
|
def initialize
|
10
|
-
@config = global_config
|
9
|
+
@config = DockerSyncConfig::global_config
|
11
10
|
end
|
12
11
|
|
13
12
|
def run
|
@@ -18,7 +17,7 @@ class UpdateChecker
|
|
18
17
|
unless should_run
|
19
18
|
return
|
20
19
|
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
|
20
|
+
check_rsync_image unless DockerSyncConfig::is_first_run # do not check the image if its the first run - since this it will be downloaded anyway
|
22
21
|
check_and_warn(@config['update_enforce'])
|
23
22
|
end
|
24
23
|
|
@@ -46,7 +45,7 @@ class UpdateChecker
|
|
46
45
|
end
|
47
46
|
|
48
47
|
def get_current_version
|
49
|
-
path = File.expand_path('
|
48
|
+
path = File.expand_path('../../../', __FILE__)
|
50
49
|
return File.read("#{path}/VERSION")
|
51
50
|
end
|
52
51
|
|
@@ -61,7 +60,7 @@ class UpdateChecker
|
|
61
60
|
# update the timestamp
|
62
61
|
now = DateTime.now
|
63
62
|
@config['update_last_check'] = now.iso8601(9)
|
64
|
-
global_config_save(@config)
|
63
|
+
DockerSyncConfig::global_config_save(@config)
|
65
64
|
|
66
65
|
check = docker_sync_update_check
|
67
66
|
if check.update_available
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'thor/shell'
|
2
|
+
require 'docker-sync/execution'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
|
5
|
+
module Docker_Sync
|
6
|
+
module WatchStrategy
|
7
|
+
class Dummy
|
8
|
+
include Thor::Shell
|
9
|
+
include Execution
|
10
|
+
|
11
|
+
@options
|
12
|
+
@sync_name
|
13
|
+
@watch_thread
|
14
|
+
|
15
|
+
def initialize(sync_name, options)
|
16
|
+
@options = options
|
17
|
+
@sync_name = sync_name
|
18
|
+
@watch_thread = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
say_status 'success', 'Watcher disabled by configuration' if @options['verbose']
|
23
|
+
end
|
24
|
+
|
25
|
+
def stop
|
26
|
+
end
|
27
|
+
|
28
|
+
def clean
|
29
|
+
end
|
30
|
+
|
31
|
+
def watch
|
32
|
+
end
|
33
|
+
|
34
|
+
def watch_options
|
35
|
+
end
|
36
|
+
|
37
|
+
def watch_thread
|
38
|
+
return @watch_thread
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'execution'
|
3
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/execution'
|
3
|
+
require 'docker-sync/preconditions'
|
4
4
|
|
5
5
|
module Docker_Sync
|
6
6
|
module WatchStrategy
|
7
7
|
class Fswatch
|
8
8
|
include Thor::Shell
|
9
9
|
include Execution
|
10
|
-
include Preconditions
|
11
10
|
|
12
11
|
@options
|
13
12
|
@sync_name
|
@@ -18,7 +17,7 @@ module Docker_Sync
|
|
18
17
|
@options = options
|
19
18
|
|
20
19
|
begin
|
21
|
-
fswatch_available
|
20
|
+
Preconditions::fswatch_available
|
22
21
|
rescue Exception => e
|
23
22
|
say_status 'error', e.message, :red
|
24
23
|
exit 1
|
@@ -56,7 +55,7 @@ module Docker_Sync
|
|
56
55
|
|
57
56
|
sync_command = 'thor sync:sync'
|
58
57
|
begin
|
59
|
-
docker_sync_available
|
58
|
+
Preconditions::docker_sync_available
|
60
59
|
sync_command = 'docker-sync sync'
|
61
60
|
rescue Exception => e
|
62
61
|
say_status 'warning', 'docker-sync not available, assuming dev mode, using thor', :yellow
|
data/tasks/stack/stack.thor
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
require '
|
2
|
-
require 'config'
|
3
|
-
require 'preconditions'
|
4
|
-
require 'update_check'
|
5
|
-
require 'compose'
|
6
|
-
|
1
|
+
require 'docker-sync/sync_manager'
|
2
|
+
require 'docker-sync/config'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
require 'docker-sync/update_check'
|
5
|
+
require 'docker/compose'
|
6
|
+
require 'docker-sync/compose'
|
7
7
|
class Stack < Thor
|
8
|
-
include DockerSyncConfig
|
9
|
-
include Preconditions
|
10
|
-
|
11
8
|
class_option :config, :aliases => '-c', :default => nil, :type => :string, :desc => 'Path of the docker_sync config'
|
12
9
|
class_option :sync_name, :aliases => '-n', :type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
|
13
10
|
|
@@ -19,7 +16,7 @@ class Stack < Thor
|
|
19
16
|
updates.run
|
20
17
|
|
21
18
|
begin
|
22
|
-
check_all_preconditions
|
19
|
+
Preconditions::check_all_preconditions
|
23
20
|
rescue Exception => e
|
24
21
|
say_status 'error', e.message, :red
|
25
22
|
exit 1
|
@@ -29,7 +26,7 @@ class Stack < Thor
|
|
29
26
|
config_path = options[:config]
|
30
27
|
else
|
31
28
|
begin
|
32
|
-
config_path =
|
29
|
+
config_path = DockerSyncConfig::project_config_path
|
33
30
|
rescue Exception => e
|
34
31
|
say_status 'error', e.message, :red
|
35
32
|
return
|
@@ -38,8 +35,8 @@ class Stack < Thor
|
|
38
35
|
|
39
36
|
@sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
|
40
37
|
@sync_manager.run(options[:sync_name])
|
41
|
-
|
42
|
-
@compose_manager = ComposeManager.new
|
38
|
+
global_options = @sync_manager.global_options
|
39
|
+
@compose_manager = ComposeManager.new(global_options)
|
43
40
|
|
44
41
|
compose_thread = Thread.new {
|
45
42
|
@compose_manager.run
|
@@ -65,7 +62,7 @@ class Stack < Thor
|
|
65
62
|
|
66
63
|
def clean
|
67
64
|
begin
|
68
|
-
check_all_preconditions
|
65
|
+
Preconditions::check_all_preconditions
|
69
66
|
rescue Exception => e
|
70
67
|
say_status 'error', e.message, :red
|
71
68
|
exit 1
|
@@ -75,17 +72,20 @@ class Stack < Thor
|
|
75
72
|
config_path = options[:config]
|
76
73
|
else
|
77
74
|
begin
|
78
|
-
config_path =
|
75
|
+
config_path = DockerSyncConfig::project_config_path
|
79
76
|
rescue Exception => e
|
80
77
|
say_status 'error', e.message, :red
|
81
78
|
return
|
82
79
|
end
|
83
80
|
end
|
84
|
-
@
|
81
|
+
@sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
|
82
|
+
global_options = @sync_manager.global_options
|
83
|
+
# shutdown compose first
|
84
|
+
@compose_manager = ComposeManager.new(global_options)
|
85
85
|
@compose_manager.clean
|
86
86
|
say_status 'success', 'Finished cleaning up your app stack', :green
|
87
87
|
|
88
|
-
|
88
|
+
# now shutdown sync
|
89
89
|
@sync_manager.clean(options[:sync_name])
|
90
90
|
say_status 'success', 'Finished cleanup. Removed stopped, removed sync container and removed there volumes', :green
|
91
91
|
end
|
data/tasks/sync/sync.thor
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
require '
|
2
|
-
require 'config'
|
3
|
-
require 'preconditions'
|
4
|
-
require 'update_check'
|
1
|
+
require 'docker-sync/sync_manager'
|
2
|
+
require 'docker-sync/config'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
require 'docker-sync/update_check'
|
5
5
|
|
6
6
|
class Sync < Thor
|
7
|
-
include DockerSyncConfig
|
8
|
-
include Preconditions
|
9
7
|
|
10
8
|
class_option :config, :aliases => '-c',:default => nil, :type => :string, :desc => 'Path of the docker_sync config'
|
11
9
|
class_option :sync_name, :aliases => '-n',:type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
|
@@ -17,7 +15,7 @@ class Sync < Thor
|
|
17
15
|
updates.run
|
18
16
|
|
19
17
|
begin
|
20
|
-
check_all_preconditions
|
18
|
+
Preconditions::check_all_preconditions
|
21
19
|
rescue Exception => e
|
22
20
|
say_status 'error', e.message, :red
|
23
21
|
exit 1
|
@@ -27,7 +25,7 @@ class Sync < Thor
|
|
27
25
|
config_path = options[:config]
|
28
26
|
else
|
29
27
|
begin
|
30
|
-
config_path =
|
28
|
+
config_path = DockerSyncConfig::project_config_path
|
31
29
|
rescue Exception => e
|
32
30
|
say_status 'error', e.message, :red
|
33
31
|
return
|
@@ -41,7 +39,7 @@ class Sync < Thor
|
|
41
39
|
desc 'sync', 'sync - do not start a watcher'
|
42
40
|
def sync
|
43
41
|
begin
|
44
|
-
check_all_preconditions
|
42
|
+
Preconditions::check_all_preconditions
|
45
43
|
rescue Exception => e
|
46
44
|
say_status 'error', e.message, :red
|
47
45
|
exit 1
|
@@ -51,7 +49,7 @@ class Sync < Thor
|
|
51
49
|
config_path = options[:config]
|
52
50
|
else
|
53
51
|
begin
|
54
|
-
config_path =
|
52
|
+
config_path = DockerSyncConfig::project_config_path
|
55
53
|
rescue Exception => e
|
56
54
|
say_status 'error', e.message, :red
|
57
55
|
return
|
@@ -64,7 +62,7 @@ class Sync < Thor
|
|
64
62
|
desc 'clean', 'Stop and clean up all sync endpoints'
|
65
63
|
def clean
|
66
64
|
begin
|
67
|
-
check_all_preconditions
|
65
|
+
Preconditions::check_all_preconditions
|
68
66
|
rescue Exception => e
|
69
67
|
say_status 'error', e.message, :red
|
70
68
|
exit 1
|
@@ -74,7 +72,7 @@ class Sync < Thor
|
|
74
72
|
config_path = options[:config]
|
75
73
|
else
|
76
74
|
begin
|
77
|
-
config_path =
|
75
|
+
config_path = DockerSyncConfig::project_config_path
|
78
76
|
rescue Exception => e
|
79
77
|
say_status 'error', e.message, :red
|
80
78
|
return
|
@@ -89,7 +87,7 @@ class Sync < Thor
|
|
89
87
|
method_option :verbose, :default => false, :type => :boolean, :desc => 'Verbose output'
|
90
88
|
def list
|
91
89
|
begin
|
92
|
-
check_all_preconditions
|
90
|
+
Preconditions::check_all_preconditions
|
93
91
|
rescue Exception => e
|
94
92
|
say_status 'error', e.message, :red
|
95
93
|
exit 1
|
@@ -99,7 +97,7 @@ class Sync < Thor
|
|
99
97
|
config_path = options[:config]
|
100
98
|
else
|
101
99
|
begin
|
102
|
-
config_path =
|
100
|
+
config_path = DockerSyncConfig::project_config_path
|
103
101
|
rescue Exception => e
|
104
102
|
say_status 'error', e.message, :red
|
105
103
|
return
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugen Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -50,6 +50,20 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 0.2.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: docker-compose
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.8.3
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - '='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.8.3
|
53
67
|
description: Sync your code live to docker-containers without losing any performance
|
54
68
|
on OSX
|
55
69
|
email: eugen.mayer@kontextwork.de
|
@@ -63,16 +77,17 @@ files:
|
|
63
77
|
- VERSION
|
64
78
|
- bin/docker-sync
|
65
79
|
- bin/docker-sync-stack
|
66
|
-
- lib/compose.rb
|
67
|
-
- lib/config.rb
|
68
|
-
- lib/
|
69
|
-
- lib/
|
70
|
-
- lib/
|
71
|
-
- lib/
|
72
|
-
- lib/
|
73
|
-
- lib/
|
74
|
-
- lib/
|
75
|
-
- lib/
|
80
|
+
- lib/docker-sync/compose.rb
|
81
|
+
- lib/docker-sync/config.rb
|
82
|
+
- lib/docker-sync/execution.rb
|
83
|
+
- lib/docker-sync/preconditions.rb
|
84
|
+
- lib/docker-sync/sync_manager.rb
|
85
|
+
- lib/docker-sync/sync_process.rb
|
86
|
+
- lib/docker-sync/sync_strategy/rsync.rb
|
87
|
+
- lib/docker-sync/sync_strategy/unison.rb
|
88
|
+
- lib/docker-sync/update_check.rb
|
89
|
+
- lib/docker-sync/watch_strategy/dummy.rb
|
90
|
+
- lib/docker-sync/watch_strategy/fswatch.rb
|
76
91
|
- tasks/stack/stack.thor
|
77
92
|
- tasks/sync/sync.thor
|
78
93
|
homepage: https://github.com/EugenMayer/docker_sync
|
data/lib/compose.rb
DELETED
@@ -1,23 +0,0 @@
|
|
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
|