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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72e6bca15b3f9fb3198690f96bea9840de1d665b
4
- data.tar.gz: 051d24f35141478dbf1c68f2817737bb844a35f1
3
+ metadata.gz: 492814e5564bd831f4a080f5acc257486137ae8b
4
+ data.tar.gz: f5c6c0f9a832176ac36e544c908dc52bc7508eb5
5
5
  SHA512:
6
- metadata.gz: 4d8aa6c0f87c8a4f140fa84e9ef351ddc9f2ce8941df8fb272c40249e2f0e2339312febfad0b5ec5e12253fae7d2835e9c2f4279a81651c8a45bc7498231da84
7
- data.tar.gz: 66a710887de263ffcfe9d6ac6fcb08f05b16c3371d4a8075e26f05eaf40e2f720ca4e24100bb8dbfb89b7f4faebadfbf7068f8c5f931a098db808b506b326a49
6
+ metadata.gz: bb41dd5cbc791b435778dfb94fe6f7bcbdc35c2145e42b4297503d05ce2b4772bb61aeadf0bc0ce3a456d3f06ae661e34ef56623ac7fafd747ce4ce17f0eaea6
7
+ data.tar.gz: '0328471120553b40ddad93553a7edbfde5c8bad300b73bc1ed18429867701432daebc25f7504e8dfc827e52f8587b0b776da1b05dbad7f2da33a699c27007df2'
@@ -0,0 +1,5 @@
1
+ require "metaparticle/version"
2
+ require 'metaparticle/base'
3
+
4
+ module Metaparticle
5
+ end
@@ -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,15 @@
1
+ module Metaparticle
2
+ class DockerBuilder
3
+ def initialize(config)
4
+ @config = config
5
+ end
6
+
7
+ def build
8
+ `docker build -t #{@config.image} .`
9
+ end
10
+
11
+ def push
12
+ `docker push #{@config.image}`
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Metaparticle
2
+ class DockerRunner
3
+ def initialize(config)
4
+ @config = config
5
+ end
6
+ end
7
+ 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
@@ -0,0 +1,3 @@
1
+ module Metaparticle
2
+ VERSION = "0.0.0.3"
3
+ 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.2
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