docker_nginx_proxy 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fe16f18b258883db49248859c920ab6d8179961f
4
+ data.tar.gz: f412d145251808cf66dd3df6640ff48971a6e37a
5
+ SHA512:
6
+ metadata.gz: ca661b59e1bc1a4aeeeff997ef603f4b80b7b4e270cc8ffea2c936f3c33f6f31e66c00d4c907ace6ee8854ff03da2424b4289883c706cdbbf85923c677e5de9a
7
+ data.tar.gz: 2473d7a8500a94da2d9b724ab4dfbae66dd173c5be52ab35b6e165b3ba448d15161bd8e46d2e266d873a531b625cf96150085b3fcc6248250c21e32ee7a249ac
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
+ require 'docker_proxy'
5
+
6
+ DockerNginxProxy::Cli.run(ARGV)
@@ -0,0 +1,28 @@
1
+ module DockerNginxProxy
2
+ class Cli < Clamp::Command
3
+
4
+ parameter "NAME", "docker container name", :attribute_name => :name
5
+ parameter "MAPPING ...", "domain:port=port mapping", :attribute_name => :encoded_mappings
6
+
7
+ def execute
8
+
9
+ docker_port_mappings = Docker.new.get_mappings(name)
10
+ mappings = _convert_mapping_to_hash(encoded_mappings)
11
+ mappings.map do |domain_port, container_port|
12
+ docker_port = docker_port_mappings[container_port]
13
+ raise "No docker port found for container port #{container_port}. Mappings: #{docker_port_mappings}" unless docker_port
14
+ mappings[domain_port] = docker_port
15
+ end
16
+ Nginx.new.install_proxy(name, mappings)
17
+ end
18
+
19
+ def _convert_mapping_to_hash(encoded_mappings)
20
+ mappings = {}
21
+ encoded_mappings.each do |encoded_mapping|
22
+ domain_port, container_port = encoded_mapping.split('=', 2)
23
+ mappings[domain_port] = container_port.to_i
24
+ end
25
+ mappings
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ module DockerNginxProxy
2
+ class Docker
3
+
4
+ def get_mappings(container_name)
5
+ output = `docker port #{container_name}`
6
+ lines = output.split("\n")
7
+ mappings = {}
8
+ lines.map do |line|
9
+ private_address, public_address = line.split(' -> ')
10
+ private_port, protocol = private_address.split('/')
11
+ public_ip, public_port = public_address.split(':')
12
+ mappings[private_port.to_i] = public_port.to_i
13
+ end
14
+ mappings
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ module DockerNginxProxy
2
+ class Nginx
3
+
4
+ def install_proxy(name, mapping)
5
+ content = generate_proxy_config(mapping)
6
+ path = '/etc/nginx/sites-available/' + name
7
+ puts content
8
+ #File.write(path, content)
9
+ end
10
+
11
+ def generate_proxy_config(mapping)
12
+ content = ''
13
+ mapping.each do |domain_port, docker_port|
14
+ domain, port = domain_port.split(':')
15
+ port ||= 80
16
+ content += generate_proxy_config_block(domain, port, docker_port)
17
+ end
18
+ content
19
+ end
20
+
21
+ def generate_proxy_config_block(domain, port, docker_port)
22
+ content = <<EOD
23
+ server {
24
+ listen {{port}};
25
+ server_name {{server_name}};
26
+
27
+ location / {
28
+ proxy_pass localhost:{{target_port}};
29
+ }
30
+ }
31
+ EOD
32
+ Mustache.render(content, :port => port, :server_name => domain, :target_port => docker_port)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module DockerNginxProxy
2
+ require 'clamp'
3
+ require 'mustache'
4
+ require 'docker_nginx_proxy/nginx'
5
+ require 'docker_nginx_proxy/docker'
6
+ require 'docker_nginx_proxy/cli'
7
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docker_nginx_proxy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - tomasz@durka.pl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: clamp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mustache
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.99.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.99.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ description:
70
+ email: tomasz@durka.pl
71
+ executables:
72
+ - docker-nginx-proxy
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - bin/docker-nginx-proxy
77
+ - lib/docker_nginx_proxy/cli.rb
78
+ - lib/docker_nginx_proxy/docker.rb
79
+ - lib/docker_nginx_proxy/nginx.rb
80
+ - lib/docker_proxy.rb
81
+ homepage:
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.2.2
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Docker/nginx proxy config generator
105
+ test_files: []