From 7864d5b6a21913918dabfe842d218629f1f783f9 Mon Sep 17 00:00:00 2001
From: Philippe PITTOLI
Date: Sun, 27 Oct 2019 22:13:40 +0100
Subject: [PATCH 1/5] first attempt at adding the nginx service
---
services/nginx.spec | 7 +++++++
services/www.spec | 5 +++++
src/gen-config.cr | 13 +++++++++++++
templates/nginx.conf.j2 | 36 ++++++++++++++++++++++++++++++++++++
4 files changed, 61 insertions(+)
create mode 100644 services/nginx.spec
create mode 100644 services/www.spec
create mode 100644 templates/nginx.conf.j2
diff --git a/services/nginx.spec b/services/nginx.spec
new file mode 100644
index 0000000..0938bde
--- /dev/null
+++ b/services/nginx.spec
@@ -0,0 +1,7 @@
+command: nginx -c ${SERVICE_ROOT}/nginx.conf
+provides: www
+
+#%directory ${SERVICE_ROOT}/
+# name: working directory
+
+%configuration nginx.conf ${SERVICE_ROOT}/nginx.conf
diff --git a/services/www.spec b/services/www.spec
new file mode 100644
index 0000000..4362cdb
--- /dev/null
+++ b/services/www.spec
@@ -0,0 +1,5 @@
+command: echo "coucou"
+consumes: www
+
+%directory ${SERVICE_ROOT}/
+ name: data directory
diff --git a/src/gen-config.cr b/src/gen-config.cr
index 5ea81c1..3047ef0 100644
--- a/src/gen-config.cr
+++ b/src/gen-config.cr
@@ -50,6 +50,7 @@ class GenConfig::Context
def generate(template, target : String, options : Hash(String, Variables))
ServiceDefinition.load SERVICES_DIRECTORY
Service.load RC_DIRECTORY
+ Environment.load ENVIRONMENTS_DIRECTORY
target_file = File.open target, "w"
@@ -99,6 +100,18 @@ class GenConfig::Context
end
end
options["providers"] = providers
+
+ consumers = Hash(String, Variables).new
+ service.provides.each do |provider_data|
+ token = provider_data.token
+
+ consumers[token] = Service.all.select do |s2|
+ s2.providers.each do |t2, id|
+ token == t2 && id == service.id
+ end
+ end.map &.full_id
+ end
+ options["consumers"] = consumers
end
end
diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2
new file mode 100644
index 0000000..119b48d
--- /dev/null
+++ b/templates/nginx.conf.j2
@@ -0,0 +1,36 @@
+
+# worker_processes 1;
+daemon off;
+
+worker_rlimit_nofile 1024;
+events {
+ worker_connections 800;
+}
+
+http {
+ error_log /var/log/{{ id | replace("/", "_") }}_error.log warn;
+ access_log /var/log/{{ id | replace("/", "_") }}_access.log;
+
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+ index index.html index.htm index.xhtml;
+
+ fastcgi_param HTTP_PROXY "";
+
+ keepalive_timeout 65;
+
+ server_tokens off;
+
+ {% for user in consumers["www"] %}
+ server {
+ listen {{ port(user.id) }} ;
+ listen [::]:{{ port(user.id) }} ;
+ server_name {{ user.domain }} ;
+
+ location / {
+ root {{ user.root }} ;
+ }
+ }
+ {% endfor %}
+
+}
From 0c720683f69c84d170cc7a6ea52403ee0924ae9c Mon Sep 17 00:00:00 2001
From: Luka Vandervelden
Date: Sun, 27 Oct 2019 23:02:45 +0100
Subject: [PATCH 2/5] wip, stuff
---
services/nginx.spec | 4 ++--
src/gen-config.cr | 29 +++++++++++++++++++++++------
src/service/environment.cr | 1 -
src/service/service.cr | 2 ++
4 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/services/nginx.spec b/services/nginx.spec
index 0938bde..2d6fbf5 100644
--- a/services/nginx.spec
+++ b/services/nginx.spec
@@ -1,7 +1,7 @@
command: nginx -c ${SERVICE_ROOT}/nginx.conf
provides: www
-#%directory ${SERVICE_ROOT}/
-# name: working directory
+%directory ${SERVICE_ROOT}/
+ name: working directory
%configuration nginx.conf ${SERVICE_ROOT}/nginx.conf
diff --git a/src/gen-config.cr b/src/gen-config.cr
index 3047ef0..5cc597c 100644
--- a/src/gen-config.cr
+++ b/src/gen-config.cr
@@ -8,10 +8,13 @@ def sanitize_path(path)
end
module GenConfig
+ # FIXME: The fuck has this become.
alias Variables =
String |
Array(String) | Array(Variables) |
Hash(String, String) | Hash(String, Variables) |
+ Array(Hash(String, String?)) |
+ Hash(String, String?) |
Crinja::Callable::Instance
def self.parse_options(unparsed : Array(String))
@@ -48,9 +51,9 @@ class GenConfig::Context
end
def generate(template, target : String, options : Hash(String, Variables))
+ Environment.load ENVIRONMENTS_DIRECTORY
ServiceDefinition.load SERVICES_DIRECTORY
Service.load RC_DIRECTORY
- Environment.load ENVIRONMENTS_DIRECTORY
target_file = File.open target, "w"
@@ -93,10 +96,13 @@ class GenConfig::Context
next unless provider
- providers[token] = Hash(String, String).new.tap do |entry|
+ # FIXME: deduplicate
+ providers[token] = Hash(String, String?).new.tap do |entry|
entry["name"] = provider.name
entry["id"] = provider.full_id
entry["environment"] = provider.environment.name
+ entry["root"] = provider.root
+ entry["domain"] = provider.domain
end
end
options["providers"] = providers
@@ -105,11 +111,22 @@ class GenConfig::Context
service.provides.each do |provider_data|
token = provider_data.token
- consumers[token] = Service.all.select do |s2|
- s2.providers.each do |t2, id|
- token == t2 && id == service.id
+ # FIXME: definitely unreadable
+ consumers[token] = Service.all
+ .select(
+ &.providers.select do |t, provider|
+ t == token && service.is_id?(provider)
+ end
+ .size.>(0))
+ .map do |consumer|
+ Hash(String, String?).new.tap do |entry|
+ entry["name"] = consumer.name
+ entry["id"] = consumer.id
+ entry["environment"] = consumer.environment.name
+ entry["root"] = consumer.root
+ entry["domain"] = consumer.domain
+ end
end
- end.map &.full_id
end
options["consumers"] = consumers
end
diff --git a/src/service/environment.cr b/src/service/environment.cr
index 14d5071..2e1a53d 100644
--- a/src/service/environment.cr
+++ b/src/service/environment.cr
@@ -8,7 +8,6 @@ class Environment
getter name : String
getter type : Type = Type::Prefix
- getter domain_name : String?
getter pre_start_hooks = Array(ServiceDefinition::Hook).new
# The place we’ll put services’ data and configuration.
diff --git a/src/service/service.cr b/src/service/service.cr
index ee605c0..7a4aa3a 100644
--- a/src/service/service.cr
+++ b/src/service/service.cr
@@ -54,6 +54,8 @@ class Service
@reference = ServiceDefinition.get assignments["name"].as_s
+ @domain = assignments["domain"]?.try &.as_s
+
env = assignments["environment"]?.try &.as_s
@environment = if env.nil? || env == ""
Environment.root
From a29db9142adc48848226d9d2d8b287d42ea4504d Mon Sep 17 00:00:00 2001
From: Luka Vandervelden
Date: Mon, 28 Oct 2019 05:46:44 +0100
Subject: [PATCH 3/5] Grooming.
---
src/gen-config.cr | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/src/gen-config.cr b/src/gen-config.cr
index 5cc597c..1b7a42d 100644
--- a/src/gen-config.cr
+++ b/src/gen-config.cr
@@ -7,6 +7,18 @@ def sanitize_path(path)
path.gsub /\/\/+/, "/"
end
+class Service
+ def to_genconfig
+ Hash(String, String?).new.tap do |entry|
+ entry["name"] = name
+ entry["id"] = full_id
+ entry["environment"] = environment.name
+ entry["root"] = root
+ entry["domain"] = domain
+ end
+ end
+end
+
module GenConfig
# FIXME: The fuck has this become.
alias Variables =
@@ -96,14 +108,7 @@ class GenConfig::Context
next unless provider
- # FIXME: deduplicate
- providers[token] = Hash(String, String?).new.tap do |entry|
- entry["name"] = provider.name
- entry["id"] = provider.full_id
- entry["environment"] = provider.environment.name
- entry["root"] = provider.root
- entry["domain"] = provider.domain
- end
+ providers[token] = provider.to_genconfig
end
options["providers"] = providers
@@ -118,15 +123,7 @@ class GenConfig::Context
t == token && service.is_id?(provider)
end
.size.>(0))
- .map do |consumer|
- Hash(String, String?).new.tap do |entry|
- entry["name"] = consumer.name
- entry["id"] = consumer.id
- entry["environment"] = consumer.environment.name
- entry["root"] = consumer.root
- entry["domain"] = consumer.domain
- end
- end
+ .map &.to_genconfig
end
options["consumers"] = consumers
end
From 00f9a2b228827921306c76730859a41d907041ed Mon Sep 17 00:00:00 2001
From: Luka Vandervelden
Date: Mon, 28 Oct 2019 06:06:18 +0100
Subject: [PATCH 4/5] Grooming.
---
src/gen-config.cr | 9 +--------
src/service/service.cr | 10 ++++++++++
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/gen-config.cr b/src/gen-config.cr
index 1b7a42d..e7db7d2 100644
--- a/src/gen-config.cr
+++ b/src/gen-config.cr
@@ -116,14 +116,7 @@ class GenConfig::Context
service.provides.each do |provider_data|
token = provider_data.token
- # FIXME: definitely unreadable
- consumers[token] = Service.all
- .select(
- &.providers.select do |t, provider|
- t == token && service.is_id?(provider)
- end
- .size.>(0))
- .map &.to_genconfig
+ consumers[token] = service.get_consumers(token).map &.to_genconfig
end
options["consumers"] = consumers
end
diff --git a/src/service/service.cr b/src/service/service.cr
index 7a4aa3a..b8813f1 100644
--- a/src/service/service.cr
+++ b/src/service/service.cr
@@ -441,6 +441,16 @@ class Service
def get_default_provider(token) : String?
@environment.get_provider(token) || Environment.root.get_provider(token)
end
+
+ def consumes?(token, origin)
+ providers.select do |_token, provider|
+ token == _token && origin.is_id?(provider)
+ end.size > 0
+ end
+
+ def get_consumers(token)
+ Service.all.select(&.consumes?(token, self))
+ end
end
From 5b6e3e64fdacafb796f06c84646a2ebfa8079344 Mon Sep 17 00:00:00 2001
From: Luka Vandervelden
Date: Mon, 28 Oct 2019 06:08:08 +0100
Subject: [PATCH 5/5] Debug message removed.
---
src/gen-config.cr | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/gen-config.cr b/src/gen-config.cr
index e7db7d2..451d0c9 100644
--- a/src/gen-config.cr
+++ b/src/gen-config.cr
@@ -90,7 +90,6 @@ class GenConfig::Context
raise Exception.new "Could not find template to generate file ('#{target}')."
end
- pp ENV["SERVICE_ID"]?
if service_id = ENV["SERVICE_ID"]?
if service = Service.get_by_id service_id
environment = service.environment