avm-tools 0.21.0 → 0.22.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 -10
- data/lib/avm/docker.rb +9 -0
- data/lib/avm/docker/container.rb +49 -0
- data/lib/avm/docker/image.rb +50 -0
- data/lib/avm/docker/registry.rb +25 -0
- data/lib/avm/docker/runner.rb +76 -0
- data/lib/avm/executables.rb +4 -0
- data/lib/avm/instances/base.rb +2 -1
- data/lib/avm/instances/base/dockerizable.rb +39 -0
- data/lib/avm/stereotypes/eac_redmine_base0.rb +11 -0
- data/lib/avm/stereotypes/eac_redmine_base0/instance.rb +25 -0
- data/lib/avm/stereotypes/eac_ubuntu_base0/docker_image.rb +19 -0
- data/lib/avm/tools/runner/eac_redmine_base0.rb +34 -0
- data/lib/avm/tools/runner/eac_redmine_base0/docker.rb +14 -0
- data/lib/avm/tools/version.rb +1 -1
- data/template/avm/stereotypes/eac_ubuntu_base0/docker_image/Dockerfile +11 -0
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15042971f9c97791f18e9e663ddc0bc3294280e1efba45d7f14ac3c6af60e63e
|
4
|
+
data.tar.gz: 06ff3ac5fa18b309c36372c52cf551c7e2da7059c716087ab6b82739c7ecc48b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 753715c0040270d6fc3e1cf4cc212bca06397e4dd21312e3d148d1575071272ad7b489cbef53872df3919d29b11220ea82a829e54bf315e4257022ccd639576a
|
7
|
+
data.tar.gz: 59a989fe98205a556e301b8dbe7d5a90f00d075809cd9db6e6a7511b789a256126e43b606431b3344ff632c8a2d61d24cdddd12c380c6822d503c2c9e0ca32f0
|
data/lib/avm.rb
CHANGED
@@ -1,14 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'eac_ruby_utils/require_sub'
|
4
|
+
|
3
5
|
module Avm
|
4
|
-
|
5
|
-
require 'avm/data'
|
6
|
-
require 'avm/executables'
|
7
|
-
require 'avm/git'
|
8
|
-
require 'avm/instances'
|
9
|
-
require 'avm/patches'
|
10
|
-
require 'avm/result'
|
11
|
-
require 'avm/stereotypes'
|
12
|
-
require 'avm/templates'
|
13
|
-
require 'avm/tools'
|
6
|
+
::EacRubyUtils.require_sub(__FILE__)
|
14
7
|
end
|
data/lib/avm/docker.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'avm/executables'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Docker
|
8
|
+
class Container
|
9
|
+
enable_console_speaker
|
10
|
+
common_constructor :instance
|
11
|
+
|
12
|
+
def remove
|
13
|
+
::Avm::Executables.docker.command.append(
|
14
|
+
['rm', '--force', instance.docker_container_name]
|
15
|
+
).system!
|
16
|
+
end
|
17
|
+
|
18
|
+
def run(options = {})
|
19
|
+
infov 'Container name', instance.docker_container_name
|
20
|
+
infov 'Container exist?', instance.docker_container_exist?
|
21
|
+
remove if options[:clear] && instance.docker_container_exist?
|
22
|
+
if instance.docker_container_exist?
|
23
|
+
run_start
|
24
|
+
else
|
25
|
+
run_run
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_run
|
30
|
+
infom "\"docker run #{instance.docker_container_name}...\""
|
31
|
+
::Avm::Executables.docker.command.append(run_run_arguments).system!
|
32
|
+
end
|
33
|
+
|
34
|
+
def run_start
|
35
|
+
infom "\"docker start #{instance.docker_container_name}...\""
|
36
|
+
::Avm::Executables.docker.command.append(run_start_arguments).system!
|
37
|
+
end
|
38
|
+
|
39
|
+
def run_run_arguments
|
40
|
+
['run', '-it', '--name', instance.docker_container_name] + instance.docker_run_arguments +
|
41
|
+
[instance.docker_image.tag]
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_start_arguments
|
45
|
+
['start', '-ai', instance.docker_container_name]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'avm/executables'
|
5
|
+
require 'avm/patches/object/template'
|
6
|
+
|
7
|
+
module Avm
|
8
|
+
module Docker
|
9
|
+
class Image
|
10
|
+
def build(extra_args = [])
|
11
|
+
on_build_dir do
|
12
|
+
template.apply(self, build_dir)
|
13
|
+
run_docker_build(extra_args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def push
|
18
|
+
::Avm::Executables.docker.command.append(['push', tag]).system!
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_entry(path, _options = {})
|
22
|
+
method = path.gsub('.', '_')
|
23
|
+
return send(method) if respond_to?(path, true)
|
24
|
+
|
25
|
+
raise "Method \"#{method}\" not found for entry \"#{path}\""
|
26
|
+
end
|
27
|
+
|
28
|
+
def run(instance)
|
29
|
+
run_run(instance) if container_exist?(instance)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :build_dir
|
35
|
+
|
36
|
+
def run_docker_build(extra_args)
|
37
|
+
::Avm::Executables.docker.command.append(
|
38
|
+
['build', '-t', tag] + extra_args + [build_dir]
|
39
|
+
).system!
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_build_dir
|
43
|
+
@build_dir = ::Dir.mktmpdir
|
44
|
+
yield
|
45
|
+
ensure
|
46
|
+
::FileUtils.rm_rf(@build_dir)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Docker
|
7
|
+
class Registry
|
8
|
+
class << self
|
9
|
+
def default
|
10
|
+
@default ||= new(::Avm.configs.read_entry('docker.registry.name'))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
common_constructor :name
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
name
|
18
|
+
end
|
19
|
+
|
20
|
+
def sub(suffix)
|
21
|
+
self.class.new("#{name}#{suffix}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'avm/docker/registry'
|
6
|
+
|
7
|
+
module Avm
|
8
|
+
module Docker
|
9
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
enable_console_speaker
|
11
|
+
enable_simple_cache
|
12
|
+
|
13
|
+
DOC = <<~DOCOPT
|
14
|
+
Manipulate Docker images.
|
15
|
+
|
16
|
+
Usage:
|
17
|
+
__PROGRAM__ [options] [-B <build-arg>...]
|
18
|
+
__PROGRAM__ -h | --help
|
19
|
+
|
20
|
+
Options:
|
21
|
+
-h --help Show this help.
|
22
|
+
-n --registry-name=<registry-name> Docker registry's name.
|
23
|
+
-p --push Push the image to Docker registry.
|
24
|
+
-r --run Run or start a container with builded image.
|
25
|
+
-B --build-arg=<build-arg> Argument for "docker build".
|
26
|
+
-c --clear Remove container if exist before run.
|
27
|
+
DOCOPT
|
28
|
+
|
29
|
+
def run
|
30
|
+
setup
|
31
|
+
banner
|
32
|
+
build
|
33
|
+
push
|
34
|
+
container_run
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def setup
|
40
|
+
instance.docker_registry = registry
|
41
|
+
end
|
42
|
+
|
43
|
+
def banner
|
44
|
+
infov 'Registry name', registry
|
45
|
+
infov 'Image name', instance.docker_image.tag
|
46
|
+
infov 'Build arguments', build_args
|
47
|
+
end
|
48
|
+
|
49
|
+
def build
|
50
|
+
instance.docker_image.build(build_args)
|
51
|
+
end
|
52
|
+
|
53
|
+
def build_args
|
54
|
+
options.fetch('--build-arg')
|
55
|
+
end
|
56
|
+
|
57
|
+
def push
|
58
|
+
instance.docker_image.push if options.fetch('--push')
|
59
|
+
end
|
60
|
+
|
61
|
+
def container_run
|
62
|
+
instance.docker_container.run(clear: options.fetch('--clear')) if options.fetch('--run')
|
63
|
+
end
|
64
|
+
|
65
|
+
def registry_uncached
|
66
|
+
options.fetch('--registry-name').if_present(::Avm::Docker::Registry.default) do |v|
|
67
|
+
::Avm::Docker::Registry.new(v)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def instance
|
72
|
+
context(:instance)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/avm/executables.rb
CHANGED
data/lib/avm/instances/base.rb
CHANGED
@@ -11,11 +11,12 @@ module Avm
|
|
11
11
|
include ::EacRubyUtils::Listable
|
12
12
|
include ::EacRubyUtils::SimpleCache
|
13
13
|
include ::Avm::Instances::Base::AutoValues
|
14
|
+
include ::Avm::Instances::Base::Dockerizable
|
14
15
|
include ::Avm::Instances::Entries
|
15
16
|
|
16
17
|
lists.add_string :access, :local, :ssh
|
17
18
|
|
18
|
-
ID_PATTERN = /\A([a-
|
19
|
+
ID_PATTERN = /\A([a-z0-9]+(?:\-[a-z0-9]+)*)_(.+)\z/.freeze
|
19
20
|
|
20
21
|
class << self
|
21
22
|
def by_id(id)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/docker/container'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Instances
|
7
|
+
class Base
|
8
|
+
module Dockerizable
|
9
|
+
enable_simple_cache
|
10
|
+
attr_reader :docker_registry
|
11
|
+
|
12
|
+
def docker_registry=(new_value)
|
13
|
+
@docker_registry = new_value
|
14
|
+
reset_cache
|
15
|
+
end
|
16
|
+
|
17
|
+
def docker_container_exist?
|
18
|
+
::Avm::Executables.docker.command.append(
|
19
|
+
['ps', '-qaf', "name=#{docker_container_name}"]
|
20
|
+
).execute!.present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def docker_container_name
|
24
|
+
id
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def docker_container_uncached
|
30
|
+
::Avm::Docker::Container.new(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def docker_image_uncached
|
34
|
+
docker_image_class.new(docker_registry)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/instances/base'
|
4
|
+
require 'avm/stereotypes/eac_ubuntu_base0/docker_image'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Stereotypes
|
8
|
+
module EacRedmineBase0
|
9
|
+
class Instance < ::Avm::Instances::Base
|
10
|
+
def docker_image_class
|
11
|
+
::Avm::Stereotypes::EacUbuntuBase0::DockerImage
|
12
|
+
end
|
13
|
+
|
14
|
+
def docker_run_arguments
|
15
|
+
[
|
16
|
+
'--volume', "#{read_entry(:fs_path)}:/home/myuser/eac_redmine_base0",
|
17
|
+
'--publish', "#{read_entry(:ssh_port)}:22",
|
18
|
+
'--publish', "#{read_entry(:http_port)}:80",
|
19
|
+
'--publish', "#{read_entry(:https_port)}:443"
|
20
|
+
]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'avm/docker/image'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Stereotypes
|
8
|
+
module EacUbuntuBase0
|
9
|
+
class DockerImage < ::Avm::Docker::Image
|
10
|
+
enable_simple_cache
|
11
|
+
common_constructor :registry
|
12
|
+
|
13
|
+
def tag
|
14
|
+
"#{registry.name}:eac_ubuntu_base0"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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_redmine_base0/instance'
|
6
|
+
require 'eac_ruby_utils/require_sub'
|
7
|
+
::EacRubyUtils.require_sub(__FILE__)
|
8
|
+
|
9
|
+
module Avm
|
10
|
+
module Tools
|
11
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
class EacRedmineBase0 < ::EacRubyUtils::Console::DocoptRunner
|
13
|
+
include ::EacRubyUtils::SimpleCache
|
14
|
+
|
15
|
+
DOC = <<~DOCOPT
|
16
|
+
Utilities for EacRedmineBase0 instances.
|
17
|
+
|
18
|
+
Usage:
|
19
|
+
__PROGRAM__ [options] <instance_id> __SUBCOMMANDS__
|
20
|
+
__PROGRAM__ -h | --help
|
21
|
+
|
22
|
+
Options:
|
23
|
+
-h --help Show this screen.
|
24
|
+
DOCOPT
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def instance_uncached
|
29
|
+
::Avm::Stereotypes::EacRedmineBase0::Instance.by_id(options['<instance_id>'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/docker/runner'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Tools
|
7
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
8
|
+
class EacRedmineBase0 < ::EacRubyUtils::Console::DocoptRunner
|
9
|
+
class Docker < ::Avm::Docker::Runner
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/avm/tools/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
FROM ubuntu:bionic
|
2
|
+
RUN apt-get update -y
|
3
|
+
RUN apt-get install -y sudo tzdata
|
4
|
+
RUN /usr/sbin/useradd --shell /bin/bash --home-dir /home/myuser --create-home myuser
|
5
|
+
RUN /bin/echo 'myuser:myuser' | /usr/sbin/chpasswd
|
6
|
+
RUN /bin/chown myuser:myuser /home/myuser -R
|
7
|
+
RUN /bin/echo "myuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/myuser_all_nopasswd && chmod 0440 /etc/sudoers.d/myuser_all_nopasswd
|
8
|
+
USER myuser
|
9
|
+
WORKDIR /home/myuser
|
10
|
+
ENTRYPOINT /bin/bash
|
11
|
+
CMD apt-get update -y && apt-get dist-upgrade -y
|
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.22.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-11-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aranha-parsers
|
@@ -180,6 +180,11 @@ files:
|
|
180
180
|
- lib/avm/data/package/dump.rb
|
181
181
|
- lib/avm/data/package/load.rb
|
182
182
|
- lib/avm/data/unit.rb
|
183
|
+
- lib/avm/docker.rb
|
184
|
+
- lib/avm/docker/container.rb
|
185
|
+
- lib/avm/docker/image.rb
|
186
|
+
- lib/avm/docker/registry.rb
|
187
|
+
- lib/avm/docker/runner.rb
|
183
188
|
- lib/avm/executables.rb
|
184
189
|
- lib/avm/files.rb
|
185
190
|
- lib/avm/files/rotate.rb
|
@@ -210,6 +215,7 @@ files:
|
|
210
215
|
- lib/avm/instances/base/auto_values/source.rb
|
211
216
|
- lib/avm/instances/base/auto_values/system.rb
|
212
217
|
- lib/avm/instances/base/auto_values/web.rb
|
218
|
+
- lib/avm/instances/base/dockerizable.rb
|
213
219
|
- lib/avm/instances/entries.rb
|
214
220
|
- lib/avm/instances/entries/entry_reader.rb
|
215
221
|
- lib/avm/patches.rb
|
@@ -221,9 +227,12 @@ files:
|
|
221
227
|
- lib/avm/stereotypes/eac_rails_base0/apache_host.rb
|
222
228
|
- lib/avm/stereotypes/eac_rails_base0/deploy.rb
|
223
229
|
- lib/avm/stereotypes/eac_rails_base0/instance.rb
|
230
|
+
- lib/avm/stereotypes/eac_redmine_base0.rb
|
231
|
+
- lib/avm/stereotypes/eac_redmine_base0/instance.rb
|
224
232
|
- lib/avm/stereotypes/eac_ubuntu_base0.rb
|
225
233
|
- lib/avm/stereotypes/eac_ubuntu_base0/apache.rb
|
226
234
|
- lib/avm/stereotypes/eac_ubuntu_base0/apache/site.rb
|
235
|
+
- lib/avm/stereotypes/eac_ubuntu_base0/docker_image.rb
|
227
236
|
- lib/avm/stereotypes/eac_webapp_base0.rb
|
228
237
|
- lib/avm/stereotypes/eac_webapp_base0/apache_host.rb
|
229
238
|
- lib/avm/stereotypes/eac_webapp_base0/deploy.rb
|
@@ -244,6 +253,8 @@ files:
|
|
244
253
|
- lib/avm/tools/runner/eac_rails_base0.rb
|
245
254
|
- lib/avm/tools/runner/eac_rails_base0/apache_host.rb
|
246
255
|
- lib/avm/tools/runner/eac_rails_base0/deploy.rb
|
256
|
+
- lib/avm/tools/runner/eac_redmine_base0.rb
|
257
|
+
- lib/avm/tools/runner/eac_redmine_base0/docker.rb
|
247
258
|
- lib/avm/tools/runner/eac_wordpress_base0.rb
|
248
259
|
- lib/avm/tools/runner/eac_wordpress_base0/apache_host.rb
|
249
260
|
- lib/avm/tools/runner/eac_wordpress_base0/data.rb
|
@@ -261,6 +272,7 @@ files:
|
|
261
272
|
- lib/avm/tools/runner/git/issue/complete.rb
|
262
273
|
- lib/avm/tools/version.rb
|
263
274
|
- template/avm/stereotypes/eac_rails_base0/deploy/config/database.yml.template
|
275
|
+
- template/avm/stereotypes/eac_ubuntu_base0/docker_image/Dockerfile
|
264
276
|
- template/avm/stereotypes/eac_webapp_base0/apache_host/no_ssl.conf
|
265
277
|
- template/avm/stereotypes/eac_wordpress_base0/deploy/wp-config.php.template
|
266
278
|
homepage:
|