avm-eac_webapp_base0 0.8.0 → 0.9.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/lib/avm/eac_webapp_base0/instances/apache_host.rb +85 -0
- data/lib/avm/eac_webapp_base0/instances/apache_path.rb +54 -0
- data/lib/avm/eac_webapp_base0/instances/base.rb +1 -1
- data/lib/avm/eac_webapp_base0/instances/deploy/appended_directories.rb +27 -0
- data/lib/avm/eac_webapp_base0/instances/deploy/build.rb +50 -0
- data/lib/avm/eac_webapp_base0/instances/deploy/file_unit.rb +44 -0
- data/lib/avm/eac_webapp_base0/instances/deploy/git_info.rb +64 -0
- data/lib/avm/eac_webapp_base0/instances/deploy/version.rb +26 -0
- data/lib/avm/eac_webapp_base0/instances/deploy/write_on_target.rb +20 -0
- data/lib/avm/eac_webapp_base0/instances/deploy.rb +75 -0
- data/lib/avm/eac_webapp_base0/version.rb +1 -1
- data/template/avm/eac_webapp_base0/{apache_host → instances/apache_host}/no_ssl.conf +0 -0
- data/template/avm/eac_webapp_base0/{apache_path → instances/apache_path}/default.conf +0 -0
- metadata +17 -17
- data/lib/avm/eac_webapp_base0/apache_host.rb +0 -83
- data/lib/avm/eac_webapp_base0/apache_path.rb +0 -51
- data/lib/avm/eac_webapp_base0/deploy/appended_directories.rb +0 -25
- data/lib/avm/eac_webapp_base0/deploy/build.rb +0 -48
- data/lib/avm/eac_webapp_base0/deploy/file_unit.rb +0 -42
- data/lib/avm/eac_webapp_base0/deploy/git_info.rb +0 -62
- data/lib/avm/eac_webapp_base0/deploy/version.rb +0 -24
- data/lib/avm/eac_webapp_base0/deploy/write_on_target.rb +0 -18
- data/lib/avm/eac_webapp_base0/deploy.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bc64f61d969d9fdbb1281a19617f4c16969e0f73181b9c71ee44ad3bee938b8
|
4
|
+
data.tar.gz: 16e1d12d41e15be64a51aa45fc18e34d0006d53462d844b0860a12b1cf1af73e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e40a9ab319e19a3c559e3ce257a728703bf55cb6a36cda2ad530ca82ceb9396dc23bf7c212b79a7cc507f812c4fb1787f72676d2b699a7a2638930fc92e96ed6
|
7
|
+
data.tar.gz: d122474e3472dc4892c26f84b4c8e87d96e98ef6068f7c3eff7c468286bd7d28dc0844b62636514eaef0156a8322bac27d6f684b4af98918153da1dfa626b761
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'avm/entries/jobs/base'
|
5
|
+
require 'avm/eac_ubuntu_base0/apache'
|
6
|
+
require 'eac_templates/core_ext'
|
7
|
+
|
8
|
+
module Avm
|
9
|
+
module EacWebappBase0
|
10
|
+
module Instances
|
11
|
+
class ApacheHost
|
12
|
+
APACHE_DIRECTORY_EXTRA_CONFIG_KEY = 'install.apache_directory_extra_config'
|
13
|
+
JOBS = %w[write_available_no_ssl_site enable_no_ssl_site remove_ssl_site reload_apache
|
14
|
+
run_certbot enable_ssl_site reload_apache].freeze
|
15
|
+
include ::Avm::Entries::Jobs::Base
|
16
|
+
|
17
|
+
def directory_extra_config
|
18
|
+
instance.entry(APACHE_DIRECTORY_EXTRA_CONFIG_KEY).value.if_present { |v| " #{v}\n" }
|
19
|
+
end
|
20
|
+
|
21
|
+
def no_ssl_site_content
|
22
|
+
::Avm::EacWebappBase0::Instances::ApacheHost
|
23
|
+
.template.child('no_ssl.conf')
|
24
|
+
.apply(variables_source)
|
25
|
+
end
|
26
|
+
|
27
|
+
def ssl?
|
28
|
+
options[:certbot]
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def apache_uncached
|
34
|
+
::Avm::EacUbuntuBase0::Apache.new(instance.host_env)
|
35
|
+
end
|
36
|
+
|
37
|
+
def enable_no_ssl_site
|
38
|
+
infom 'Enabling no SSL site...'
|
39
|
+
no_ssl_site.enable
|
40
|
+
end
|
41
|
+
|
42
|
+
def enable_ssl_site
|
43
|
+
return unless ssl?
|
44
|
+
|
45
|
+
infom 'Enabling SSL site...'
|
46
|
+
ssl_site.enable
|
47
|
+
end
|
48
|
+
|
49
|
+
def no_ssl_site_uncached
|
50
|
+
apache.site(instance.id)
|
51
|
+
end
|
52
|
+
|
53
|
+
def reload_apache
|
54
|
+
infom 'Reloading Apache...'
|
55
|
+
apache.service('reload')
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_ssl_site
|
59
|
+
infom 'Removing SSL site...'
|
60
|
+
ssl_site.remove
|
61
|
+
end
|
62
|
+
|
63
|
+
def run_certbot
|
64
|
+
return unless ssl?
|
65
|
+
|
66
|
+
infom 'Running Certbot...'
|
67
|
+
instance.host_env.command(
|
68
|
+
'sudo', 'certbot', '--apache', '--domain', instance.read_entry('web.hostname'),
|
69
|
+
'--redirect', '--non-interactive', '--agree-tos',
|
70
|
+
'--email', instance.install_email
|
71
|
+
).system!
|
72
|
+
end
|
73
|
+
|
74
|
+
def ssl_site_uncached
|
75
|
+
apache.site(no_ssl_site.name + '-le-ssl')
|
76
|
+
end
|
77
|
+
|
78
|
+
def write_available_no_ssl_site
|
79
|
+
infom 'Writing no SSL site conf...'
|
80
|
+
no_ssl_site.write(no_ssl_site_content)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/entries/jobs/base'
|
4
|
+
require 'avm/eac_ubuntu_base0/apache'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module Avm
|
8
|
+
module EacWebappBase0
|
9
|
+
module Instances
|
10
|
+
class ApachePath
|
11
|
+
JOBS = %w[write_available_conf enable_conf reload_apache].freeze
|
12
|
+
include ::Avm::Entries::Jobs::Base
|
13
|
+
|
14
|
+
def content
|
15
|
+
::Avm::EacWebappBase0::Instances::ApachePath.template.child('default.conf')
|
16
|
+
.apply(variables_source)
|
17
|
+
end
|
18
|
+
|
19
|
+
def document_root
|
20
|
+
instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
21
|
+
end
|
22
|
+
|
23
|
+
def extra_content
|
24
|
+
''
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def apache_uncached
|
30
|
+
::Avm::EacUbuntuBase0::Apache.new(instance.host_env)
|
31
|
+
end
|
32
|
+
|
33
|
+
def enable_conf
|
34
|
+
infom 'Enabling configuration...'
|
35
|
+
conf.enable
|
36
|
+
end
|
37
|
+
|
38
|
+
def reload_apache
|
39
|
+
infom 'Reloading Apache...'
|
40
|
+
apache.service('reload')
|
41
|
+
end
|
42
|
+
|
43
|
+
def conf_uncached
|
44
|
+
apache.conf(instance.id)
|
45
|
+
end
|
46
|
+
|
47
|
+
def write_available_conf
|
48
|
+
infom 'Writing available configuration...'
|
49
|
+
conf.write(content)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -4,7 +4,7 @@ require 'avm/instances/base'
|
|
4
4
|
require 'avm/eac_postgresql_base0/instance_with'
|
5
5
|
require 'avm/data/instance/files_unit'
|
6
6
|
require 'avm/data/instance/package'
|
7
|
-
require 'avm/eac_webapp_base0/deploy/file_unit'
|
7
|
+
require 'avm/eac_webapp_base0/instances/deploy/file_unit'
|
8
8
|
require 'avm/eac_webapp_base0/instances/runners'
|
9
9
|
require 'avm/eac_ubuntu_base0/instances/base'
|
10
10
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/path_string'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module EacWebappBase0
|
7
|
+
module Instances
|
8
|
+
class Deploy
|
9
|
+
module AppendedDirectories
|
10
|
+
APPENDED_DIRECTORIES_ENTRY_KEY = 'deploy.appended_directories'
|
11
|
+
|
12
|
+
def appended_directories
|
13
|
+
appended_directories_from_instance_entry + appended_directories_from_options
|
14
|
+
end
|
15
|
+
|
16
|
+
def appended_directories_from_instance_entry
|
17
|
+
::Avm::PathString.paths(instance.read_entry_optional(APPENDED_DIRECTORIES_ENTRY_KEY))
|
18
|
+
end
|
19
|
+
|
20
|
+
def appended_directories_from_options
|
21
|
+
options[OPTION_APPENDED_DIRECTORIES] || []
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/files/appender'
|
4
|
+
require 'avm/files/deploy'
|
5
|
+
require 'eac_ruby_utils/envs'
|
6
|
+
require 'eac_ruby_utils/fs/temp'
|
7
|
+
|
8
|
+
module Avm
|
9
|
+
module EacWebappBase0
|
10
|
+
module Instances
|
11
|
+
class Deploy
|
12
|
+
module Build
|
13
|
+
private
|
14
|
+
|
15
|
+
attr_accessor :build_dir
|
16
|
+
|
17
|
+
def append_instance_content
|
18
|
+
::Avm::Files::Appender
|
19
|
+
.new
|
20
|
+
.variables_source_set(variables_source)
|
21
|
+
.append_templatized_directory(template.path)
|
22
|
+
.append_templatized_directories(appended_directories)
|
23
|
+
.append_file_content(version_target_path, version)
|
24
|
+
.write_appended_on(build_dir)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_dir_env
|
28
|
+
::EacRubyUtils::Envs.local
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_build_dir
|
32
|
+
self.build_dir = ::EacRubyUtils::Fs::Temp.directory
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_build_dir
|
36
|
+
build_dir&.remove
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_content
|
40
|
+
infom 'Writing Git source code...'
|
41
|
+
::Avm::Git::Commit.new(git, commit_sha1).deploy_to_env_path(
|
42
|
+
build_dir_env,
|
43
|
+
build_dir
|
44
|
+
).variables_source_set(variables_source).run
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module EacWebappBase0
|
5
|
+
module Instances
|
6
|
+
class Deploy
|
7
|
+
class FileUnit < ::SimpleDelegator
|
8
|
+
attr_reader :data_key, :fs_path_subpath
|
9
|
+
|
10
|
+
def initialize(deploy, data_key, fs_path_subpath)
|
11
|
+
super(deploy)
|
12
|
+
@data_key = data_key
|
13
|
+
@fs_path_subpath = fs_path_subpath
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
assert_source_directory
|
18
|
+
link_source_target
|
19
|
+
end
|
20
|
+
|
21
|
+
def assert_source_directory
|
22
|
+
infom "Asserting \"#{data_key}\" source directory..."
|
23
|
+
instance.host_env.command('mkdir', '-p', source_path).execute!
|
24
|
+
end
|
25
|
+
|
26
|
+
def source_path
|
27
|
+
::File.join(instance.install_data_path, data_key.to_s)
|
28
|
+
end
|
29
|
+
|
30
|
+
def target_path
|
31
|
+
::File.join(instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH),
|
32
|
+
fs_path_subpath.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def link_source_target
|
36
|
+
infom "Linking \"#{data_key}\" directory..."
|
37
|
+
instance.host_env.command('rm', '-rf', target_path).execute!
|
38
|
+
instance.host_env.command('ln', '-s', source_path, target_path).execute!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module EacWebappBase0
|
5
|
+
module Instances
|
6
|
+
class Deploy
|
7
|
+
module GitInfo
|
8
|
+
def commit_sha1_uncached
|
9
|
+
git_fetch
|
10
|
+
r = git.rev_parse(git_reference_found)
|
11
|
+
return r if r
|
12
|
+
|
13
|
+
raise ::Avm::Result::Error, "No commit SHA1 found for \"#{git_reference_found}\""
|
14
|
+
end
|
15
|
+
|
16
|
+
def git_fetch_uncached
|
17
|
+
infom "Fetching remote \"#{git_remote_name}\" from \"#{git_repository_path}\"..."
|
18
|
+
git.fetch(git_remote_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def git_reference
|
22
|
+
options[OPTION_REFERENCE] || DEFAULT_REFERENCE
|
23
|
+
end
|
24
|
+
|
25
|
+
def git_reference_found_uncached
|
26
|
+
%w[git_reference instance_branch master_branch].map { |b| send(b) }.find(&:present?) ||
|
27
|
+
raise(
|
28
|
+
::Avm::Result::Error,
|
29
|
+
'No git reference found (Searched for option, instance and master)'
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def git_remote_hashs_uncached
|
34
|
+
git.remote_hashs(git_remote_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def git_remote_name
|
38
|
+
::Avm::Git::DEFAULT_REMOTE_NAME
|
39
|
+
end
|
40
|
+
|
41
|
+
def git_repository_path
|
42
|
+
instance.source_instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
43
|
+
end
|
44
|
+
|
45
|
+
def git_uncached
|
46
|
+
::Avm::Launcher::Git::Base.new(git_repository_path)
|
47
|
+
end
|
48
|
+
|
49
|
+
def instance_branch
|
50
|
+
remote_branch(instance.id)
|
51
|
+
end
|
52
|
+
|
53
|
+
def remote_branch(name)
|
54
|
+
git_remote_hashs.key?("refs/heads/#{name}") ? "#{git_remote_name}/#{name}" : nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def master_branch
|
58
|
+
remote_branch('master')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module EacWebappBase0
|
5
|
+
module Instances
|
6
|
+
class Deploy
|
7
|
+
module Version
|
8
|
+
VERSION_TARGET_PATH = 'VERSION'
|
9
|
+
|
10
|
+
def version
|
11
|
+
([::Time.now, commit_sha1] + version_git_refs).join('|')
|
12
|
+
end
|
13
|
+
|
14
|
+
def version_git_refs
|
15
|
+
git_remote_hashs.select { |_name, sha1| sha1 == commit_sha1 }.keys
|
16
|
+
.map { |ref| ref.gsub(%r{\Arefs/}, '') }.reject { |ref| ref == 'HEAD' }
|
17
|
+
end
|
18
|
+
|
19
|
+
def version_target_path
|
20
|
+
VERSION_TARGET_PATH
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module EacWebappBase0
|
7
|
+
module Instances
|
8
|
+
class Deploy
|
9
|
+
module WriteOnTarget
|
10
|
+
def write_on_target
|
11
|
+
::Avm::Files::Deploy.new(
|
12
|
+
instance.host_env,
|
13
|
+
instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
14
|
+
).append_plain_directory(build_dir).run
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/callbacks'
|
4
|
+
require 'avm/entries/jobs/base'
|
5
|
+
require 'avm/git'
|
6
|
+
require 'eac_ruby_utils/core_ext'
|
7
|
+
require 'eac_templates/core_ext'
|
8
|
+
require 'avm/launcher/git/base'
|
9
|
+
require 'net/http'
|
10
|
+
|
11
|
+
module Avm
|
12
|
+
module EacWebappBase0
|
13
|
+
module Instances
|
14
|
+
class Deploy
|
15
|
+
require_sub __FILE__, include_modules: true
|
16
|
+
|
17
|
+
DEFAULT_REFERENCE = 'HEAD'
|
18
|
+
|
19
|
+
REQUEST_TEST_JOB = 'request_test'
|
20
|
+
JOBS = (%w[create_build_dir build_content append_instance_content write_on_target
|
21
|
+
setup_files_units assert_instance_branch] + [REQUEST_TEST_JOB]).freeze
|
22
|
+
|
23
|
+
include ::Avm::Entries::Jobs::Base
|
24
|
+
|
25
|
+
lists.add_symbol :option, :appended_directories, :no_request_test, :reference
|
26
|
+
|
27
|
+
def option_list
|
28
|
+
::Avm::EacWebappBase0::Instances::Deploy.lists.option
|
29
|
+
end
|
30
|
+
|
31
|
+
def run
|
32
|
+
super
|
33
|
+
ensure
|
34
|
+
remove_build_dir
|
35
|
+
end
|
36
|
+
|
37
|
+
def start_banner
|
38
|
+
infov 'Instance', instance
|
39
|
+
infov 'Git reference (User)', git_reference.if_present('- BLANK -')
|
40
|
+
infov 'Git remote name', git_remote_name
|
41
|
+
infov 'Git reference (Found)', git_reference_found
|
42
|
+
infov 'Git commit SHA1', commit_sha1
|
43
|
+
infov 'Appended directories', appended_directories
|
44
|
+
end
|
45
|
+
|
46
|
+
def setup_files_units
|
47
|
+
instance.class.const_get('FILES_UNITS').each do |data_key, fs_path_subpath|
|
48
|
+
FileUnit.new(self, data_key, fs_path_subpath).run
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def assert_instance_branch
|
53
|
+
infom 'Setting instance branch...'
|
54
|
+
git.execute!('push', git_remote_name, "#{commit_sha1}:refs/heads/#{instance.id}", '-f')
|
55
|
+
end
|
56
|
+
|
57
|
+
def request_test
|
58
|
+
infom 'Requesting web interface...'
|
59
|
+
uri = URI(instance.read_entry('web.url'))
|
60
|
+
response = ::Net::HTTP.get_response(uri)
|
61
|
+
infov 'Response status', response.code
|
62
|
+
fatal_error "Request to #{uri} failed" unless response.code.to_i == 200
|
63
|
+
end
|
64
|
+
|
65
|
+
protected
|
66
|
+
|
67
|
+
def jobs
|
68
|
+
r = super
|
69
|
+
r.delete(REQUEST_TEST_JOB) if options[OPTION_NO_REQUEST_TEST]
|
70
|
+
r
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avm-eac_webapp_base0
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Put here the authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avm
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.45'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.45'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: avm-eac_generic_base0
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
75
|
+
version: '0.104'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
82
|
+
version: '0.104'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: eac_ruby_gem_support
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,17 +101,17 @@ extensions: []
|
|
101
101
|
extra_rdoc_files: []
|
102
102
|
files:
|
103
103
|
- lib/avm/eac_webapp_base0.rb
|
104
|
-
- lib/avm/eac_webapp_base0/apache_host.rb
|
105
|
-
- lib/avm/eac_webapp_base0/apache_path.rb
|
106
|
-
- lib/avm/eac_webapp_base0/deploy.rb
|
107
|
-
- lib/avm/eac_webapp_base0/deploy/appended_directories.rb
|
108
|
-
- lib/avm/eac_webapp_base0/deploy/build.rb
|
109
|
-
- lib/avm/eac_webapp_base0/deploy/file_unit.rb
|
110
|
-
- lib/avm/eac_webapp_base0/deploy/git_info.rb
|
111
|
-
- lib/avm/eac_webapp_base0/deploy/version.rb
|
112
|
-
- lib/avm/eac_webapp_base0/deploy/write_on_target.rb
|
104
|
+
- lib/avm/eac_webapp_base0/instances/apache_host.rb
|
105
|
+
- lib/avm/eac_webapp_base0/instances/apache_path.rb
|
113
106
|
- lib/avm/eac_webapp_base0/instances/base.rb
|
114
107
|
- lib/avm/eac_webapp_base0/instances/base/subcommand_parent.rb
|
108
|
+
- lib/avm/eac_webapp_base0/instances/deploy.rb
|
109
|
+
- lib/avm/eac_webapp_base0/instances/deploy/appended_directories.rb
|
110
|
+
- lib/avm/eac_webapp_base0/instances/deploy/build.rb
|
111
|
+
- lib/avm/eac_webapp_base0/instances/deploy/file_unit.rb
|
112
|
+
- lib/avm/eac_webapp_base0/instances/deploy/git_info.rb
|
113
|
+
- lib/avm/eac_webapp_base0/instances/deploy/version.rb
|
114
|
+
- lib/avm/eac_webapp_base0/instances/deploy/write_on_target.rb
|
115
115
|
- lib/avm/eac_webapp_base0/instances/runners.rb
|
116
116
|
- lib/avm/eac_webapp_base0/instances/runners/apache_host.rb
|
117
117
|
- lib/avm/eac_webapp_base0/instances/runners/apache_path.rb
|
@@ -123,8 +123,8 @@ files:
|
|
123
123
|
- lib/avm/eac_webapp_base0/sources.rb
|
124
124
|
- lib/avm/eac_webapp_base0/sources/base.rb
|
125
125
|
- lib/avm/eac_webapp_base0/version.rb
|
126
|
-
- template/avm/eac_webapp_base0/apache_host/no_ssl.conf
|
127
|
-
- template/avm/eac_webapp_base0/apache_path/default.conf
|
126
|
+
- template/avm/eac_webapp_base0/instances/apache_host/no_ssl.conf
|
127
|
+
- template/avm/eac_webapp_base0/instances/apache_path/default.conf
|
128
128
|
homepage:
|
129
129
|
licenses: []
|
130
130
|
metadata: {}
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
require 'avm/jobs/base'
|
5
|
-
require 'avm/eac_ubuntu_base0/apache'
|
6
|
-
require 'eac_templates/core_ext'
|
7
|
-
|
8
|
-
module Avm
|
9
|
-
module EacWebappBase0
|
10
|
-
class ApacheHost
|
11
|
-
APACHE_DIRECTORY_EXTRA_CONFIG_KEY = 'install.apache_directory_extra_config'
|
12
|
-
JOBS = %w[write_available_no_ssl_site enable_no_ssl_site remove_ssl_site reload_apache
|
13
|
-
run_certbot enable_ssl_site reload_apache].freeze
|
14
|
-
include ::Avm::Jobs::Base
|
15
|
-
|
16
|
-
def directory_extra_config
|
17
|
-
instance.entry(APACHE_DIRECTORY_EXTRA_CONFIG_KEY).value.if_present { |v| " #{v}\n" }
|
18
|
-
end
|
19
|
-
|
20
|
-
def no_ssl_site_content
|
21
|
-
::Avm::EacWebappBase0::ApacheHost
|
22
|
-
.template.child('no_ssl.conf')
|
23
|
-
.apply(variables_source)
|
24
|
-
end
|
25
|
-
|
26
|
-
def ssl?
|
27
|
-
options[:certbot]
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def apache_uncached
|
33
|
-
::Avm::EacUbuntuBase0::Apache.new(instance.host_env)
|
34
|
-
end
|
35
|
-
|
36
|
-
def enable_no_ssl_site
|
37
|
-
infom 'Enabling no SSL site...'
|
38
|
-
no_ssl_site.enable
|
39
|
-
end
|
40
|
-
|
41
|
-
def enable_ssl_site
|
42
|
-
return unless ssl?
|
43
|
-
|
44
|
-
infom 'Enabling SSL site...'
|
45
|
-
ssl_site.enable
|
46
|
-
end
|
47
|
-
|
48
|
-
def no_ssl_site_uncached
|
49
|
-
apache.site(instance.id)
|
50
|
-
end
|
51
|
-
|
52
|
-
def reload_apache
|
53
|
-
infom 'Reloading Apache...'
|
54
|
-
apache.service('reload')
|
55
|
-
end
|
56
|
-
|
57
|
-
def remove_ssl_site
|
58
|
-
infom 'Removing SSL site...'
|
59
|
-
ssl_site.remove
|
60
|
-
end
|
61
|
-
|
62
|
-
def run_certbot
|
63
|
-
return unless ssl?
|
64
|
-
|
65
|
-
infom 'Running Certbot...'
|
66
|
-
instance.host_env.command(
|
67
|
-
'sudo', 'certbot', '--apache', '--domain', instance.read_entry('web.hostname'),
|
68
|
-
'--redirect', '--non-interactive', '--agree-tos',
|
69
|
-
'--email', instance.install_email
|
70
|
-
).system!
|
71
|
-
end
|
72
|
-
|
73
|
-
def ssl_site_uncached
|
74
|
-
apache.site(no_ssl_site.name + '-le-ssl')
|
75
|
-
end
|
76
|
-
|
77
|
-
def write_available_no_ssl_site
|
78
|
-
infom 'Writing no SSL site conf...'
|
79
|
-
no_ssl_site.write(no_ssl_site_content)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'avm/jobs/base'
|
4
|
-
require 'avm/eac_ubuntu_base0/apache'
|
5
|
-
require 'eac_ruby_utils/core_ext'
|
6
|
-
|
7
|
-
module Avm
|
8
|
-
module EacWebappBase0
|
9
|
-
class ApachePath
|
10
|
-
JOBS = %w[write_available_conf enable_conf reload_apache].freeze
|
11
|
-
include ::Avm::Jobs::Base
|
12
|
-
|
13
|
-
def content
|
14
|
-
::Avm::EacWebappBase0::ApachePath.template.child('default.conf').apply(variables_source)
|
15
|
-
end
|
16
|
-
|
17
|
-
def document_root
|
18
|
-
instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
19
|
-
end
|
20
|
-
|
21
|
-
def extra_content
|
22
|
-
''
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def apache_uncached
|
28
|
-
::Avm::EacUbuntuBase0::Apache.new(instance.host_env)
|
29
|
-
end
|
30
|
-
|
31
|
-
def enable_conf
|
32
|
-
infom 'Enabling configuration...'
|
33
|
-
conf.enable
|
34
|
-
end
|
35
|
-
|
36
|
-
def reload_apache
|
37
|
-
infom 'Reloading Apache...'
|
38
|
-
apache.service('reload')
|
39
|
-
end
|
40
|
-
|
41
|
-
def conf_uncached
|
42
|
-
apache.conf(instance.id)
|
43
|
-
end
|
44
|
-
|
45
|
-
def write_available_conf
|
46
|
-
infom 'Writing available configuration...'
|
47
|
-
conf.write(content)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'avm/path_string'
|
4
|
-
|
5
|
-
module Avm
|
6
|
-
module EacWebappBase0
|
7
|
-
class Deploy
|
8
|
-
module AppendedDirectories
|
9
|
-
APPENDED_DIRECTORIES_ENTRY_KEY = 'deploy.appended_directories'
|
10
|
-
|
11
|
-
def appended_directories
|
12
|
-
appended_directories_from_instance_entry + appended_directories_from_options
|
13
|
-
end
|
14
|
-
|
15
|
-
def appended_directories_from_instance_entry
|
16
|
-
::Avm::PathString.paths(instance.read_entry_optional(APPENDED_DIRECTORIES_ENTRY_KEY))
|
17
|
-
end
|
18
|
-
|
19
|
-
def appended_directories_from_options
|
20
|
-
options[OPTION_APPENDED_DIRECTORIES] || []
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'avm/files/appender'
|
4
|
-
require 'avm/files/deploy'
|
5
|
-
require 'eac_ruby_utils/envs'
|
6
|
-
require 'eac_ruby_utils/fs/temp'
|
7
|
-
|
8
|
-
module Avm
|
9
|
-
module EacWebappBase0
|
10
|
-
class Deploy
|
11
|
-
module Build
|
12
|
-
private
|
13
|
-
|
14
|
-
attr_accessor :build_dir
|
15
|
-
|
16
|
-
def append_instance_content
|
17
|
-
::Avm::Files::Appender
|
18
|
-
.new
|
19
|
-
.variables_source_set(variables_source)
|
20
|
-
.append_templatized_directory(template.path)
|
21
|
-
.append_templatized_directories(appended_directories)
|
22
|
-
.append_file_content(version_target_path, version)
|
23
|
-
.write_appended_on(build_dir)
|
24
|
-
end
|
25
|
-
|
26
|
-
def build_dir_env
|
27
|
-
::EacRubyUtils::Envs.local
|
28
|
-
end
|
29
|
-
|
30
|
-
def create_build_dir
|
31
|
-
self.build_dir = ::EacRubyUtils::Fs::Temp.directory
|
32
|
-
end
|
33
|
-
|
34
|
-
def remove_build_dir
|
35
|
-
build_dir&.remove
|
36
|
-
end
|
37
|
-
|
38
|
-
def build_content
|
39
|
-
infom 'Writing Git source code...'
|
40
|
-
::Avm::Git::Commit.new(git, commit_sha1).deploy_to_env_path(
|
41
|
-
build_dir_env,
|
42
|
-
build_dir
|
43
|
-
).variables_source_set(variables_source).run
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Avm
|
4
|
-
module EacWebappBase0
|
5
|
-
class Deploy
|
6
|
-
class FileUnit < ::SimpleDelegator
|
7
|
-
attr_reader :data_key, :fs_path_subpath
|
8
|
-
|
9
|
-
def initialize(deploy, data_key, fs_path_subpath)
|
10
|
-
super(deploy)
|
11
|
-
@data_key = data_key
|
12
|
-
@fs_path_subpath = fs_path_subpath
|
13
|
-
end
|
14
|
-
|
15
|
-
def run
|
16
|
-
assert_source_directory
|
17
|
-
link_source_target
|
18
|
-
end
|
19
|
-
|
20
|
-
def assert_source_directory
|
21
|
-
infom "Asserting \"#{data_key}\" source directory..."
|
22
|
-
instance.host_env.command('mkdir', '-p', source_path).execute!
|
23
|
-
end
|
24
|
-
|
25
|
-
def source_path
|
26
|
-
::File.join(instance.install_data_path, data_key.to_s)
|
27
|
-
end
|
28
|
-
|
29
|
-
def target_path
|
30
|
-
::File.join(instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH),
|
31
|
-
fs_path_subpath.to_s)
|
32
|
-
end
|
33
|
-
|
34
|
-
def link_source_target
|
35
|
-
infom "Linking \"#{data_key}\" directory..."
|
36
|
-
instance.host_env.command('rm', '-rf', target_path).execute!
|
37
|
-
instance.host_env.command('ln', '-s', source_path, target_path).execute!
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Avm
|
4
|
-
module EacWebappBase0
|
5
|
-
class Deploy
|
6
|
-
module GitInfo
|
7
|
-
def commit_sha1_uncached
|
8
|
-
git_fetch
|
9
|
-
r = git.rev_parse(git_reference_found)
|
10
|
-
return r if r
|
11
|
-
|
12
|
-
raise ::Avm::Result::Error, "No commit SHA1 found for \"#{git_reference_found}\""
|
13
|
-
end
|
14
|
-
|
15
|
-
def git_fetch_uncached
|
16
|
-
infom "Fetching remote \"#{git_remote_name}\" from \"#{git_repository_path}\"..."
|
17
|
-
git.fetch(git_remote_name)
|
18
|
-
end
|
19
|
-
|
20
|
-
def git_reference
|
21
|
-
options[OPTION_REFERENCE] || DEFAULT_REFERENCE
|
22
|
-
end
|
23
|
-
|
24
|
-
def git_reference_found_uncached
|
25
|
-
%w[git_reference instance_branch master_branch].map { |b| send(b) }.find(&:present?) ||
|
26
|
-
raise(
|
27
|
-
::Avm::Result::Error,
|
28
|
-
'No git reference found (Searched for option, instance and master)'
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
def git_remote_hashs_uncached
|
33
|
-
git.remote_hashs(git_remote_name)
|
34
|
-
end
|
35
|
-
|
36
|
-
def git_remote_name
|
37
|
-
::Avm::Git::DEFAULT_REMOTE_NAME
|
38
|
-
end
|
39
|
-
|
40
|
-
def git_repository_path
|
41
|
-
instance.source_instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
42
|
-
end
|
43
|
-
|
44
|
-
def git_uncached
|
45
|
-
::Avm::Launcher::Git::Base.new(git_repository_path)
|
46
|
-
end
|
47
|
-
|
48
|
-
def instance_branch
|
49
|
-
remote_branch(instance.id)
|
50
|
-
end
|
51
|
-
|
52
|
-
def remote_branch(name)
|
53
|
-
git_remote_hashs.key?("refs/heads/#{name}") ? "#{git_remote_name}/#{name}" : nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def master_branch
|
57
|
-
remote_branch('master')
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Avm
|
4
|
-
module EacWebappBase0
|
5
|
-
class Deploy
|
6
|
-
module Version
|
7
|
-
VERSION_TARGET_PATH = 'VERSION'
|
8
|
-
|
9
|
-
def version
|
10
|
-
([::Time.now, commit_sha1] + version_git_refs).join('|')
|
11
|
-
end
|
12
|
-
|
13
|
-
def version_git_refs
|
14
|
-
git_remote_hashs.select { |_name, sha1| sha1 == commit_sha1 }.keys
|
15
|
-
.map { |ref| ref.gsub(%r{\Arefs/}, '') }.reject { |ref| ref == 'HEAD' }
|
16
|
-
end
|
17
|
-
|
18
|
-
def version_target_path
|
19
|
-
VERSION_TARGET_PATH
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
|
5
|
-
module Avm
|
6
|
-
module EacWebappBase0
|
7
|
-
class Deploy
|
8
|
-
module WriteOnTarget
|
9
|
-
def write_on_target
|
10
|
-
::Avm::Files::Deploy.new(
|
11
|
-
instance.host_env,
|
12
|
-
instance.read_entry(::Avm::Instances::EntryKeys::INSTALL_PATH)
|
13
|
-
).append_plain_directory(build_dir).run
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_support/callbacks'
|
4
|
-
require 'avm/jobs/base'
|
5
|
-
require 'avm/git'
|
6
|
-
require 'eac_ruby_utils/core_ext'
|
7
|
-
require 'eac_templates/core_ext'
|
8
|
-
require 'avm/launcher/git/base'
|
9
|
-
require 'net/http'
|
10
|
-
|
11
|
-
module Avm
|
12
|
-
module EacWebappBase0
|
13
|
-
class Deploy
|
14
|
-
require_sub __FILE__, include_modules: true
|
15
|
-
|
16
|
-
DEFAULT_REFERENCE = 'HEAD'
|
17
|
-
|
18
|
-
REQUEST_TEST_JOB = 'request_test'
|
19
|
-
JOBS = (%w[create_build_dir build_content append_instance_content write_on_target
|
20
|
-
setup_files_units assert_instance_branch] + [REQUEST_TEST_JOB]).freeze
|
21
|
-
|
22
|
-
include ::Avm::Jobs::Base
|
23
|
-
|
24
|
-
lists.add_symbol :option, :appended_directories, :no_request_test, :reference
|
25
|
-
|
26
|
-
def option_list
|
27
|
-
::Avm::EacWebappBase0::Deploy.lists.option
|
28
|
-
end
|
29
|
-
|
30
|
-
def run
|
31
|
-
super
|
32
|
-
ensure
|
33
|
-
remove_build_dir
|
34
|
-
end
|
35
|
-
|
36
|
-
def start_banner
|
37
|
-
infov 'Instance', instance
|
38
|
-
infov 'Git reference (User)', git_reference.if_present('- BLANK -')
|
39
|
-
infov 'Git remote name', git_remote_name
|
40
|
-
infov 'Git reference (Found)', git_reference_found
|
41
|
-
infov 'Git commit SHA1', commit_sha1
|
42
|
-
infov 'Appended directories', appended_directories
|
43
|
-
end
|
44
|
-
|
45
|
-
def setup_files_units
|
46
|
-
instance.class.const_get('FILES_UNITS').each do |data_key, fs_path_subpath|
|
47
|
-
FileUnit.new(self, data_key, fs_path_subpath).run
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def assert_instance_branch
|
52
|
-
infom 'Setting instance branch...'
|
53
|
-
git.execute!('push', git_remote_name, "#{commit_sha1}:refs/heads/#{instance.id}", '-f')
|
54
|
-
end
|
55
|
-
|
56
|
-
def request_test
|
57
|
-
infom 'Requesting web interface...'
|
58
|
-
uri = URI(instance.read_entry('web.url'))
|
59
|
-
response = ::Net::HTTP.get_response(uri)
|
60
|
-
infov 'Response status', response.code
|
61
|
-
fatal_error "Request to #{uri} failed" unless response.code.to_i == 200
|
62
|
-
end
|
63
|
-
|
64
|
-
protected
|
65
|
-
|
66
|
-
def jobs
|
67
|
-
r = super
|
68
|
-
r.delete(REQUEST_TEST_JOB) if options[OPTION_NO_REQUEST_TEST]
|
69
|
-
r
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|