metaparticle 0.0.0.2 → 0.0.0.3
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/metaparticle.rb +5 -0
- data/lib/metaparticle/base.rb +79 -0
- data/lib/metaparticle/docker.rb +26 -0
- data/lib/metaparticle/docker_builder.rb +15 -0
- data/lib/metaparticle/docker_runner.rb +7 -0
- data/lib/metaparticle/metaparticle_runner.rb +48 -0
- data/lib/metaparticle/version.rb +3 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 492814e5564bd831f4a080f5acc257486137ae8b
|
4
|
+
data.tar.gz: f5c6c0f9a832176ac36e544c908dc52bc7508eb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb41dd5cbc791b435778dfb94fe6f7bcbdc35c2145e42b4297503d05ce2b4772bb61aeadf0bc0ce3a456d3f06ae661e34ef56623ac7fafd747ce4ce17f0eaea6
|
7
|
+
data.tar.gz: '0328471120553b40ddad93553a7edbfde5c8bad300b73bc1ed18429867701432daebc25f7504e8dfc827e52f8587b0b776da1b05dbad7f2da33a699c27007df2'
|
data/lib/metaparticle.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require "ostruct"
|
2
|
+
require "metaparticle/docker"
|
3
|
+
require "metaparticle/docker_builder"
|
4
|
+
require "metaparticle/docker_runner"
|
5
|
+
require "metaparticle/metaparticle_runner"
|
6
|
+
|
7
|
+
module Metaparticle
|
8
|
+
class Base
|
9
|
+
def initialize(app, *args, &block)
|
10
|
+
@app = app
|
11
|
+
if block_given?
|
12
|
+
if block.arity == 1
|
13
|
+
block.call(self)
|
14
|
+
else
|
15
|
+
instance_eval(&block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
@app.call(env)
|
22
|
+
end
|
23
|
+
|
24
|
+
def containerize(&block)
|
25
|
+
@config = OpenStruct.new(block.call)
|
26
|
+
run!
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def write_dockerfile
|
31
|
+
dockerfile = <<-DOCKERFILE
|
32
|
+
FROM ruby:2.4-alpine
|
33
|
+
|
34
|
+
RUN mkdir -p /#{@config.name}
|
35
|
+
WORKDIR /#{@config.name}
|
36
|
+
|
37
|
+
COPY Gemfile /#{@config.name}/
|
38
|
+
COPY Gemfile.lock /#{@config.name}/
|
39
|
+
RUN bundle install
|
40
|
+
|
41
|
+
COPY . /#{@config.name}/
|
42
|
+
CMD rackup
|
43
|
+
DOCKERFILE
|
44
|
+
File.open("Dockerfile", "w") do |f|
|
45
|
+
f.write(dockerfile)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def docker
|
50
|
+
@docker ||= Docker.new
|
51
|
+
end
|
52
|
+
|
53
|
+
def builder
|
54
|
+
klass = @config.builder || 'docker'
|
55
|
+
@builder ||= classify("#{klass}_builder").new(@config)
|
56
|
+
end
|
57
|
+
|
58
|
+
def runner
|
59
|
+
klass = @config.runner || 'docker'
|
60
|
+
@runner ||= classify("#{klass}_runner").new(@config)
|
61
|
+
end
|
62
|
+
|
63
|
+
def classify(name)
|
64
|
+
Object.const_get("Metaparticle::"+name.split('_').collect!{ |w| w.capitalize }.join)
|
65
|
+
end
|
66
|
+
|
67
|
+
def run!
|
68
|
+
if docker.in_docker_container?
|
69
|
+
puts "in container..."
|
70
|
+
end
|
71
|
+
@config.image = "#{@config.repository}/#{@config.name}"
|
72
|
+
write_dockerfile
|
73
|
+
builder.build
|
74
|
+
builder.push
|
75
|
+
runner.run
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Metaparticle
|
2
|
+
class Docker
|
3
|
+
def in_docker_container?
|
4
|
+
if ENV['METAPARTICLE_IN_CONTAINER'] == "true"
|
5
|
+
return true
|
6
|
+
end
|
7
|
+
|
8
|
+
# Using same hack to work on macOS
|
9
|
+
begin
|
10
|
+
info = File.readlines('/proc/1/cgroup')
|
11
|
+
|
12
|
+
# horribly ineffient, can do this better
|
13
|
+
if !info.select {|line| line =~ /docker/}.empty?
|
14
|
+
return true
|
15
|
+
end
|
16
|
+
if !info.select {|line| line =~ /kubepods/}.empty?
|
17
|
+
return true
|
18
|
+
end
|
19
|
+
rescue
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Metaparticle
|
4
|
+
class MetaparticleRunner
|
5
|
+
def initialize(config)
|
6
|
+
@config = config
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
options = {
|
11
|
+
name: @config.name,
|
12
|
+
guid: 1234567,
|
13
|
+
services: [
|
14
|
+
{
|
15
|
+
name: @config.name,
|
16
|
+
replicas: @config.replicas,
|
17
|
+
containers: [
|
18
|
+
{
|
19
|
+
image: @config.image
|
20
|
+
}
|
21
|
+
],
|
22
|
+
ports: @config.ports.map {|p| {number: p}}
|
23
|
+
}
|
24
|
+
],
|
25
|
+
serve: {
|
26
|
+
name: @config.name
|
27
|
+
}
|
28
|
+
}
|
29
|
+
if @config.public
|
30
|
+
options[:serve][:public] = true
|
31
|
+
end
|
32
|
+
|
33
|
+
create_directory
|
34
|
+
|
35
|
+
File.open(".metaparticle/service.json", "w") do |f|
|
36
|
+
f.write(options.to_json)
|
37
|
+
end
|
38
|
+
|
39
|
+
`mp-compiler -f .metaparticle/service.json'`
|
40
|
+
`mp-compiler -f .metaparticle/service.json --deploy=false --attach=true'`
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def create_directory
|
45
|
+
FileUtils::mkdir_p('.metaparticle')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metaparticle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.0.
|
4
|
+
version: 0.0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Hein
|
@@ -59,7 +59,14 @@ email:
|
|
59
59
|
executables: []
|
60
60
|
extensions: []
|
61
61
|
extra_rdoc_files: []
|
62
|
-
files:
|
62
|
+
files:
|
63
|
+
- lib/metaparticle.rb
|
64
|
+
- lib/metaparticle/base.rb
|
65
|
+
- lib/metaparticle/docker.rb
|
66
|
+
- lib/metaparticle/docker_builder.rb
|
67
|
+
- lib/metaparticle/docker_runner.rb
|
68
|
+
- lib/metaparticle/metaparticle_runner.rb
|
69
|
+
- lib/metaparticle/version.rb
|
63
70
|
homepage: https://metaparticle.io/
|
64
71
|
licenses:
|
65
72
|
- MIT
|