Class: Docker_sync::SyncManager
- Inherits:
-
Object
- Object
- Docker_sync::SyncManager
- Includes:
- Thor::Shell
- Defined in:
- lib/docker-sync/sync_manager.rb
Instance Method Summary collapse
- #clean(sync_name = nil) ⇒ Object
- #create_sync(sync_name, sync_configuration) ⇒ Object
- #get_sync_points ⇒ Object
- #global_options ⇒ Object
- #init_sync_processes(sync_name = nil) ⇒ Object
-
#initialize(options) ⇒ SyncManager
constructor
A new instance of SyncManager.
- #join_threads ⇒ Object
- #load_configuration ⇒ Object
- #run(sync_name = nil) ⇒ Object
- #stop ⇒ Object
- #sync(sync_name = nil) ⇒ Object
- #upgrade_syncs_config ⇒ Object
- #validate_config(config) ⇒ Object
- #validate_sync_config(name, sync_config) ⇒ Object
- #watch_start ⇒ Object
- #watch_stop ⇒ Object
Constructor Details
#initialize(options) ⇒ SyncManager
Returns a new instance of SyncManager.
16 17 18 19 20 21 22 |
# File 'lib/docker-sync/sync_manager.rb', line 16 def initialize() @sync_processes = [] @config_syncs = [] @config_global = [] @config_path = [:config_path] load_configuration end |
Instance Method Details
#clean(sync_name = nil) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/docker-sync/sync_manager.rb', line 103 def clean(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.clean } end |
#create_sync(sync_name, sync_configuration) ⇒ Object
148 149 150 151 |
# File 'lib/docker-sync/sync_manager.rb', line 148 def create_sync(sync_name, sync_configuration) sync_process = Docker_Sync::SyncProcess.new(sync_name, sync_configuration) return sync_process end |
#get_sync_points ⇒ Object
40 41 42 |
# File 'lib/docker-sync/sync_manager.rb', line 40 def get_sync_points return @config_syncs end |
#global_options ⇒ Object
36 37 38 |
# File 'lib/docker-sync/sync_manager.rb', line 36 def return @config_global end |
#init_sync_processes(sync_name = nil) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/docker-sync/sync_manager.rb', line 89 def init_sync_processes(sync_name = nil) if sync_name.nil? @config_syncs.each { |name, sync_configuration| @sync_processes.push(create_sync(name, sync_configuration)) } else unless @config_syncs.key?(sync_name) raise("Could not find sync configuration with name #{sync_name}") end @sync_processes.push(create_sync(sync_name, @config_syncs[sync_name])) end end |
#join_threads ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/docker-sync/sync_manager.rb', line 125 def join_threads begin @sync_processes.each do |sync_process| if sync_process.watch_thread sync_process.watch_thread.join end if sync_process.watch_fork Process.wait(sync_process.watch_fork) end end rescue SystemExit, Interrupt say_status 'shutdown', 'Shutting down...', :blue @sync_processes.each do |sync_process| sync_process.stop end rescue Exception => e puts "EXCEPTION: #{e.inspect}" puts "MESSAGE: #{e.}" end end |
#load_configuration ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/docker-sync/sync_manager.rb', line 24 def load_configuration unless File.exist?(@config_path) raise "Config could not be loaded from #{@config_path} - it does not exist" end config = YAML.load_file(@config_path) validate_config(config) @config_global = config['options'] || {} @config_syncs = config['syncs'] upgrade_syncs_config end |
#run(sync_name = nil) ⇒ Object
117 118 119 120 121 122 123 |
# File 'lib/docker-sync/sync_manager.rb', line 117 def run(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.run } end |
#stop ⇒ Object
153 154 155 156 157 158 159 160 |
# File 'lib/docker-sync/sync_manager.rb', line 153 def stop @sync_processes.each { |sync_process| sync_process.stop unless sync_process.watch_thread.nil? sync_process.watch_thread.kill unless sync_process.watch_thread.nil? end } end |
#sync(sync_name = nil) ⇒ Object
110 111 112 113 114 115 |
# File 'lib/docker-sync/sync_manager.rb', line 110 def sync(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.sync } end |
#upgrade_syncs_config ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/docker-sync/sync_manager.rb', line 44 def upgrade_syncs_config @config_syncs.each do |name, config| @config_syncs[name]['config_path'] = @config_path # expand the sync source to remove ~ and similar expressions in the path @config_syncs[name]['src'] = File.(@config_syncs[name]['src'], File.dirname(@config_path)) @config_syncs[name]['cli_mode'] = @config_global['cli_mode'] || 'auto' # set the global verbose setting, if the sync-endpoint does not define a own one unless config.key?('verbose') @config_syncs[name]['verbose'] = false if @config_global.key?('verbose') @config_syncs[name]['verbose'] = @config_global['verbose'] end end # for each strategy check if a custom image has been defined and inject that into the sync-endpoints # which do fit for this strategy %w(rsync unison).each do |strategy| if config.key?("#{strategy}_image") && @config_syncs[name]['sync_strategy'] == strategy @config_syncs[name]['image'] = config["#{strategy}_image"] end end end end |
#validate_config(config) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/docker-sync/sync_manager.rb', line 69 def validate_config(config) unless config.key?('syncs') raise ('no syncs defined') end config['syncs'].each do |name, sync_config| validate_sync_config(name, sync_config) end return true end |
#validate_sync_config(name, sync_config) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/docker-sync/sync_manager.rb', line 81 def validate_sync_config(name, sync_config) config_mandatory = %w[src dest] config_mandatory.push('sync_host_port') unless sync_config['sync_strategy'] == 'unison' #TODO: Implement autodisovery for other strategies config_mandatory.each do |key| raise ("#{name} does not have #{key} condiguration value set - this is mandatory") unless sync_config.key?(key) end end |
#watch_start ⇒ Object
168 169 170 171 172 |
# File 'lib/docker-sync/sync_manager.rb', line 168 def watch_start @sync_processes.each { |sync_process| sync_process.watch } end |
#watch_stop ⇒ Object
162 163 164 165 166 |
# File 'lib/docker-sync/sync_manager.rb', line 162 def watch_stop @sync_processes.each { |sync_process| sync_process.watch_thread.kill unless sync_process.watch_thread.nil? } end |