indocker 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.rspec +1 -0
- data/Gemfile.lock +12 -0
- data/bin/indocker +9 -0
- data/indocker.gemspec +7 -2
- data/lib/indocker/application_initializer.rb +30 -0
- data/lib/indocker/cli.rb +17 -0
- data/lib/indocker/configs/config.rb +76 -0
- data/lib/indocker/configs/config_factory.rb +36 -0
- data/lib/indocker/configs/locator.rb +23 -0
- data/lib/indocker/container/container_dsl.rb +60 -0
- data/lib/indocker/container/container_evaluator.rb +13 -0
- data/lib/indocker/container/container_manager.rb +111 -0
- data/lib/indocker/container/container_metadata.rb +107 -0
- data/lib/indocker/container/container_metadata_factory.rb +27 -0
- data/lib/indocker/container/container_metadata_repository.rb +27 -0
- data/lib/indocker/directives/base.rb +21 -0
- data/lib/indocker/directives/container_directives/base.rb +19 -0
- data/lib/indocker/directives/container_directives/depends_on.rb +7 -0
- data/lib/indocker/directives/container_directives/env_file.rb +7 -0
- data/lib/indocker/directives/container_directives/expose.rb +7 -0
- data/lib/indocker/directives/container_directives/from.rb +12 -0
- data/lib/indocker/directives/container_directives/network.rb +12 -0
- data/lib/indocker/directives/container_directives/ports.rb +8 -0
- data/lib/indocker/directives/container_directives/ready.rb +16 -0
- data/lib/indocker/directives/container_directives_runner.rb +46 -0
- data/lib/indocker/directives/docker_directives/base.rb +15 -0
- data/lib/indocker/directives/docker_directives/cmd.rb +15 -0
- data/lib/indocker/directives/docker_directives/copy.rb +27 -0
- data/lib/indocker/directives/docker_directives/entrypoint.rb +15 -0
- data/lib/indocker/directives/docker_directives/env.rb +5 -0
- data/lib/indocker/directives/docker_directives/from.rb +30 -0
- data/lib/indocker/directives/docker_directives/run.rb +5 -0
- data/lib/indocker/directives/docker_directives/workdir.rb +5 -0
- data/lib/indocker/directives/image_directives_runner.rb +120 -0
- data/lib/indocker/directives/partial.rb +13 -0
- data/lib/indocker/directives/prepare_directives/base.rb +6 -0
- data/lib/indocker/directives/prepare_directives/docker_cp.rb +16 -0
- data/lib/indocker/docker_api.rb +180 -0
- data/lib/indocker/dsl_context.rb +17 -0
- data/lib/indocker/envs/env_metadata.rb +35 -0
- data/lib/indocker/envs/loader.rb +19 -0
- data/lib/indocker/envs/manager.rb +30 -0
- data/lib/indocker/errors.rb +17 -0
- data/lib/indocker/handlers/base.rb +13 -0
- data/lib/indocker/handlers/run_container.rb +29 -0
- data/lib/indocker/image/image_builder.rb +39 -0
- data/lib/indocker/image/image_dependencies_manager.rb +43 -0
- data/lib/indocker/image/image_dsl.rb +69 -0
- data/lib/indocker/image/image_evaluator.rb +21 -0
- data/lib/indocker/image/image_metadata.rb +50 -0
- data/lib/indocker/image/image_metadata_factory.rb +30 -0
- data/lib/indocker/image/image_metadata_repository.rb +30 -0
- data/lib/indocker/networks/network_metadata.rb +9 -0
- data/lib/indocker/networks/network_metadata_factory.rb +9 -0
- data/lib/indocker/networks/network_metadata_repository.rb +34 -0
- data/lib/indocker/partial/partial_metadata.rb +8 -0
- data/lib/indocker/partial/partial_metadata_repository.rb +26 -0
- data/lib/indocker/utils/ioc_container.rb +17 -0
- data/lib/indocker/utils/logger.rb +62 -0
- data/lib/indocker/utils/logger_factory.rb +12 -0
- data/lib/indocker/utils/registry_authenticator.rb +19 -0
- data/lib/indocker/utils/render_namespace.rb +11 -0
- data/lib/indocker/utils/render_util.rb +15 -0
- data/lib/indocker/utils/string_utils.rb +11 -0
- data/lib/indocker/utils/tar_helper.rb +40 -0
- data/lib/indocker/utils/test_logger_factory.rb +9 -0
- data/lib/indocker/version.rb +2 -2
- data/lib/indocker.rb +123 -1
- data/spec/example/.indocker/config.rb +23 -0
- data/spec/example/.indocker/images_and_containers.rb +25 -0
- data/spec/example/assets/index.css +1 -0
- data/spec/example/assets/index.js +1 -0
- data/spec/indocker/configs/config_factory_spec.rb +18 -0
- data/spec/indocker/configs/config_spec.rb +37 -0
- data/spec/indocker/container/container_manager_spec.rb +230 -0
- data/spec/indocker/directives/image_directives_runner_spec.rb +121 -0
- data/spec/indocker/handlers/run_container_spec.rb +107 -0
- data/spec/indocker/image/image_builder_spec.rb +115 -0
- data/spec/indocker/image/image_evaluator_spec.rb +65 -0
- data/spec/indocker/utils/docker_api_spec.rb +87 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/tmp/indocker_list_container_files/deeper/example3.txt +1 -0
- data/spec/tmp/indocker_list_container_files/deeper/example4.txt +1 -0
- data/spec/tmp/indocker_list_container_files/example1.txt +1 -0
- data/spec/tmp/indocker_list_container_files/example2.txt +1 -0
- metadata +159 -6
- data/spec/.gitkeep +0 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module Indocker::Handlers
|
2
|
+
class Base
|
3
|
+
def perform(options)
|
4
|
+
env = options.delete(:env)
|
5
|
+
|
6
|
+
application_initializer.init_app(options[:current_path], env: env)
|
7
|
+
|
8
|
+
self.method(:handle).call(options)
|
9
|
+
rescue Docker::Error::ClientError => e
|
10
|
+
logger.error(e.message)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Indocker::Handlers::RunContainer < Indocker::Handlers::Base
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :run_container_handler
|
5
|
+
|
6
|
+
inject :container_manager
|
7
|
+
inject :container_metadata_repository
|
8
|
+
inject :image_builder
|
9
|
+
inject :application_initializer
|
10
|
+
inject :docker_api
|
11
|
+
inject :logger
|
12
|
+
|
13
|
+
def handle(name:, current_path:)
|
14
|
+
name = name.to_s
|
15
|
+
|
16
|
+
container_metadata = container_metadata_repository.get_by_name(name)
|
17
|
+
|
18
|
+
if docker_api.container_exists?(name)
|
19
|
+
container_manager.stop(name)
|
20
|
+
container_manager.delete(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
image_builder.build(container_metadata.repo, tag: container_metadata.tag)
|
24
|
+
|
25
|
+
container_manager.create(name)
|
26
|
+
|
27
|
+
container_manager.start(name)
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Indocker::ImageBuilder
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :image_builder
|
5
|
+
|
6
|
+
inject :image_metadata_repository
|
7
|
+
inject :image_dependencies_manager
|
8
|
+
inject :image_directives_runner
|
9
|
+
inject :image_evaluator
|
10
|
+
inject :docker_api
|
11
|
+
inject :logger
|
12
|
+
|
13
|
+
def build(repo, tag: Indocker::ImageMetadata::DEFAULT_TAG)
|
14
|
+
image_metadata = image_metadata_repository.find_by_repo(repo, tag: tag)
|
15
|
+
|
16
|
+
FileUtils.mkdir_p(image_metadata.build_dir)
|
17
|
+
|
18
|
+
image_dependencies_manager.get_dependencies!(image_metadata).each do |dependency_metadata|
|
19
|
+
build(dependency_metadata.repo, tag: dependency_metadata.tag)
|
20
|
+
end
|
21
|
+
|
22
|
+
image_directives_runner.run_all(image_metadata.prepare_directives)
|
23
|
+
|
24
|
+
File.open(File.join(image_metadata.build_dir, Indocker::DOCKERFILE_NAME), 'w') do |f|
|
25
|
+
f.puts image_metadata.build_directives.map(&:to_s)
|
26
|
+
image_metadata.build_directives.map(&:to_s).each {|d| logger.debug d}
|
27
|
+
end
|
28
|
+
|
29
|
+
docker_api.build_from_dir(
|
30
|
+
repo: image_metadata.repo,
|
31
|
+
tag: image_metadata.tag,
|
32
|
+
build_dir: image_metadata.build_dir.to_s
|
33
|
+
) { |log| logger.info(log) }
|
34
|
+
ensure
|
35
|
+
image_metadata = image_metadata_repository.find_by_repo(repo, tag: tag)
|
36
|
+
|
37
|
+
FileUtils.rm_rf(image_metadata.build_dir)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Indocker::ImageDependenciesManager
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :image_dependencies_manager
|
5
|
+
|
6
|
+
inject :image_metadata_repository
|
7
|
+
inject :container_metadata_repository
|
8
|
+
inject :image_evaluator
|
9
|
+
|
10
|
+
def get_dependencies!(image_metadata)
|
11
|
+
check_circular_dependencies!(image_metadata)
|
12
|
+
|
13
|
+
get_dependencies(image_metadata)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def check_circular_dependencies!(image_metadata, used_images = [])
|
19
|
+
raise Indocker::Errors::CircularImageDependency if used_images.include?(image_metadata.full_name)
|
20
|
+
|
21
|
+
used_images.push(image_metadata.full_name)
|
22
|
+
|
23
|
+
get_dependencies(image_metadata).each do |dependency|
|
24
|
+
check_circular_dependencies!(dependency, used_images)
|
25
|
+
end
|
26
|
+
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_dependencies(image_metadata)
|
31
|
+
container_dependencies = image_metadata.docker_cp_directives.map do |c|
|
32
|
+
container = container_metadata_repository.get_by_name(c.container_name)
|
33
|
+
|
34
|
+
image_metadata_repository.find_by_repo(container.repo, tag: container.tag)
|
35
|
+
end
|
36
|
+
|
37
|
+
return container_dependencies if image_metadata.dockerhub_image?
|
38
|
+
|
39
|
+
from_image_dependency = image_metadata_repository.find_by_repo(image_metadata.from_repo, tag: image_metadata.from_tag)
|
40
|
+
|
41
|
+
container_dependencies.push from_image_dependency
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
class Indocker::ImageDSL
|
2
|
+
attr_reader :directives
|
3
|
+
|
4
|
+
def initialize(context)
|
5
|
+
@context = context
|
6
|
+
@directives = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(method, *args)
|
10
|
+
@context.send(method)
|
11
|
+
rescue
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_arg(key, value)
|
16
|
+
@context.set_value(key, value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def partial(name, opts = {})
|
20
|
+
@directives << Indocker::Directives::Partial.new(name, @context, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def from(*args)
|
24
|
+
@directives << Indocker::DockerDirectives::From.new(*args)
|
25
|
+
end
|
26
|
+
|
27
|
+
def workdir(*args)
|
28
|
+
@directives << Indocker::DockerDirectives::Workdir.new(*args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def run(*args)
|
32
|
+
@directives << Indocker::DockerDirectives::Run.new(*args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def cmd(*args)
|
36
|
+
@directives << Indocker::DockerDirectives::Cmd.new(*args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy(copy_actions)
|
40
|
+
@directives << Indocker::DockerDirectives::Copy.new(
|
41
|
+
context: @context,
|
42
|
+
copy_actions: copy_actions
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def copy_compile(copy_actions)
|
47
|
+
@directives << Indocker::DockerDirectives::Copy.new(
|
48
|
+
context: @context,
|
49
|
+
copy_actions: copy_actions,
|
50
|
+
compile: true
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
def entrypoint(*args)
|
55
|
+
@directives << Indocker::DockerDirectives::Entrypoint.new(*args)
|
56
|
+
end
|
57
|
+
|
58
|
+
def env(*args)
|
59
|
+
@directives << Indocker::DockerDirectives::Env.new(args)
|
60
|
+
end
|
61
|
+
|
62
|
+
def before_build(&block)
|
63
|
+
instance_exec &block
|
64
|
+
end
|
65
|
+
|
66
|
+
def docker_cp(container_name, &block)
|
67
|
+
@directives << Indocker::PrepareDirectives::DockerCp.new(container_name, @context.build_dir, &block)
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Indocker::ImageEvaluator
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :image_evaluator
|
5
|
+
inject :partial_metadata_repository
|
6
|
+
|
7
|
+
def evaluate(context, &block)
|
8
|
+
image_dsl = Indocker::ImageDSL.new(context)
|
9
|
+
|
10
|
+
image_dsl.instance_eval(&block)
|
11
|
+
|
12
|
+
image_dsl.directives
|
13
|
+
.map do |directive|
|
14
|
+
next directive if !directive.partial?
|
15
|
+
|
16
|
+
partial = partial_metadata_repository.find_by_name(directive.name)
|
17
|
+
evaluate(directive.context, &partial.definition)
|
18
|
+
end
|
19
|
+
.flatten
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Indocker::ImageMetadata
|
2
|
+
DEFAULT_TAG = 'latest'
|
3
|
+
|
4
|
+
attr_reader :repo, :tag, :directives, :build_dir
|
5
|
+
|
6
|
+
def initialize(repo:, tag:, directives:, build_dir:)
|
7
|
+
@repo = repo
|
8
|
+
@tag = tag
|
9
|
+
@directives = directives
|
10
|
+
@build_dir = build_dir
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_name
|
14
|
+
"#{repo}:#{tag}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def full_name_with_registry
|
18
|
+
"#{Indocker.config.registry}/#{local_full_name}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def prepare_directives
|
22
|
+
directives.select {|d| d.prepare_directive?}
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_directives
|
26
|
+
directives.select {|d| d.build_directive?}
|
27
|
+
end
|
28
|
+
|
29
|
+
def docker_cp_directives
|
30
|
+
directives.select {|d| d.is_a?(Indocker::PrepareDirectives::DockerCp)}
|
31
|
+
end
|
32
|
+
|
33
|
+
def from_repo
|
34
|
+
from_directive.repo
|
35
|
+
end
|
36
|
+
|
37
|
+
def from_tag
|
38
|
+
from_directive.tag
|
39
|
+
end
|
40
|
+
|
41
|
+
def dockerhub_image?
|
42
|
+
from_directive.dockerhub_image?
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def from_directive
|
48
|
+
@directives.detect {|c| c.instance_of?(Indocker::DockerDirectives::From)}
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Indocker::ImageMetadataFactory
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :image_metadata_factory
|
5
|
+
|
6
|
+
inject :image_evaluator
|
7
|
+
inject :docker_api
|
8
|
+
inject :config
|
9
|
+
|
10
|
+
def create(repo, tag: Indocker::ImageMetadata::DEFAULT_TAG, &definition)
|
11
|
+
context = Indocker::DSLContext.new(
|
12
|
+
build_dir: build_dir(repo),
|
13
|
+
root_dir: config.root
|
14
|
+
)
|
15
|
+
directives = image_evaluator.evaluate(context, &definition)
|
16
|
+
|
17
|
+
Indocker::ImageMetadata.new(
|
18
|
+
repo: repo.intern,
|
19
|
+
tag: tag.intern,
|
20
|
+
directives: directives,
|
21
|
+
build_dir: build_dir(repo)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def build_dir(name)
|
28
|
+
Pathname.new File.join(config.root, Indocker::BUILD_DIR, name.to_s)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Indocker::ImageMetadataRepository
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :image_metadata_repository
|
5
|
+
|
6
|
+
def put(image_metadata)
|
7
|
+
all.push(image_metadata)
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_by_repo(repo, tag: Indocker::ImageMetadata::DEFAULT_TAG)
|
11
|
+
image_metadata = all.detect { |im| im.repo == repo.intern and im.tag == tag.intern }
|
12
|
+
raise Indocker::Errors::ImageIsNotDefined, "#{repo}:#{tag}" if image_metadata.nil?
|
13
|
+
|
14
|
+
image_metadata
|
15
|
+
end
|
16
|
+
|
17
|
+
def clear
|
18
|
+
@all = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def all
|
22
|
+
@all ||= []
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(method, **args)
|
26
|
+
tag = args[:tag] || Indocker::ImageMetadata::DEFAULT_TAG
|
27
|
+
|
28
|
+
find_by_repo(method, tag: tag)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Indocker::Networks::NetworkMetadataRepository
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :network_metadata_repository
|
5
|
+
|
6
|
+
def put(network_metadata)
|
7
|
+
if all.any? {|n| n.name == network_metadata.name}
|
8
|
+
raise Indocker::Errors::NetworkAlreadyDefined, network_metadata.name
|
9
|
+
end
|
10
|
+
|
11
|
+
all.push(network_metadata)
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_by_name(name)
|
15
|
+
network_metadata = @all.detect {|network| network.name == name.to_s}
|
16
|
+
raise Indocker::Errors::NetworkIsNotDefined unless network_metadata
|
17
|
+
|
18
|
+
network_metadata
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear
|
22
|
+
@all = []
|
23
|
+
end
|
24
|
+
|
25
|
+
def all
|
26
|
+
@all ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(method)
|
30
|
+
find_by_name(method)
|
31
|
+
rescue
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Indocker::PartialMetadataRepository
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :partial_metadata_repository
|
5
|
+
|
6
|
+
def put(partial_metadata)
|
7
|
+
all.push(partial_metadata)
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_by_name(name)
|
11
|
+
partial = all.detect do |p|
|
12
|
+
p.name == name
|
13
|
+
end
|
14
|
+
raise Indocker::Errors::PartialIsNotDefined, name if partial.nil?
|
15
|
+
|
16
|
+
partial
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear
|
20
|
+
@all = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def all
|
24
|
+
@all ||= []
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'smart_ioc'
|
2
|
+
|
3
|
+
class IocContainer
|
4
|
+
class << self
|
5
|
+
def [](meth, *args)
|
6
|
+
SmartIoC::Container.get_instance.get_bean(meth, *args)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.method_missing(meth, *args, &block)
|
11
|
+
SmartIoC::Container.get_instance.get_bean(meth, *args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def ioc
|
16
|
+
IocContainer
|
17
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'colorize'
|
3
|
+
|
4
|
+
class Indocker::Logger < Logger
|
5
|
+
def initialize(*)
|
6
|
+
super
|
7
|
+
@formatter = IndockerLoggerFormatter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def clear
|
11
|
+
# do nothing
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
class Indocker::TestLogger < Indocker::Logger
|
17
|
+
attr_reader :strio
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@strio = StringIO.new
|
21
|
+
super(@strio)
|
22
|
+
end
|
23
|
+
|
24
|
+
def messages
|
25
|
+
@strio.string.split("\n")
|
26
|
+
end
|
27
|
+
|
28
|
+
def clear
|
29
|
+
@strio.string.clear
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class IndockerLoggerFormatter
|
34
|
+
DEBUG = 'DEBUG'
|
35
|
+
ERROR = 'ERROR'
|
36
|
+
FATAL = 'FATAL'
|
37
|
+
WARN = 'WARN'
|
38
|
+
INFO = 'INFO'
|
39
|
+
|
40
|
+
def call(severity, datetime, progname, msg)
|
41
|
+
"#{colorize_log_level(severity)}: #{msg}\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def colorize_log_level(severity)
|
47
|
+
case severity
|
48
|
+
when DEBUG
|
49
|
+
severity.colorize(:grey)
|
50
|
+
when ERROR
|
51
|
+
severity.colorize(:red)
|
52
|
+
when FATAL
|
53
|
+
severity.colorize(:dark_red)
|
54
|
+
when WARN
|
55
|
+
severity.colorize(:white)
|
56
|
+
when INFO
|
57
|
+
severity.colorize(:green)
|
58
|
+
else
|
59
|
+
severity.colorize(:white)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Indocker::RegistryAvaliabilityChecker
|
2
|
+
include SmartIoC::Iocify
|
3
|
+
|
4
|
+
bean :registry_authenticator
|
5
|
+
|
6
|
+
inject :config
|
7
|
+
inject :docker_api
|
8
|
+
|
9
|
+
def authenticate!
|
10
|
+
docker_api.authenticate!(
|
11
|
+
serveraddress: config.docker.registry,
|
12
|
+
username: config.docker.username,
|
13
|
+
email: config.docker.email,
|
14
|
+
password: config.docker.password
|
15
|
+
)
|
16
|
+
rescue Docker::Error::AuthenticationError
|
17
|
+
raise Indocker::Errors::DockerRegistryAuthenticationError
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Indocker::Utils
|
4
|
+
class RenderUtil
|
5
|
+
include SmartIoC::Iocify
|
6
|
+
|
7
|
+
bean :render_util
|
8
|
+
|
9
|
+
def render(template, locals)
|
10
|
+
namespace = Indocker::Utils::RenderNamespace.new(locals)
|
11
|
+
|
12
|
+
ERB.new(template).result(namespace.get_binding)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubygems/package'
|
3
|
+
require 'zlib'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
class Indocker::TarHelper
|
7
|
+
include SmartIoC::Iocify
|
8
|
+
|
9
|
+
bean :tar_helper
|
10
|
+
|
11
|
+
def untar(io:, destination:, ignore_wrap_directory: false)
|
12
|
+
files_list = []
|
13
|
+
|
14
|
+
Gem::Package::TarReader.new io do |tar|
|
15
|
+
tar.each do |tarfile|
|
16
|
+
if ignore_wrap_directory
|
17
|
+
tarfile_full_name = tarfile.full_name.split('/')[1..-1].join('/')
|
18
|
+
else
|
19
|
+
tarfile_full_name = tarfile.full_name
|
20
|
+
end
|
21
|
+
|
22
|
+
destination_file = File.join destination, tarfile_full_name
|
23
|
+
|
24
|
+
if tarfile.directory?
|
25
|
+
FileUtils.mkdir_p destination_file
|
26
|
+
else
|
27
|
+
files_list.push(tarfile_full_name)
|
28
|
+
|
29
|
+
destination_directory = File.dirname(destination_file)
|
30
|
+
FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory)
|
31
|
+
File.open destination_file, "wb" do |f|
|
32
|
+
f.print tarfile.read
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
files_list
|
39
|
+
end
|
40
|
+
end
|
data/lib/indocker/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = '0.0.
|
1
|
+
module Indocker
|
2
|
+
VERSION = '0.0.1'.freeze
|
3
3
|
end
|