avm-tools 0.2.0 → 0.3.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.rb +3 -0
- data/lib/avm/configs.rb +11 -0
- data/lib/avm/instances.rb +8 -0
- data/lib/avm/instances/application.rb +17 -0
- data/lib/avm/instances/base.rb +51 -0
- data/lib/avm/instances/entries.rb +25 -0
- data/lib/avm/stereotypes.rb +9 -0
- data/lib/avm/stereotypes/eac_wordpress_base0/instance.rb +14 -0
- data/lib/avm/stereotypes/postgresql.rb +11 -0
- data/lib/avm/stereotypes/postgresql/instance.rb +59 -0
- data/lib/avm/stereotypes/postgresql/instance_with.rb +18 -0
- data/lib/avm/tools/runner/eac_wordpress_base0.rb +33 -0
- data/lib/avm/tools/runner/eac_wordpress_base0/data.rb +25 -0
- data/lib/avm/tools/runner/eac_wordpress_base0/data/dump.rb +110 -0
- data/lib/avm/tools/version.rb +1 -1
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c972632849ad1e0d395436ad4cde63a1b2a43b0805a8e1f7bd36dbc1b40c15b5
|
4
|
+
data.tar.gz: 6156864dc1c49ca5e16112420ff78e15a16c59e48246068247bb44646083d6bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3ab6bd6d4e2111ebd6cdf99654fbbe92c3725d529d19bd6a860c4a80136cab8d96e50339f32e3490738d2159c4364e7524ed6136351234e2529c00c1c055996
|
7
|
+
data.tar.gz: 7c5bcf61a66dd32bf686ca428c1c7e5197c5f06acdce5415c7a2d840e658f3c7d0f10c56d8c40b15996b7f758b7ad8f805fa979365ea86d4805ed44831d51eb0
|
data/lib/avm.rb
CHANGED
data/lib/avm/configs.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/simple_cache'
|
4
|
+
require 'avm/instances/entries'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Instances
|
8
|
+
class Base
|
9
|
+
include ::EacRubyUtils::SimpleCache
|
10
|
+
include ::Avm::Instances::Entries
|
11
|
+
|
12
|
+
ID_PATTERN = /\A([a-z]+(?:\-[a-z]+)*)_(.+)\z/.freeze
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def by_id(id)
|
16
|
+
application_id, suffix = parse_id(id)
|
17
|
+
require 'avm/instances/application'
|
18
|
+
new(::Avm::Instances::Application.new(application_id), suffix)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def parse_id(id)
|
24
|
+
m = ID_PATTERN.match(id)
|
25
|
+
return [m[1], m[2]] if m
|
26
|
+
|
27
|
+
raise "ID Pattern no matched: \"#{id}\""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_reader :application, :suffix
|
32
|
+
|
33
|
+
def initialize(application, suffix)
|
34
|
+
@application = application
|
35
|
+
@suffix = suffix.to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def id
|
39
|
+
"#{application.id}_#{suffix}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def host_env_uncached
|
43
|
+
if read_entry('host') == 'localhost'
|
44
|
+
::EacRubyUtils::Envs.local
|
45
|
+
else
|
46
|
+
::EacRubyUtils::Envs.ssh("#{read_entry('user')}@#{read_entry('host')}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/patches/object/asserts'
|
4
|
+
require 'avm/configs'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Instances
|
8
|
+
module Entries
|
9
|
+
def path_prefix
|
10
|
+
@path_prefix ||= [id].freeze
|
11
|
+
end
|
12
|
+
|
13
|
+
def read_entry(entry_suffix, options = {})
|
14
|
+
::Avm.configs.read_entry(full_entry_path(entry_suffix), options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def full_entry_path(entry_suffix)
|
18
|
+
unless entry_suffix.is_a?(::Array)
|
19
|
+
entry_suffix = ::EacRubyUtils::PathsHash.parse_entry_key(entry_suffix.to_s)
|
20
|
+
end
|
21
|
+
(path_prefix + entry_suffix).join('.')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/instances/base'
|
4
|
+
require 'avm/stereotypes/postgresql/instance_with'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Stereotypes
|
8
|
+
module EacWordpressBase0
|
9
|
+
class Instance < ::Avm::Instances::Base
|
10
|
+
include ::Avm::Stereotypes::Postgresql::InstanceWith
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Stereotypes
|
5
|
+
module Postgresql
|
6
|
+
class Instance
|
7
|
+
def initialize(env, connection_params)
|
8
|
+
@env = env
|
9
|
+
@connection_params = connection_params.with_indifferent_access
|
10
|
+
end
|
11
|
+
|
12
|
+
def dump_command
|
13
|
+
env.command('pg_dump', '--no-privileges', '--clean', '--no-owner', *common_command_args)
|
14
|
+
.envvar('PGPASSWORD', password)
|
15
|
+
end
|
16
|
+
|
17
|
+
def dump_gzip_command
|
18
|
+
dump_command.append(['@ESC_|', 'gzip', '-9', '-c'])
|
19
|
+
end
|
20
|
+
|
21
|
+
def psql_command
|
22
|
+
env.command("@ESC_PGPASSWORD=#{password}", 'psql', *common_command_args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def psql_command_command(sql)
|
26
|
+
psql_command.append(['--quiet', '--tuples-only', '--command', sql])
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_reader :env, :connection_params
|
32
|
+
|
33
|
+
def common_command_args
|
34
|
+
['--host', host, '--username', user, '--port', port, name]
|
35
|
+
end
|
36
|
+
|
37
|
+
def host
|
38
|
+
connection_params[:host] || '127.0.0.1'
|
39
|
+
end
|
40
|
+
|
41
|
+
def port
|
42
|
+
connection_params[:port] || '5432'
|
43
|
+
end
|
44
|
+
|
45
|
+
def user
|
46
|
+
connection_params.fetch(:user)
|
47
|
+
end
|
48
|
+
|
49
|
+
def password
|
50
|
+
connection_params.fetch(:password)
|
51
|
+
end
|
52
|
+
|
53
|
+
def name
|
54
|
+
connection_params.fetch(:name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/stereotypes/postgresql/instance'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Stereotypes
|
7
|
+
module Postgresql
|
8
|
+
module InstanceWith
|
9
|
+
def pg
|
10
|
+
@pg ||= ::Avm::Stereotypes::Postgresql::Instance.new(
|
11
|
+
host_env, user: read_entry('database.user'), password: read_entry('database.password'),
|
12
|
+
name: read_entry('database.name')
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
4
|
+
require 'eac_ruby_utils/simple_cache'
|
5
|
+
require 'avm/stereotypes/eac_wordpress_base0/instance'
|
6
|
+
require 'avm/tools/runner/eac_wordpress_base0/data'
|
7
|
+
|
8
|
+
module Avm
|
9
|
+
module Tools
|
10
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
11
|
+
class EacWordpressBase0 < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
include ::EacRubyUtils::SimpleCache
|
13
|
+
|
14
|
+
DOC = <<~DOCOPT
|
15
|
+
Utilities for EacWordpressBase0 instances.
|
16
|
+
|
17
|
+
Usage:
|
18
|
+
__PROGRAM__ [options] <instance_id> __SUBCOMMANDS__
|
19
|
+
__PROGRAM__ -h | --help
|
20
|
+
|
21
|
+
Options:
|
22
|
+
-h --help Show this screen.
|
23
|
+
DOCOPT
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def instance_uncached
|
28
|
+
::Avm::Stereotypes::EacWordpressBase0::Instance.by_id(options['<instance_id>'])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
4
|
+
require 'avm/tools/runner/eac_wordpress_base0/data/dump'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Tools
|
8
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
9
|
+
class EacWordpressBase0 < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
class Data < ::EacRubyUtils::Console::DocoptRunner
|
11
|
+
DOC = <<~DOCOPT
|
12
|
+
Data utilities for EacWordpressBase0 instances.
|
13
|
+
|
14
|
+
Usage:
|
15
|
+
__PROGRAM__ __SUBCOMMANDS__
|
16
|
+
__PROGRAM__ -h | --help
|
17
|
+
|
18
|
+
Options:
|
19
|
+
-h --help Show this screen.
|
20
|
+
DOCOPT
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/numeric/time'
|
4
|
+
require 'eac_ruby_utils/console/speaker'
|
5
|
+
require 'eac_ruby_utils/simple_cache'
|
6
|
+
|
7
|
+
module Avm
|
8
|
+
module Tools
|
9
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
class EacWordpressBase0 < ::EacRubyUtils::Console::DocoptRunner
|
11
|
+
class Data < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
class Dump < ::EacRubyUtils::Console::DocoptRunner
|
13
|
+
include ::EacRubyUtils::SimpleCache
|
14
|
+
include ::EacRubyUtils::Console::Speaker
|
15
|
+
|
16
|
+
DUMP_EXPIRE_TIME = 1.days
|
17
|
+
DEFAULT_DUMP_PATH_ENTRY_SUFFIX = 'data.default_dump_path'
|
18
|
+
NO_DUMP_MESSAGE = 'Dump "%s" already exist and rewrite options was no setted nor ' \
|
19
|
+
'dump was expired.'
|
20
|
+
|
21
|
+
DOC = <<~DOCUMENT
|
22
|
+
Dump utility for EacRailsBase instance.
|
23
|
+
|
24
|
+
Usage:
|
25
|
+
__PROGRAM__ [options]
|
26
|
+
|
27
|
+
Options:
|
28
|
+
-h --help Show this screen.
|
29
|
+
--rewrite Forces dump overwrite.
|
30
|
+
--dump-path=<dump_path> Set DUMP_PATH variable.
|
31
|
+
DOCUMENT
|
32
|
+
|
33
|
+
def run
|
34
|
+
if run_dump?
|
35
|
+
run_dump
|
36
|
+
else
|
37
|
+
warn(format(NO_DUMP_MESSAGE, dump_path))
|
38
|
+
end
|
39
|
+
success("Dump path: \"#{dump_path}\"")
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def dump_path
|
45
|
+
options.fetch('--dump-path') || default_dump_path
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_dump_path
|
49
|
+
context(:instance).read_entry(DEFAULT_DUMP_PATH_ENTRY_SUFFIX)
|
50
|
+
end
|
51
|
+
|
52
|
+
def dump_exist?
|
53
|
+
::File.exist?(dump_path)
|
54
|
+
end
|
55
|
+
|
56
|
+
def dump_time_uncached
|
57
|
+
dump_exist? ? ::Time.now - ::File.mtime(dump_path) : nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def dump_expired?
|
61
|
+
return false unless dump_time.present?
|
62
|
+
|
63
|
+
dump_time >= DUMP_EXPIRE_TIME
|
64
|
+
end
|
65
|
+
|
66
|
+
def run_dump
|
67
|
+
download_dump
|
68
|
+
rotate_dump
|
69
|
+
move_download_to_final_dest
|
70
|
+
end
|
71
|
+
|
72
|
+
def download_dump
|
73
|
+
infom 'Downloading dump...'
|
74
|
+
dump_command.system!(output_file: download_path)
|
75
|
+
fatal_error "File \"#{download_path}\" not saved" unless ::File.exist?(download_path)
|
76
|
+
fatal_error "File \"#{download_path}\" is empty" if ::File.zero?(download_path)
|
77
|
+
end
|
78
|
+
|
79
|
+
def move_download_to_final_dest
|
80
|
+
::FileUtils.mv(download_path, dump_path)
|
81
|
+
end
|
82
|
+
|
83
|
+
def rotate_dump
|
84
|
+
return unless dump_exist?
|
85
|
+
|
86
|
+
info "Rotating \"#{dump_path}\"..."
|
87
|
+
::Avm::Files::Rotate.new(dump_path).run
|
88
|
+
end
|
89
|
+
|
90
|
+
def download_path_uncached
|
91
|
+
f = ::Tempfile.new('eac_rails_base0_data_dump')
|
92
|
+
path = f.path
|
93
|
+
f.close
|
94
|
+
f.unlink
|
95
|
+
path
|
96
|
+
end
|
97
|
+
|
98
|
+
def run_dump?
|
99
|
+
!dump_exist? || options.fetch('--rewrite') || dump_expired?
|
100
|
+
end
|
101
|
+
|
102
|
+
def dump_command
|
103
|
+
context(:instance).pg.dump_gzip_command
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/avm/tools/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avm-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eac_launcher
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,12 +96,25 @@ files:
|
|
96
96
|
- Gemfile
|
97
97
|
- exe/avm
|
98
98
|
- lib/avm.rb
|
99
|
+
- lib/avm/configs.rb
|
99
100
|
- lib/avm/files.rb
|
100
101
|
- lib/avm/files/rotate.rb
|
102
|
+
- lib/avm/instances.rb
|
103
|
+
- lib/avm/instances/application.rb
|
104
|
+
- lib/avm/instances/base.rb
|
105
|
+
- lib/avm/instances/entries.rb
|
106
|
+
- lib/avm/stereotypes.rb
|
107
|
+
- lib/avm/stereotypes/eac_wordpress_base0/instance.rb
|
108
|
+
- lib/avm/stereotypes/postgresql.rb
|
109
|
+
- lib/avm/stereotypes/postgresql/instance.rb
|
110
|
+
- lib/avm/stereotypes/postgresql/instance_with.rb
|
101
111
|
- lib/avm/tools.rb
|
102
112
|
- lib/avm/tools/git.rb
|
103
113
|
- lib/avm/tools/git/complete_issue.rb
|
104
114
|
- lib/avm/tools/runner.rb
|
115
|
+
- lib/avm/tools/runner/eac_wordpress_base0.rb
|
116
|
+
- lib/avm/tools/runner/eac_wordpress_base0/data.rb
|
117
|
+
- lib/avm/tools/runner/eac_wordpress_base0/data/dump.rb
|
105
118
|
- lib/avm/tools/runner/files.rb
|
106
119
|
- lib/avm/tools/runner/files/rotate.rb
|
107
120
|
- lib/avm/tools/runner/git.rb
|