Add common part with DevopPortal
The services definitions which are located at metadata/service/services
will be moved onto the system level, to be re-used in particular
components.
Change-Id: I227638b7a486c156578e5b0d57eb6eb4d9854a89
diff --git a/devops_portal/control.sls b/devops_portal/control.sls
new file mode 100644
index 0000000..eaaac62
--- /dev/null
+++ b/devops_portal/control.sls
@@ -0,0 +1,36 @@
+{%- from "devops_portal/map.jinja" import control with context %}
+{%- if control.enabled %}
+
+devops_portal_dirs:
+ file.directory:
+ - names:
+ - /srv/oss/devops_portal/nginx
+ - /srv/oss/devops_portal/config
+ - user: root
+ - group: root
+ - mode: 0755
+ - makedirs: true
+
+devops_portal_nginx_conf:
+ file.managed:
+ - name: /srv/oss/devops_portal/nginx/nginx.conf
+ - source: salt://devops_portal/files/nginx.conf
+ - template: jinja
+ - user: root
+ - group: root
+ - mode: 0644
+ - require:
+ - file: devops_portal_dirs
+
+devops_portal_config:
+ file.managed:
+ - name: /srv/oss/devops_portal/config/config.json
+ - source: salt://devops_portal/files/config.json
+ - template: jinja
+ - user: root
+ - group: root
+ - mode: 0640
+ - require:
+ - file: devops_portal_dirs
+
+{%- endif %}
diff --git a/devops_portal/files/config.json b/devops_portal/files/config.json
new file mode 100644
index 0000000..bb07fae
--- /dev/null
+++ b/devops_portal/files/config.json
@@ -0,0 +1,26 @@
+{%- from "devops_portal/map.jinja" import control with context -%}
+{%- from "devops_portal/map.jinja" import services with context -%}
+{%- macro credentials(parameters) -%}
+{%- set keys = ['token', 'username', 'password'] -%}
+"credentials": {
+{%- for key, value in salt['devops_utils.iter_items'](keys, parameters) %}
+ {%- if not loop.first %},{% endif %}
+ "{{ key }}": "{{ value }}"
+{%- endfor %}
+}
+{%- endmacro %}
+{
+ "services": {
+ {%- for service_name, service in salt['devops_utils.iter_items'](services, control.services) %}
+ {%- if not loop.first %},{% endif -%}
+ {%- if service|length() > 0 and service.enabled %}
+ "{{ service_name }}": {
+ "endpoint": "{{ service.endpoint }}"
+ {%- if service.credentials is defined and service.credentials|length() > 0 -%},
+ {{ credentials(service.credentials)|indent(width=8) }}
+ {%- endif %}
+ }
+ {%- endif %}
+ {%- endfor %}
+ }
+}
diff --git a/devops_portal/files/nginx.conf b/devops_portal/files/nginx.conf
new file mode 100644
index 0000000..5813f5d
--- /dev/null
+++ b/devops_portal/files/nginx.conf
@@ -0,0 +1,49 @@
+{%- from "devops_portal/map.jinja" import control with context -%}
+{%- from "devops_portal/map.jinja" import services with context -%}
+daemon off;
+
+worker_processes 1;
+
+error_log /dev/stderr;
+pid /var/run/nginx/nginx.pid;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ include /etc/nginx/mime.types;
+
+ sendfile on;
+
+ access_log /dev/stdout;
+
+ server {
+ listen 0.0.0.0:{{ control.container.container_port }} default_server;
+
+ root /opt/devops-portal/;
+
+ gzip on;
+ gzip_min_length 1000;
+ gzip_types
+ text/plain
+ text/css
+ application/json
+ application/javascript
+ application/x-javascript;
+
+ location / {
+ try_files $uri /index.html;
+ }
+
+{%- for service_name in services %}
+{%- set service = control.services[service_name]|default({}) %}
+{%- if service.enabled and service.configure_proxy|default(False) %}
+
+ location /api/{{ service_name }} {
+ proxy_pass {{ service.endpoint }};
+ }
+{%- endif %}
+{%- endfor %}
+ }
+}
diff --git a/devops_portal/init.sls b/devops_portal/init.sls
new file mode 100644
index 0000000..00649c7
--- /dev/null
+++ b/devops_portal/init.sls
@@ -0,0 +1,7 @@
+{%- if pillar.devops_portal is defined %}
+include:
+{%- if pillar.devops_portal.control is defined %}
+ - devops_portal.control
+ - devops_portal.setup
+{%- endif %}
+{%- endif %}
diff --git a/devops_portal/map.jinja b/devops_portal/map.jinja
new file mode 100644
index 0000000..935a0db
--- /dev/null
+++ b/devops_portal/map.jinja
@@ -0,0 +1,13 @@
+{% set control = salt['pillar.get']('devops_portal:setup') %}
+{% set control = salt['pillar.get']('devops_portal:control') %}
+
+{% set services = [
+'artifactory',
+'elasticsearch',
+'gerrit',
+'grafana',
+'jenkins',
+'kibana',
+'riverdelta',
+'rundeck',
+] %}
diff --git a/devops_portal/setup/init.sls b/devops_portal/setup/init.sls
new file mode 100644
index 0000000..1b43923
--- /dev/null
+++ b/devops_portal/setup/init.sls
@@ -0,0 +1 @@
+include: