dkdeploy-typo3-cms 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +23 -0
- data/.travis.yml +12 -0
- data/Berksfile +3 -0
- data/Berksfile.lock +66 -0
- data/CHANGELOG.md +12 -0
- data/CONTRIBUTORS.md +16 -0
- data/Gemfile +3 -0
- data/LICENSE +7 -0
- data/README.md +87 -0
- data/Rakefile +1 -0
- data/Vagrantfile +62 -0
- data/assets/dkdeploy-logo.png +0 -0
- data/config/vm/cookbooks/dkdeploy-typo3-cms/metadata.rb +12 -0
- data/config/vm/cookbooks/dkdeploy-typo3-cms/recipes/default.rb +71 -0
- data/dkdeploy-typo3-cms.gemspec +29 -0
- data/features/advanced_typo3.feature +156 -0
- data/features/caretaker_key_management.feature +36 -0
- data/features/clear_cache_on_rollback.feature +17 -0
- data/features/cli.feature +61 -0
- data/features/step_definitions/mysql.rb +75 -0
- data/features/step_definitions/typo3.rb +16 -0
- data/features/support/env.rb +11 -0
- data/features/typo3.feature +100 -0
- data/features/typoscript_upload_and_merge_config.feature +128 -0
- data/features/typoscript_upload_and_merge_pagets.feature +128 -0
- data/features/typoscript_upload_and_merge_userts.feature +128 -0
- data/features/update_database.feature +23 -0
- data/lib/capistrano/dkdeploy/typo3_cms.rb +37 -0
- data/lib/dkdeploy/typo3/cms.rb +1 -0
- data/lib/dkdeploy/typo3/cms/dsl.rb +27 -0
- data/lib/dkdeploy/typo3/cms/helpers/cli.rb +165 -0
- data/lib/dkdeploy/typo3/cms/helpers/erb.rb +25 -0
- data/lib/dkdeploy/typo3/cms/i18n.rb +111 -0
- data/lib/dkdeploy/typo3/cms/tasks/cache.rake +18 -0
- data/lib/dkdeploy/typo3/cms/tasks/caretaker_key_management.rake +60 -0
- data/lib/dkdeploy/typo3/cms/tasks/cli.rake +45 -0
- data/lib/dkdeploy/typo3/cms/tasks/typo3.rake +272 -0
- data/lib/dkdeploy/typo3/cms/tasks/typoscript.rake +288 -0
- data/lib/dkdeploy/typo3/cms/version.rb +16 -0
- data/spec/fixtures/application/Capfile +8 -0
- data/spec/fixtures/application/Gemfile +3 -0
- data/spec/fixtures/application/config/deploy.rb +8 -0
- data/spec/fixtures/application/config/deploy/dev.rb +41 -0
- data/spec/fixtures/application/htdocs/.hidden/.gitkeep +0 -0
- data/spec/fixtures/application/htdocs/catalog/index.html +1 -0
- data/spec/fixtures/application/htdocs/composer.json +24 -0
- data/spec/fixtures/application/htdocs/typo3/cli_dispatch.phpsh +2 -0
- data/spec/fixtures/application/htdocs/typo3conf/AdditionalConfiguration.php +3 -0
- data/spec/fixtures/application/htdocs/typo3conf/LocalConfiguration.php +28 -0
- data/spec/fixtures/application/htdocs/typo3conf/PackageStates.php +358 -0
- data/spec/fixtures/application/vendor/composer.phar +0 -0
- data/spec/fixtures/capistrano/configuration/additional_configuration_for_server.rb +1 -0
- data/spec/fixtures/capistrano/configuration/cli_break_after_one_run_in_release_path.rb +14 -0
- data/spec/fixtures/capistrano/configuration/cli_break_after_three_runs_in_release_path.rb +14 -0
- data/spec/fixtures/capistrano/configuration/cli_test_tasks.rb +19 -0
- data/spec/fixtures/capistrano/configuration/cli_test_tasks_with_path.rb +15 -0
- data/vendor/AdditionalConfiguration.php.erb +57 -0
- data/vendor/create_caretaker_instance_keys.php.erb +18 -0
- metadata +222 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
module Dkdeploy
|
2
|
+
module Typo3
|
3
|
+
# TYPO3 dsl api
|
4
|
+
module DSL
|
5
|
+
# Execute a rake/capistrano task only for given server
|
6
|
+
#
|
7
|
+
# @param server [Capistrano::Configuration::Server] Server to execute task
|
8
|
+
# @param task [String] Name of rake/capistrano task
|
9
|
+
# @param args [Array] Arguments of rake/capistrano task
|
10
|
+
def invoke_for_server(server, task, *args)
|
11
|
+
backup_filter = fetch :filter, {}
|
12
|
+
begin
|
13
|
+
new_server_filter = Marshal.load(Marshal.dump(backup_filter))
|
14
|
+
new_server_filter[:host] = server.hostname
|
15
|
+
set :filter, new_server_filter
|
16
|
+
env.setup_filters
|
17
|
+
info I18n.t('dsl.invoke_for_server.set_filter', task: task, host: server.hostname, scope: :dkdeploy)
|
18
|
+
invoke task, *args
|
19
|
+
Rake::Task[task].reenable
|
20
|
+
ensure
|
21
|
+
set :filter, backup_filter
|
22
|
+
env.setup_filters
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
module Dkdeploy
|
2
|
+
module Typo3
|
3
|
+
module Cms
|
4
|
+
module Helpers
|
5
|
+
# TYPO3 cli helpers
|
6
|
+
module Cli
|
7
|
+
# Execute a task typo3/cli_dispatch.phpsh cli_params
|
8
|
+
#
|
9
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
10
|
+
# @return [Boolean] returns true/false as success of execution
|
11
|
+
def typo3_cli(*cli_params)
|
12
|
+
path_to_cli_dispatch = File.join(current_path, 'typo3', 'cli_dispatch.phpsh')
|
13
|
+
run_script(current_path, path_to_cli_dispatch, cli_params)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Execute a task typo3/cli_dispatch.phpsh cli_params in a specific directory
|
17
|
+
#
|
18
|
+
# @param path [String] file path where task is to be executed
|
19
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
20
|
+
# @return [Boolean] returns true/false as success of execution
|
21
|
+
def typo3_cli_in_path(path, *cli_params)
|
22
|
+
path_to_cli_dispatch = File.join(path, 'typo3', 'cli_dispatch.phpsh')
|
23
|
+
run_script(path, path_to_cli_dispatch, cli_params)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns the last results of invocations of a task typo3/cli_dispatch.phpsh cli_params
|
27
|
+
# Invocation can be controlled by the result of a given block.
|
28
|
+
# True repeats the invocation until maximum_loop_count is reached.
|
29
|
+
# False stops invocation regardless of loop count.
|
30
|
+
#
|
31
|
+
# @param maximum_loop_count [Integer] number of maximum attempts to run task
|
32
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
33
|
+
# @return [String] returns the last result of executing task
|
34
|
+
def capture_typo3_cli_in_loop(maximum_loop_count, *cli_params, &block)
|
35
|
+
path_to_cli_dispatch = File.join(current_path, 'typo3', 'cli_dispatch.phpsh')
|
36
|
+
capture_script_in_loop(current_path, path_to_cli_dispatch, maximum_loop_count, cli_params, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the last results of invocations of a task typo3/cli_dispatch.phpsh cli_params
|
40
|
+
# Invocation can be controlled by the result of a given block.
|
41
|
+
# True repeats the invocation until maximum_loop_count is reached.
|
42
|
+
# False stops invocation regardless of loop count.
|
43
|
+
#
|
44
|
+
# @param path [String] file path where task is to be executed
|
45
|
+
# @param maximum_loop_count [Integer] number of maximum attempts to run task
|
46
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
47
|
+
# @return [String] returns the last result of executing task
|
48
|
+
def capture_typo3_cli_in_path_in_loop(path, maximum_loop_count, *cli_params, &block)
|
49
|
+
path_to_cli_dispatch = File.join(path, 'typo3', 'cli_dispatch.phpsh')
|
50
|
+
capture_script_in_loop(path, path_to_cli_dispatch, maximum_loop_count, cli_params, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Execute a typo3_console task with cli_params
|
54
|
+
#
|
55
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
56
|
+
# @return [Boolean] returns true/false as success of execution
|
57
|
+
def typo3_console(*cli_params)
|
58
|
+
path_to_typo3_console = File.join(current_path, fetch(:path_to_typo3_console))
|
59
|
+
run_script(current_path, path_to_typo3_console, cli_params)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Execute a typo3_console task with cli_params in a specific directory
|
63
|
+
#
|
64
|
+
# @param path [String] file path where task is to be executed
|
65
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
66
|
+
# @return [Boolean] returns true/false as success of execution
|
67
|
+
def typo3_console_in_path(path, *cli_params)
|
68
|
+
path_to_typo3_console = File.join(path, fetch(:path_to_typo3_console))
|
69
|
+
run_script(path, path_to_typo3_console, cli_params)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns the last results of invocations of a a typo3_console task with cli_params
|
73
|
+
# Invocation can be controlled by the result of a given block.
|
74
|
+
# True repeats the invocation until maximum_loop_count is reached.
|
75
|
+
# False stops invocation regardless of loop count.
|
76
|
+
#
|
77
|
+
# @param maximum_loop_count [Integer] number of maximum attempts to run task
|
78
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
79
|
+
# @return [String] returns the last result of executing task
|
80
|
+
def capture_typo3_console_in_loop(maximum_loop_count, *cli_params, &block)
|
81
|
+
path_to_typo3_console = File.join(current_path, fetch(:path_to_typo3_console))
|
82
|
+
capture_script_in_loop(current_path, path_to_typo3_console, maximum_loop_count, cli_params, &block)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the last results of invocations of a typo3_console task with cli_params
|
86
|
+
# Invocation can be controlled by the result of a given block.
|
87
|
+
# True repeats the invocation until maximum_loop_count is reached.
|
88
|
+
# False stops invocation regardless of loop count.
|
89
|
+
#
|
90
|
+
# @param path [String] file path where task is to be executed
|
91
|
+
# @param maximum_loop_count [Integer] number of maximum attempts to run task
|
92
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
93
|
+
# @return [String] returns the last result of executing task
|
94
|
+
def capture_typo3_console_in_path_in_loop(path, maximum_loop_count, *cli_params, &block)
|
95
|
+
path_to_typo3_console = File.join(path, fetch(:path_to_typo3_console))
|
96
|
+
capture_script_in_loop(path, path_to_typo3_console, maximum_loop_count, cli_params, &block)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Execute a script with cli_params in a specific directory
|
100
|
+
#
|
101
|
+
# @param path [String] file path where task is to be executed
|
102
|
+
# @param script [String] path to script
|
103
|
+
# @param cli_params [Array] list of arguments for typo3/cli_dispatch.phpsh
|
104
|
+
# @return [Boolean] returns true/false as success of execution
|
105
|
+
def run_script(path, script, *cli_params)
|
106
|
+
on primary :backend do |host|
|
107
|
+
within path do
|
108
|
+
unless test " [ -e #{script} ] "
|
109
|
+
error I18n.t('resource.not_exists_on_host', resource: script, host: host.hostname, scope: :dkdeploy)
|
110
|
+
next
|
111
|
+
end
|
112
|
+
|
113
|
+
with fetch(:typo3_environment_cli) do
|
114
|
+
execute :php, script, *cli_params
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns the last results of invocations of a script
|
121
|
+
# Invocation can be controlled by the result of a given block.
|
122
|
+
# True repeats the invocation until maximum_loop_count is reached.
|
123
|
+
# False stops invocation regardless of loop count.
|
124
|
+
#
|
125
|
+
# @param path [String] file path where task is to be executed
|
126
|
+
# @param script [String] path to script
|
127
|
+
# @param maximum_loop_count [Integer] number of maximum attempts to run task
|
128
|
+
# @param cli_params [Array] list of arguments for the script
|
129
|
+
# @return [String] returns the last result of executing task
|
130
|
+
def capture_script_in_loop(path, script, maximum_loop_count, *cli_params)
|
131
|
+
output = nil
|
132
|
+
|
133
|
+
on primary :backend do |host|
|
134
|
+
within path do
|
135
|
+
unless test "[ -e #{script} ]"
|
136
|
+
error I18n.t('resource.not_exists_on_host', resource: script, host: host.hostname, scope: :dkdeploy)
|
137
|
+
next
|
138
|
+
end
|
139
|
+
|
140
|
+
loop_counter = 1
|
141
|
+
|
142
|
+
while loop_counter <= maximum_loop_count
|
143
|
+
info I18n.t('tasks.cli.show_loop_counter', loop_counter: loop_counter, scope: :dkdeploy)
|
144
|
+
with fetch(:typo3_environment_cli) do
|
145
|
+
output = capture :php, script, *cli_params
|
146
|
+
end
|
147
|
+
if block_given?
|
148
|
+
unless yield(output, loop_counter, self)
|
149
|
+
info I18n.t('tasks.cli.block_yields_false', loop_counter: loop_counter, scope: :dkdeploy)
|
150
|
+
break
|
151
|
+
end
|
152
|
+
end
|
153
|
+
loop_counter += 1
|
154
|
+
end
|
155
|
+
info I18n.t('tasks.cli.maximum_calls_reached', scope: :dkdeploy) if loop_counter > maximum_loop_count
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
output
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Dkdeploy
|
2
|
+
module Typo3
|
3
|
+
module Cms
|
4
|
+
module Helpers
|
5
|
+
# Erb related helpers
|
6
|
+
module Erb
|
7
|
+
# Remove "<?php" at beginning and "?>" at end of string
|
8
|
+
#
|
9
|
+
# @param php_code [String] PHP Code to sanitize
|
10
|
+
# @return [String]
|
11
|
+
def sanitize_php(php_code)
|
12
|
+
php_code.strip.reverse.chomp('php?<').reverse.chomp('?>').strip.concat("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return path to default template file for "AdditionalConfiguration.php" at gem
|
16
|
+
#
|
17
|
+
# @return [String]
|
18
|
+
def default_template_file
|
19
|
+
File.join(__dir__, '..', '..', '..', '..', '..', 'vendor', 'AdditionalConfiguration.php.erb')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'i18n'
|
2
|
+
|
3
|
+
en = {
|
4
|
+
questions: {
|
5
|
+
create_new_keys: "Please enter 'yes' to create new Caretaker keys (everything else will not touch existing keys)",
|
6
|
+
additional_configuration_template: 'Please specify the location for the additional configuration file (e.g. vendor/AdditionalConfiguration.php.erb)',
|
7
|
+
typo3_languages_to_translate: 'Please specify the languages you wish to translate',
|
8
|
+
path: 'please specify the path'
|
9
|
+
},
|
10
|
+
dsl: {
|
11
|
+
invoke_for_server: {
|
12
|
+
set_filter: "Invoking task '%{task}' for server '%{host}'"
|
13
|
+
}
|
14
|
+
},
|
15
|
+
tasks: {
|
16
|
+
caretaker: {
|
17
|
+
errors: {
|
18
|
+
public_key_not_found: 'Public key at %{public_key_path} on %{host} not found!',
|
19
|
+
creating_keys_failed: 'Could not create Caretaker SSL keys on %{host}!',
|
20
|
+
configuring_keys_failed: 'Could not configure Caretaker SSL keys on %{host}!'
|
21
|
+
},
|
22
|
+
info: {
|
23
|
+
output_file: 'Output file %{output_file} (%{host}):',
|
24
|
+
output_file_one_liner: 'One line public key (%{host}):'
|
25
|
+
}
|
26
|
+
},
|
27
|
+
cli: {
|
28
|
+
show_loop_counter: 'Running cli task for the %{loop_counter}. time',
|
29
|
+
maximum_calls_reached: 'Maximum number of cli calls reached!',
|
30
|
+
block_yields_false: 'Breaking loop after %{loop_counter} run because block yields false'
|
31
|
+
},
|
32
|
+
db: {
|
33
|
+
username: 'Please enter TYPO3 admin username',
|
34
|
+
password: 'Please enter TYPO3 admin password'
|
35
|
+
},
|
36
|
+
fetch_extension: {
|
37
|
+
extension_name: 'Please enter name of extension',
|
38
|
+
extension_not_found: "Extension '%{extension}' not found!",
|
39
|
+
download: 'Downloading %{extension}...',
|
40
|
+
rsync: 'Rsyncing %{extension}...'
|
41
|
+
},
|
42
|
+
clear_temp: {
|
43
|
+
clear: 'Clearing typo3temp directory...'
|
44
|
+
},
|
45
|
+
install_tool: {
|
46
|
+
enable: 'Enabling install tool...',
|
47
|
+
disable: 'Disabling install tool...'
|
48
|
+
},
|
49
|
+
fetch_localconf: {
|
50
|
+
fetch: 'Fetching localconf...'
|
51
|
+
},
|
52
|
+
typoscript: {
|
53
|
+
copy_source: 'Please enter a common prefix for all config paths:',
|
54
|
+
config_paths: 'Please enter a space separated list of remote config paths:',
|
55
|
+
pagets_paths: 'Please enter a space separated list of remote PageTS paths:',
|
56
|
+
userts_paths: 'Please enter a space separated list of remote UserTS paths:',
|
57
|
+
config_file: 'Please enter the name of the config file:',
|
58
|
+
pagets_file: 'Please enter the name of the PageTS file:',
|
59
|
+
userts_file: 'Please enter the name of the UserTS file:',
|
60
|
+
typoscript_config_base_path: 'Please enter the base path of config files:',
|
61
|
+
typoscript_pagets_base_path: 'Please enter the base path of PageTS files:',
|
62
|
+
typoscript_userts_base_path: 'Please enter the base path of UserTS files:',
|
63
|
+
skipping: 'Skipping %{file_or_directory} because it does not exist...',
|
64
|
+
uploading: 'Uploading %{local_file} to %{remote_file}...',
|
65
|
+
uploaded: 'Uploaded %{local_file} to %{remote_file}.',
|
66
|
+
merged: 'Merged %{source_file} with %{target_file}.'
|
67
|
+
},
|
68
|
+
encryption_key: {
|
69
|
+
enter_key: 'Enter an encryption key (should be at least 9 characters):',
|
70
|
+
validation_error: 'Encryption key is empty or less than 9 characters.'
|
71
|
+
},
|
72
|
+
install_tool_password: {
|
73
|
+
enter_password: 'Install tool password:',
|
74
|
+
validation_error: 'Install tool password is empty.'
|
75
|
+
},
|
76
|
+
processed_file_checksums: {
|
77
|
+
typo3_version: 'Running TYPO3 CMS Version %{typo3_version}',
|
78
|
+
task_does_not_apply: 'This task does not apply!',
|
79
|
+
nothing_to_do: 'No updates to perform. All processed files checksums have already been updated.',
|
80
|
+
all_done: 'All processed file checksums updated!'
|
81
|
+
},
|
82
|
+
typo3: {
|
83
|
+
cms: {
|
84
|
+
v6: {
|
85
|
+
generate_additional_configuration_template: {
|
86
|
+
info: 'No need to generate template. There already is one in %{local_configuration_template}'
|
87
|
+
},
|
88
|
+
setup_additional_configuration: {
|
89
|
+
no_template_found: 'Can not find "AdditionalConfiguration.php" template at "%{configuration_template}"',
|
90
|
+
upload_info: 'Uploading merged AdditionalConfiguration to %{remote_configuration_file}',
|
91
|
+
no_local_file_info: '%{local_configuration_template} does not exist. File upload cancelled.',
|
92
|
+
file_not_found_and_ignored: 'Configuration file %{file} does not exist. File ignored.'
|
93
|
+
},
|
94
|
+
remove_extensions: {
|
95
|
+
info: 'The following extensions were removed: %{removed_extensions}',
|
96
|
+
no_extension_found: 'No installed extension found'
|
97
|
+
}
|
98
|
+
},
|
99
|
+
update_database: {
|
100
|
+
still_updates_available: 'Still database schema updates available. See log for details.'
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
I18n.backend.store_translations(:en, dkdeploy: en)
|
108
|
+
|
109
|
+
if I18n.respond_to?(:enforce_available_locales=)
|
110
|
+
I18n.enforce_available_locales = true
|
111
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
include Capistrano::DSL
|
2
|
+
|
3
|
+
namespace :typo3 do
|
4
|
+
namespace :cms do
|
5
|
+
namespace :cache do
|
6
|
+
desc 'Clear TYPO3 file cache directory'
|
7
|
+
task :clear_file_cache do |task|
|
8
|
+
on release_roles :app do
|
9
|
+
cache_path = File.join release_path, 'typo3temp', 'Cache'
|
10
|
+
execute :rm, '-rf', cache_path if test "[ -d #{cache_path} ]"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Reenable Task to allow multiple invokation
|
14
|
+
task.reenable
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'capistrano/i18n'
|
3
|
+
require 'dkdeploy/typo3/cms/i18n'
|
4
|
+
require 'dkdeploy/typo3/cms/helpers/cli'
|
5
|
+
|
6
|
+
include Dkdeploy::Typo3::Cms::Helpers::Cli
|
7
|
+
|
8
|
+
namespace :caretaker do
|
9
|
+
desc 'Create - if necessary or configured - and configure TYPO3 Caretaker SSL keys'
|
10
|
+
task :create_keys, :create_new_caretaker_keys do |_, args|
|
11
|
+
create_new_keys = 'yes' == ask_variable(args, :create_new_caretaker_keys, 'questions.create_new_keys')
|
12
|
+
|
13
|
+
on roles :app do |server|
|
14
|
+
key_is_missing = !test("[ -f #{fetch(:caretaker_private_key_path)} ]")
|
15
|
+
|
16
|
+
if create_new_keys || key_is_missing
|
17
|
+
begin
|
18
|
+
execute :mkdir, '-p', File.join(shared_path, 'config')
|
19
|
+
execute :openssl, 'genrsa', '-out', fetch(:caretaker_private_key_path), '2048', '2>/dev/null'
|
20
|
+
execute :openssl, 'rsa', '-in', fetch(:caretaker_private_key_path), '-pubout', '-out', fetch(:caretaker_public_key_path), '2>&1'
|
21
|
+
rescue SSHKit::Command::Failed
|
22
|
+
error I18n.t('tasks.caretaker.errors.creating_keys_failed', host: server.hostname, scope: :dkdeploy)
|
23
|
+
execute :rm, '-f', fetch(:caretaker_private_key_path)
|
24
|
+
execute :rm, '-f', fetch(:caretaker_public_key_path)
|
25
|
+
exit 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
begin
|
30
|
+
create_caretaker_instance_keys_template = ERB.new(File.read(fetch(:create_caretaker_instance_keys_template)), nil, '>')
|
31
|
+
create_caretaker_instance_keys_content = create_caretaker_instance_keys_template.result(binding)
|
32
|
+
upload! StringIO.new(create_caretaker_instance_keys_content), fetch(:create_caretaker_instance_keys_path), scp: true
|
33
|
+
execute :php, '-f', fetch(:create_caretaker_instance_keys_path)
|
34
|
+
execute :rm, '-f', fetch(:create_caretaker_instance_keys_path)
|
35
|
+
rescue SSHKit::Command::Failed
|
36
|
+
error I18n.t('tasks.caretaker.errors.configuring_keys_failed', host: server.hostname, scope: :dkdeploy)
|
37
|
+
execute :rm, '-r', fetch(:create_caretaker_instance_keys_path)
|
38
|
+
execute :rm, '-r', fetch(:caretaker_instance_keys_path)
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'Display Caretaker SSL public key'
|
45
|
+
task :show_public_key do
|
46
|
+
on roles :app do |server|
|
47
|
+
if test("[ -f #{fetch(:caretaker_public_key_path)} ]")
|
48
|
+
public_key = capture :cat, fetch(:caretaker_public_key_path)
|
49
|
+
else
|
50
|
+
error I18n.t('tasks.caretaker.errors.public_key_not_found', public_key_path: fetch(:caretaker_public_key_path), host: server.hostname, scope: :dkdeploy)
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
|
54
|
+
info I18n.t('tasks.caretaker.info.output_file', output_file: fetch(:caretaker_public_key_path), host: server.hostname, scope: :dkdeploy)
|
55
|
+
info public_key
|
56
|
+
info I18n.t('tasks.caretaker.info.output_file_one_liner', output_file: fetch(:caretaker_public_key_path), host: server.hostname, scope: :dkdeploy)
|
57
|
+
info public_key.gsub(/\n/m, '|')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'dkdeploy/typo3/cms/helpers/cli'
|
3
|
+
|
4
|
+
include Capistrano::DSL
|
5
|
+
include Dkdeploy::Typo3::Cms::Helpers::Cli
|
6
|
+
|
7
|
+
namespace :typo3 do
|
8
|
+
namespace :cms do
|
9
|
+
namespace :cli do
|
10
|
+
desc 'Execute TYPO3 cli task'
|
11
|
+
task :run do |task, args|
|
12
|
+
typo3_cli(args.extras)
|
13
|
+
|
14
|
+
# Reenable Task to allow multiple invokation
|
15
|
+
task.reenable
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Execute a typo3_console task'
|
19
|
+
task :typo3_console do |task, args|
|
20
|
+
typo3_console(args.extras)
|
21
|
+
|
22
|
+
# Reenable Task to allow multiple invokation
|
23
|
+
task.reenable
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Uploads wrapper script to initialize PHP with environment variables'
|
27
|
+
task :upload_wrapper do
|
28
|
+
path_to_typo_cms_cli_dispatch = File.join release_path, 'typo3_cms_cli_dispatch.sh'
|
29
|
+
path_to_cli_dispatch = File.join release_path, 'typo3', 'cli_dispatch.phpsh'
|
30
|
+
|
31
|
+
bash_path = SSHKit.config.command_map[:bash]
|
32
|
+
wrapper_file_content = "#!#{bash_path}\n"
|
33
|
+
fetch(:typo3_environment_cli).each do |variable_name, variable_value|
|
34
|
+
wrapper_file_content << "#{variable_name.to_s.upcase}='#{variable_value}' "
|
35
|
+
end
|
36
|
+
|
37
|
+
php_interpreter_path = SSHKit.config.command_map[:php]
|
38
|
+
wrapper_file_content << "#{php_interpreter_path} #{path_to_cli_dispatch} $@\n"
|
39
|
+
on release_roles :backend do
|
40
|
+
upload! StringIO.new(wrapper_file_content), path_to_typo_cms_cli_dispatch
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|