fulmar 0.6.5 → 1.0.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 +4 -4
- data/bin/fulmar +4 -0
- data/fulmar.gemspec +1 -1
- data/lib/fulmar/domain/service/application_service.rb +8 -3
- data/lib/fulmar/domain/service/configuration_service.rb +38 -1
- data/lib/fulmar/domain/task/base.rake +11 -0
- data/lib/fulmar/domain/task/database_sync.rake +46 -0
- data/lib/fulmar/domain/task/environment.rake +22 -0
- data/lib/fulmar/domain/task/versions.rake +16 -26
- data/lib/fulmar/infrastructure/service/copy_service.rb +30 -0
- data/lib/fulmar/infrastructure/service/database/database_service.rb +11 -20
- data/lib/fulmar/infrastructure/service/flow_service.rb +42 -0
- data/lib/fulmar/infrastructure/service/transfer/rsync_with_versions.rb +1 -1
- data/lib/fulmar/infrastructure/service/tunnel_service.rb +3 -2
- data/lib/fulmar/service/helper/common_helper.rb +68 -0
- data/lib/fulmar/service/helper/database_helper.rb +13 -0
- data/lib/fulmar/service/helper/flow_helper.rb +15 -0
- data/lib/fulmar/task_manager.rb +2 -1
- data/lib/fulmar/version.rb +1 -1
- metadata +12 -10
- data/lib/fulmar/domain/service/cache_service.rb +0 -30
- data/lib/fulmar/domain/task/setup.rake +0 -6
- data/lib/fulmar/infrastructure/service/cache/dummy_cache_service.rb +0 -25
- data/lib/fulmar/infrastructure/service/cache/neos_cache_service.rb +0 -25
- data/lib/fulmar/infrastructure/service/cache/symfony_cache_service.rb +0 -28
- data/lib/fulmar/service/common_helper_service.rb +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46c85744adefad501d5efd90fef1a22ebf0f8f51
|
4
|
+
data.tar.gz: d6dfa27af53d6ba87f51699583d2ab0edc55cedd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c5e48948f29b756590a48c0ddae233d08b21787f4d588604abce5a0da6d6547b889ea2b484c4136ff8798d7b80939e0d9eb0822a98ffd7ed99c1652341c6af0
|
7
|
+
data.tar.gz: 194914af1388156b2f492c90027885e99717296751e878e5f72d52f44cc0660d59b96785013a0b45ee5ba183f58dceb9a5dea1a5367ddf3c4b1ea3be9b6b57e6
|
data/bin/fulmar
CHANGED
data/fulmar.gemspec
CHANGED
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_runtime_dependency 'rake', '~>10'
|
24
24
|
spec.add_runtime_dependency 'git', '~>1.2'
|
25
25
|
spec.add_runtime_dependency 'mysql2', '~>0.3'
|
26
|
-
spec.add_runtime_dependency 'fulmar-shell', '~>1', '>=1.
|
26
|
+
spec.add_runtime_dependency 'fulmar-shell', '~>1', '>=1.4.0'
|
27
27
|
spec.add_runtime_dependency 'ruby_wings', '~>0.1', '>=0.1.0'
|
28
28
|
end
|
@@ -8,7 +8,6 @@ module Fulmar
|
|
8
8
|
def initialize
|
9
9
|
super
|
10
10
|
@rakefiles = %w(fulmarfile Fulmarfile fulmarfile.rb Fulmarfile.rb)
|
11
|
-
@rakefiles.push(*fulmar_tasks)
|
12
11
|
end
|
13
12
|
|
14
13
|
def name
|
@@ -20,6 +19,12 @@ module Fulmar
|
|
20
19
|
super
|
21
20
|
end
|
22
21
|
|
22
|
+
def init
|
23
|
+
super
|
24
|
+
options.rakelib << fulmar_task_dir
|
25
|
+
options.rakelib << 'Fulmar'
|
26
|
+
end
|
27
|
+
|
23
28
|
def define_task(task_class, *args, &block)
|
24
29
|
super(task_class, *args, &wrap_environment(&block))
|
25
30
|
end
|
@@ -38,8 +43,8 @@ module Fulmar
|
|
38
43
|
end
|
39
44
|
|
40
45
|
# Add fulmar application tasks
|
41
|
-
def
|
42
|
-
|
46
|
+
def fulmar_task_dir
|
47
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', 'task'))
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -5,9 +5,11 @@ module Fulmar
|
|
5
5
|
module Service
|
6
6
|
# Loads and prepares the configuration from the yaml file
|
7
7
|
# TODO: Clone target configuration when used as a parameter to another service so an environment change won't affect it
|
8
|
+
# Not Sure if that is actually a god idea
|
8
9
|
class ConfigurationService
|
9
10
|
FULMAR_FILE = 'Fulmarfile'
|
10
11
|
FULMAR_CONFIGURATION = 'FulmarConfiguration'
|
12
|
+
FULMAR_CONFIGURATION_DIR = 'Fulmar'
|
11
13
|
DEPLOYMENT_CONFIG_FILE = 'deployment.yml'
|
12
14
|
|
13
15
|
include Singleton
|
@@ -62,6 +64,33 @@ module Fulmar
|
|
62
64
|
!@environment.nil? && !@target.nil?
|
63
65
|
end
|
64
66
|
|
67
|
+
def has_feature?(feature)
|
68
|
+
return configuration[:features][feature] unless configuration[:features][feature].nil?
|
69
|
+
case feature
|
70
|
+
when :database
|
71
|
+
configuration[:features][:database] = any? { |data| data[:type] == 'maria' }
|
72
|
+
else
|
73
|
+
false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def each
|
78
|
+
configuration[:environments].each_key do |env|
|
79
|
+
configuration[:environments][env].each_pair do |target, data|
|
80
|
+
yield(env, target, data)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def any?
|
86
|
+
if block_given?
|
87
|
+
each{ |_env, _target, data| return true if yield(data) }
|
88
|
+
false
|
89
|
+
else
|
90
|
+
configuration[:environments].any?
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
65
94
|
# Merge another configuration into the currently active one
|
66
95
|
# Useful for supplying a default configuration, as values are not overwritten.
|
67
96
|
# Hashes are merged.
|
@@ -72,6 +101,10 @@ module Fulmar
|
|
72
101
|
end
|
73
102
|
end
|
74
103
|
|
104
|
+
def config_files
|
105
|
+
Dir.glob(File.join(base_path, FULMAR_CONFIGURATION_DIR, '*.config.yml')).sort
|
106
|
+
end
|
107
|
+
|
75
108
|
protected
|
76
109
|
|
77
110
|
def lookup_base_path
|
@@ -104,7 +137,10 @@ module Fulmar
|
|
104
137
|
|
105
138
|
# Loads the configuration from the YAML file and populates all targets
|
106
139
|
def load_configuration
|
107
|
-
@config =
|
140
|
+
@config = { environments: {}, features: {} }
|
141
|
+
config_files.each do |config_file|
|
142
|
+
@config = @config.deep_merge(YAML.load_file(config_file).symbolize)
|
143
|
+
end
|
108
144
|
|
109
145
|
# Iterate over all environments and targets to prepare them
|
110
146
|
@config[:environments].each_key do |env|
|
@@ -114,6 +150,7 @@ module Fulmar
|
|
114
150
|
check_path(env, target)
|
115
151
|
end
|
116
152
|
end
|
153
|
+
@config[:environments].delete(:all)
|
117
154
|
@config
|
118
155
|
end
|
119
156
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
include Fulmar::Domain::Service::Helper::CommonHelper
|
2
|
+
|
3
|
+
if configuration.has_feature? :database
|
4
|
+
require 'fulmar/service/helper/database_helper'
|
5
|
+
include Fulmar::Domain::Service::Helper::DatabaseHelper
|
6
|
+
end
|
7
|
+
|
8
|
+
if configuration.has_feature? :flow
|
9
|
+
require 'fulmar/service/helper/flow_helper'
|
10
|
+
include Fulmar::Domain::Service::Helper::FlowHelper
|
11
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
db_configs = []
|
4
|
+
configuration.each do |env, target, data|
|
5
|
+
db_configs << [env, target] if data[:type] == 'maria'
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_update_task(from_db, to_db)
|
9
|
+
namespace to_db.first do
|
10
|
+
desc "Update #{to_db.first} database with #{from_db.first} data" unless to_db.first.match(/^(live|prod)/) # hide sync to live
|
11
|
+
task "from_#{from_db.first}" do
|
12
|
+
configuration.environment = from_db.first
|
13
|
+
configuration.target = from_db.last
|
14
|
+
puts 'Getting dump...'
|
15
|
+
sql_dump = database.download_dump
|
16
|
+
if sql_dump == ''
|
17
|
+
puts 'Cannot create sql dump'
|
18
|
+
else
|
19
|
+
configuration.environment = to_db.first
|
20
|
+
configuration.target = to_db.last
|
21
|
+
puts 'Sending dump...'
|
22
|
+
remote_sql_dump = upload(sql_dump)
|
23
|
+
database.load_dump(remote_sql_dump)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_update_tasks(db_configs)
|
30
|
+
namespace :update do
|
31
|
+
db_configs.each do |from_db|
|
32
|
+
db_configs.each do |to_db|
|
33
|
+
next if from_db == to_db
|
34
|
+
create_update_task(from_db, to_db)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if db_configs.any?
|
41
|
+
namespace :database do
|
42
|
+
if db_configs.count > 1
|
43
|
+
create_update_tasks(db_configs)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This helper file provides tasks to set the environment. This is just for convenience
|
2
|
+
# so that these tasks might be a dependency for other tasks
|
3
|
+
|
4
|
+
namespace :environment do
|
5
|
+
|
6
|
+
full_configuration[:environments].each_key do |env|
|
7
|
+
# Sets the environment to #{env}
|
8
|
+
task env do
|
9
|
+
configuration.environment = env
|
10
|
+
end
|
11
|
+
|
12
|
+
namespace env do
|
13
|
+
full_configuration[:environments][env].each_key do |target|
|
14
|
+
# Sets the environment to #{env} and the target to #{target}
|
15
|
+
task target do
|
16
|
+
configuration.environment = env
|
17
|
+
configuration.target = target
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
|
-
include Fulmar::Domain::Service::
|
1
|
+
include Fulmar::Domain::Service::Helper::CommonHelper
|
2
2
|
|
3
3
|
namespace :versions do
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
@versioned_servers = {}
|
6
|
+
configuration.each do |env, target, data|
|
7
|
+
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
|
+
|
10
11
|
full_configuration[:environments].each_pair do |env, targets|
|
11
12
|
next if env == :all
|
12
13
|
|
@@ -15,40 +16,29 @@ namespace :versions do
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
desc 'List existing versions on the server'
|
19
|
-
task :list do
|
20
|
-
if @versioned_servers.empty?
|
21
|
-
puts 'None of the configured environments supports versioning.'
|
22
|
-
else
|
23
|
-
puts 'Environments which support versioning:'
|
24
|
-
@versioned_servers.each_key do |env|
|
25
|
-
puts "- #{env}"
|
26
|
-
end
|
27
|
-
|
28
|
-
puts "\nSo run one of these now:"
|
29
|
-
@versioned_servers.each_key do |env|
|
30
|
-
puts "$ fulmar versions:list:#{env}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
19
|
unless @versioned_servers.empty?
|
36
|
-
|
37
20
|
namespace :list do
|
38
|
-
|
39
21
|
@versioned_servers.each_key do |env|
|
40
|
-
|
41
22
|
desc "List available versions for environment \"#{env}\""
|
42
23
|
task env do
|
43
24
|
configuration.environment = env.split(':').first
|
44
25
|
configuration.target = env.split(':').last
|
45
26
|
file_sync.list_releases(false).each{|item| puts item}
|
46
27
|
end
|
47
|
-
|
48
28
|
end
|
29
|
+
end
|
49
30
|
|
31
|
+
namespace :clean do
|
32
|
+
@versioned_servers.each_key do |env|
|
33
|
+
desc "Delete obsolete versions for target \"#{env}\""
|
34
|
+
task env do
|
35
|
+
configuration.environment = env.split(':').first
|
36
|
+
configuration.target = env.split(':').last
|
37
|
+
file_sync.cleanup
|
38
|
+
end
|
39
|
+
end
|
50
40
|
end
|
51
41
|
|
52
|
-
end
|
53
42
|
|
43
|
+
end
|
54
44
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fulmar
|
2
|
+
module Infrastructure
|
3
|
+
module Service
|
4
|
+
# Provides access to composer
|
5
|
+
class CopyService
|
6
|
+
# Copies a file to a remote server
|
7
|
+
# @param [Fulmar::Infrastructue::Service::ShellService] shell
|
8
|
+
# @param [String] local_file local filename, should be absolute
|
9
|
+
# @param [String] remote_host SSH hostname
|
10
|
+
# @param [String] remote_dir remote directory
|
11
|
+
def self.upload(shell, local_file, remote_host, remote_dir)
|
12
|
+
if shell.run "scp #{local_file} #{remote_host}:#{remote_dir.chomp('/')}/"
|
13
|
+
"#{remote_dir.chomp('/')}/#{File.basename(local_file)}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Downloads a file from a remote server
|
18
|
+
# @param [Fulmar::Infrastructue::Service::ShellService] shell
|
19
|
+
# @param [String] remote_host SSH hostname
|
20
|
+
# @param [String] remote_file remote directory
|
21
|
+
# @param [String] local_dir local filename, should be absolute
|
22
|
+
def self.download(shell, remote_host, remote_file, local_dir = '.')
|
23
|
+
if shell.run "scp #{remote_host}:#{remote_file} #{local_dir.chomp('/')}/"
|
24
|
+
"#{local_dir.chomp('/')}/#{File.basename(remote_file)}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -12,12 +12,11 @@ module Fulmar
|
|
12
12
|
|
13
13
|
DEFAULT_CONFIG = {
|
14
14
|
maria: {
|
15
|
-
|
15
|
+
host: '127.0.0.1',
|
16
16
|
port: 3306,
|
17
17
|
user: 'root',
|
18
18
|
password: '',
|
19
19
|
encoding: 'utf8',
|
20
|
-
backup_path: '/tmp'
|
21
20
|
}
|
22
21
|
}
|
23
22
|
|
@@ -63,11 +62,11 @@ module Fulmar
|
|
63
62
|
end
|
64
63
|
|
65
64
|
def local?
|
66
|
-
@config[:
|
65
|
+
@config[:hostname] == 'localhost'
|
67
66
|
end
|
68
67
|
|
69
68
|
def tunnel
|
70
|
-
@tunnel ||= Fulmar::Infrastructure::Service::TunnelService.new(@config[:maria][:
|
69
|
+
@tunnel ||= Fulmar::Infrastructure::Service::TunnelService.new(@config[:hostname], @config[:maria][:port], @config[:maria][:hostname])
|
71
70
|
end
|
72
71
|
|
73
72
|
# shortcut for DatabaseService.client.query
|
@@ -82,33 +81,25 @@ module Fulmar
|
|
82
81
|
disconnect unless state_before
|
83
82
|
end
|
84
83
|
|
85
|
-
def dump(filename =
|
86
|
-
|
87
|
-
if filename
|
88
|
-
# Ensure path is absolute
|
89
|
-
path = filename[0, 1] == '/' ? filename : @config[:maria][:backup_path] + '/' + filename
|
90
|
-
else
|
91
|
-
path = @config[:maria][:backup_path] + '/' + backup_filename
|
92
|
-
end
|
93
|
-
|
84
|
+
def dump(filename = backup_filename)
|
94
85
|
diffable = @config[:maria][:diffable_dump] ? '--skip-comments --skip-extended-insert ' : ''
|
95
86
|
|
96
|
-
@shell.run "mysqldump -u #{@config[:maria][:user]} --password='#{@config[:maria][:password]}' " \
|
97
|
-
"#{@config[:maria][:database]} --single-transaction #{diffable}-r \"#{
|
87
|
+
@shell.run "mysqldump -h #{@config[:maria][:host]} -u #{@config[:maria][:user]} --password='#{@config[:maria][:password]}' " \
|
88
|
+
"#{@config[:maria][:database]} --single-transaction #{diffable}-r \"#{filename}\""
|
98
89
|
|
99
|
-
|
90
|
+
@config[:remote_path] + '/' + filename
|
100
91
|
end
|
101
92
|
|
102
93
|
def load_dump(dump_file, database = @config[:maria][:database])
|
103
|
-
@shell.run "mysql -u #{@config[:maria][:user]} --password='#{@config[:maria][:password]}' " \
|
94
|
+
@shell.run "mysql -h #{@config[:maria][:host]} -u #{@config[:maria][:user]} --password='#{@config[:maria][:password]}' " \
|
104
95
|
"-D #{database} < #{dump_file}"
|
105
96
|
end
|
106
97
|
|
107
98
|
def download_dump(filename = backup_filename)
|
108
99
|
local_path = filename[0, 1] == '/' ? filename : @config[:local_path] + '/' + filename
|
109
100
|
remote_path = dump
|
110
|
-
copy = system("scp -q #{@config[:
|
111
|
-
|
101
|
+
copy = system("scp -q #{@config[:hostname]}:#{remote_path} #{local_path}")
|
102
|
+
@shell.run "rm -f \"#{remote_path}\"" # delete temporary file
|
112
103
|
if copy
|
113
104
|
local_path
|
114
105
|
else
|
@@ -121,7 +112,6 @@ module Fulmar
|
|
121
112
|
# Test configuration
|
122
113
|
def config_test
|
123
114
|
fail 'Configuration option "database" missing.' unless @config[:maria][:database]
|
124
|
-
@shell.run "test -d '#{@config[:maria][:backup_path]}'"
|
125
115
|
end
|
126
116
|
|
127
117
|
# Builds the filename for a new database backup file
|
@@ -136,6 +126,7 @@ module Fulmar
|
|
136
126
|
path = local? ? @config[:local_path] : @config[:remote_path]
|
137
127
|
@shell = Fulmar::Infrastructure::Service::ShellService.new(path, @config[:hostname])
|
138
128
|
@shell.debug = true if @config[:debug]
|
129
|
+
@shell.strict = true
|
139
130
|
end
|
140
131
|
|
141
132
|
# Compiles a mysql config hash from valid options of the fulmar config
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Fulmar
|
2
|
+
module Infrastructure
|
3
|
+
module Service
|
4
|
+
# Implements Flow commands
|
5
|
+
class FlowService
|
6
|
+
# @param [Fulmar::Infrastructure::Service::ShellService] shell
|
7
|
+
# @param [Hash] config
|
8
|
+
def initialize(shell, config)
|
9
|
+
@remote_shell = shell
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
def cache_clear
|
14
|
+
execute('flow:cache:flush --force')
|
15
|
+
end
|
16
|
+
|
17
|
+
def cache_warmup
|
18
|
+
execute('flow:cache:warmup')
|
19
|
+
end
|
20
|
+
|
21
|
+
def site_export(filename = export_filename)
|
22
|
+
execute("typo3.neos:site:export --filename \"#{filename}\"")
|
23
|
+
filename
|
24
|
+
end
|
25
|
+
|
26
|
+
def site_import(filename)
|
27
|
+
execute("./flow typo3.neos:site:import --filename \"#{filename}\"")
|
28
|
+
end
|
29
|
+
|
30
|
+
def execute(command)
|
31
|
+
@remote_shell.run "FLOW_CONTEXT=\"#{@config[:neos][:environment]}\" ./flow #{command}"
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def export_filename
|
37
|
+
"export_#{Time.now.strftime('%Y-%m-%dT%H%M%S')}.xml"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -98,7 +98,7 @@ module Fulmar
|
|
98
98
|
return true unless limit > 0
|
99
99
|
releases = list_releases.sort
|
100
100
|
return true if releases.length <= limit
|
101
|
-
obsolete_dirs = releases[0, releases.length - limit].collect { |dir| "
|
101
|
+
obsolete_dirs = releases[0, releases.length - limit].collect { |dir| "\"#{@config[:releases_dir]}/#{dir}\"" }
|
102
102
|
@remote_shell.run "rm -fr #{obsolete_dirs.join(' ')}"
|
103
103
|
end
|
104
104
|
|
@@ -6,16 +6,17 @@ module Fulmar
|
|
6
6
|
class TunnelService
|
7
7
|
attr_reader :host, :remote_port, :local_port
|
8
8
|
|
9
|
-
def initialize(host, port)
|
9
|
+
def initialize(host, port, remote_host = 'localhost')
|
10
10
|
@host = host
|
11
11
|
@remote_port = port
|
12
|
+
@remote_host = remote_host
|
12
13
|
@local_port = 0
|
13
14
|
@tunnel_pid = 0
|
14
15
|
end
|
15
16
|
|
16
17
|
def open
|
17
18
|
@local_port = free_port
|
18
|
-
@tunnel_pid = Process.spawn "ssh #{@host} -L #{@local_port}
|
19
|
+
@tunnel_pid = Process.spawn "ssh #{@host} -L #{@local_port}:#{@remote_host}:#{@remote_port} -N"
|
19
20
|
sleep 1
|
20
21
|
end
|
21
22
|
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'fulmar/domain/service/configuration_service'
|
2
|
+
|
3
|
+
module Fulmar
|
4
|
+
module Domain
|
5
|
+
module Service
|
6
|
+
module Helper
|
7
|
+
# Provides the helper methods used in the tasks
|
8
|
+
module CommonHelper
|
9
|
+
attr_accessor :environment
|
10
|
+
|
11
|
+
def full_configuration
|
12
|
+
configuration.configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
def configuration
|
16
|
+
(@_config_service ||= Fulmar::Domain::Service::ConfigurationService.instance)
|
17
|
+
end
|
18
|
+
|
19
|
+
def composer(command, arguments = [])
|
20
|
+
(storage['composer'] ||= Fulmar::Infrastructure::Service::ComposerService.new).execute(command, arguments)
|
21
|
+
end
|
22
|
+
|
23
|
+
def local_shell
|
24
|
+
storage['local_shell'] ||= new_shell(configuration[:local_path])
|
25
|
+
end
|
26
|
+
|
27
|
+
def remote_shell
|
28
|
+
storage['remote_shell'] ||= new_shell(configuration[:remote_path], configuration[:hostname])
|
29
|
+
end
|
30
|
+
|
31
|
+
def file_sync
|
32
|
+
storage['file_sync'] ||= Fulmar::FileSync.create_transfer configuration
|
33
|
+
end
|
34
|
+
|
35
|
+
def render_templates
|
36
|
+
(Fulmar::Domain::Service::ConfigRenderingService.new configuration).render
|
37
|
+
end
|
38
|
+
|
39
|
+
def git
|
40
|
+
storage['git'] ||= Fulmar::Infrastructure::Service::GitService.new configuration
|
41
|
+
end
|
42
|
+
|
43
|
+
def upload(filename)
|
44
|
+
Fulmar::Infrastructure::Service::CopyService.upload(local_shell, filename, configuration[:hostname], configuration[:remote_path])
|
45
|
+
end
|
46
|
+
|
47
|
+
def download(filename)
|
48
|
+
Fulmar::Infrastructure::Service::CopyService.download(local_shell, configuration[:hostname], filename, configuration[:local_path])
|
49
|
+
end
|
50
|
+
|
51
|
+
def new_shell(path, hostname = 'localhost')
|
52
|
+
shell = Fulmar::Infrastructure::Service::ShellService.new(path, hostname)
|
53
|
+
shell.strict = true
|
54
|
+
shell.debug = configuration[:debug]
|
55
|
+
shell
|
56
|
+
end
|
57
|
+
|
58
|
+
def storage
|
59
|
+
fail 'You need to set an environment and a target first' unless configuration.ready?
|
60
|
+
@storage ||= {}
|
61
|
+
@storage[configuration.environment] ||= {}
|
62
|
+
@storage[configuration.environment][configuration.target] ||= {}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'fulmar/infrastructure/service/flow_service'
|
2
|
+
|
3
|
+
module Fulmar
|
4
|
+
module Domain
|
5
|
+
module Service
|
6
|
+
module Helper
|
7
|
+
module FlowHelper
|
8
|
+
def flow
|
9
|
+
storage['flow'] ||= Fulmar::Infrastructure::Service::FlowService.new remote_shell, configuration
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/fulmar/task_manager.rb
CHANGED
@@ -9,12 +9,13 @@ require 'fulmar/domain/service/application_service'
|
|
9
9
|
require 'fulmar/domain/service/configuration_service'
|
10
10
|
require 'fulmar/domain/service/config_rendering_service'
|
11
11
|
|
12
|
-
require 'fulmar/service/
|
12
|
+
require 'fulmar/service/helper/common_helper'
|
13
13
|
require 'fulmar/domain/service/file_sync_service'
|
14
14
|
|
15
15
|
require 'fulmar/infrastructure/service/composer_service'
|
16
16
|
require 'fulmar/infrastructure/service/shell_service'
|
17
17
|
require 'fulmar/infrastructure/service/git_service'
|
18
|
+
require 'fulmar/infrastructure/service/copy_service'
|
18
19
|
|
19
20
|
require 'fulmar/infrastructure/service/database/database_service'
|
20
21
|
|
data/lib/fulmar/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fulmar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Siegl
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-03-
|
12
|
+
date: 2015-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '1'
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 1.
|
79
|
+
version: 1.4.0
|
80
80
|
type: :runtime
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -86,7 +86,7 @@ dependencies:
|
|
86
86
|
version: '1'
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.
|
89
|
+
version: 1.4.0
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: ruby_wings
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,18 +124,18 @@ files:
|
|
124
124
|
- bin/fulmar
|
125
125
|
- fulmar.gemspec
|
126
126
|
- lib/fulmar/domain/service/application_service.rb
|
127
|
-
- lib/fulmar/domain/service/cache_service.rb
|
128
127
|
- lib/fulmar/domain/service/config_rendering_service.rb
|
129
128
|
- lib/fulmar/domain/service/configuration_service.rb
|
130
129
|
- lib/fulmar/domain/service/file_sync_service.rb
|
131
130
|
- lib/fulmar/domain/service/initialization_service.rb
|
132
|
-
- lib/fulmar/domain/task/
|
131
|
+
- lib/fulmar/domain/task/base.rake
|
132
|
+
- lib/fulmar/domain/task/database_sync.rake
|
133
|
+
- lib/fulmar/domain/task/environment.rake
|
133
134
|
- lib/fulmar/domain/task/versions.rake
|
134
|
-
- lib/fulmar/infrastructure/service/cache/dummy_cache_service.rb
|
135
|
-
- lib/fulmar/infrastructure/service/cache/neos_cache_service.rb
|
136
|
-
- lib/fulmar/infrastructure/service/cache/symfony_cache_service.rb
|
137
135
|
- lib/fulmar/infrastructure/service/composer_service.rb
|
136
|
+
- lib/fulmar/infrastructure/service/copy_service.rb
|
138
137
|
- lib/fulmar/infrastructure/service/database/database_service.rb
|
138
|
+
- lib/fulmar/infrastructure/service/flow_service.rb
|
139
139
|
- lib/fulmar/infrastructure/service/git_service.rb
|
140
140
|
- lib/fulmar/infrastructure/service/shell_service.rb
|
141
141
|
- lib/fulmar/infrastructure/service/transfer/base.rb
|
@@ -143,7 +143,9 @@ files:
|
|
143
143
|
- lib/fulmar/infrastructure/service/transfer/rsync_with_versions.rb
|
144
144
|
- lib/fulmar/infrastructure/service/tunnel_service.rb
|
145
145
|
- lib/fulmar/service/bootstrap_service.rb
|
146
|
-
- lib/fulmar/service/
|
146
|
+
- lib/fulmar/service/helper/common_helper.rb
|
147
|
+
- lib/fulmar/service/helper/database_helper.rb
|
148
|
+
- lib/fulmar/service/helper/flow_helper.rb
|
147
149
|
- lib/fulmar/service/helper_service.rb
|
148
150
|
- lib/fulmar/service/logger_service.rb
|
149
151
|
- lib/fulmar/task_manager.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'fulmar/infrastructure/service/cache/dummy_cache_service'
|
2
|
-
require 'fulmar/infrastructure/service/cache/neos_cache_service'
|
3
|
-
require 'fulmar/infrastructure/service/cache/symfony_cache_service'
|
4
|
-
|
5
|
-
module Fulmar
|
6
|
-
module Domain
|
7
|
-
module Service
|
8
|
-
# Provides a common interface for all environment specific cache services
|
9
|
-
class CacheService
|
10
|
-
attr_reader :type, :cache
|
11
|
-
|
12
|
-
def initialize(shell, config, type = :none)
|
13
|
-
@type = type
|
14
|
-
@cache = case type
|
15
|
-
when :neos
|
16
|
-
Fulmar::Infrastructure::Service::Cache::NeosCacheService.new(shell, config)
|
17
|
-
when :symfony
|
18
|
-
Fulmar::Infrastructure::Service::Cache::SymfonyCacheService.new(shell, config)
|
19
|
-
else
|
20
|
-
Fulmar::Infrastructure::Service::Cache::DummyCacheService.new(shell, config)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def method_missing(name, parameters)
|
25
|
-
@cache.call(name, parameters)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Fulmar
|
2
|
-
module Infrastructure
|
3
|
-
module Service
|
4
|
-
module Cache
|
5
|
-
# Implements no cache handling
|
6
|
-
class DummyCacheService
|
7
|
-
# @param [Fulmar::Infrastructure::Service::ShellService] shell
|
8
|
-
# @param [Hash] config
|
9
|
-
def initialize(shell, config)
|
10
|
-
@remote_shell = shell
|
11
|
-
@config = config
|
12
|
-
end
|
13
|
-
|
14
|
-
def clear
|
15
|
-
true
|
16
|
-
end
|
17
|
-
|
18
|
-
def warmup
|
19
|
-
true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Fulmar
|
2
|
-
module Infrastructure
|
3
|
-
module Service
|
4
|
-
module Cache
|
5
|
-
# Implements Neos cache handling
|
6
|
-
class NeosCacheService
|
7
|
-
# @param [Fulmar::Infrastructure::Service::ShellService] shell
|
8
|
-
# @param [Hash] config
|
9
|
-
def initialize(shell, config)
|
10
|
-
@remote_shell = shell
|
11
|
-
@config = config
|
12
|
-
end
|
13
|
-
|
14
|
-
def clear
|
15
|
-
@remote_shell.run "FLOW_CONTEXT=\"#{@config[:neos][:environment]}\" ./flow flow:cache:flush --force"
|
16
|
-
end
|
17
|
-
|
18
|
-
def warmup
|
19
|
-
@remote_shell.run "FLOW_CONTEXT=\"#{@config[:neos][:environment]}\" ./flow flow:cache:warmup"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Fulmar
|
2
|
-
module Infrastructure
|
3
|
-
module Service
|
4
|
-
module Cache
|
5
|
-
# Implements Symfony cache handling
|
6
|
-
class SymfonyCacheService
|
7
|
-
# @param [Fulmar::Infrastructure::Service::ShellService] shell
|
8
|
-
# @param [Hash] config
|
9
|
-
def initialize(shell, config)
|
10
|
-
@remote_shell = shell
|
11
|
-
@config = config
|
12
|
-
end
|
13
|
-
|
14
|
-
def clear
|
15
|
-
@remote_shell.run [
|
16
|
-
"rm -fr app/cache/#{@config[:symfony][:environment]}",
|
17
|
-
"php app/console cache:clear --env=#{@config[:symfony][:environment]}"
|
18
|
-
]
|
19
|
-
end
|
20
|
-
|
21
|
-
def warmup
|
22
|
-
@remote_shell.run "php app/console cache:warmup --env=#{@config[:symfony][:environment]}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'fulmar/domain/service/configuration_service'
|
2
|
-
|
3
|
-
module Fulmar
|
4
|
-
module Domain
|
5
|
-
module Service
|
6
|
-
# Provides the helper methods used in the tasks
|
7
|
-
module CommonHelperService
|
8
|
-
attr_accessor :environment
|
9
|
-
|
10
|
-
def full_configuration
|
11
|
-
configuration.configuration
|
12
|
-
end
|
13
|
-
|
14
|
-
def configuration
|
15
|
-
(@_config_service ||= Fulmar::Domain::Service::ConfigurationService.instance)
|
16
|
-
end
|
17
|
-
|
18
|
-
def composer(command, arguments = [])
|
19
|
-
(@_composer ||= Fulmar::Infrastructure::Service::ComposerService.new).execute(command, arguments)
|
20
|
-
end
|
21
|
-
|
22
|
-
def local_shell
|
23
|
-
fail 'You need to set an environment and a target first' unless configuration.ready?
|
24
|
-
unless @_local_shell
|
25
|
-
@_local_shell = {}
|
26
|
-
end
|
27
|
-
@_local_shell["#{configuration.environment}:#{configuration.target}"] ||= Fulmar::Infrastructure::Service::ShellService.new configuration[:local_path]
|
28
|
-
end
|
29
|
-
|
30
|
-
def remote_shell
|
31
|
-
fail 'You need to set an environment and a target first' unless configuration.ready?
|
32
|
-
unless @_remote_shell
|
33
|
-
@_remote_shell = {}
|
34
|
-
end
|
35
|
-
@_remote_shell["#{configuration.environment}:#{configuration.target}"] ||= Fulmar::Infrastructure::Service::ShellService.new(configuration[:remote_path], configuration[:hostname])
|
36
|
-
end
|
37
|
-
|
38
|
-
def file_sync
|
39
|
-
@_file_sync ||= Fulmar::FileSync.create_transfer configuration
|
40
|
-
end
|
41
|
-
|
42
|
-
def database
|
43
|
-
@_database ||= Fulmar::Infrastructure::Service::Database::DatabaseService.new configuration
|
44
|
-
end
|
45
|
-
|
46
|
-
def render_templates
|
47
|
-
(Fulmar::Domain::Service::ConfigRenderingService.new configuration).render
|
48
|
-
end
|
49
|
-
|
50
|
-
def git
|
51
|
-
@_git ||= Fulmar::Infrastructure::Service::GitService.new configuration
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|