summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2019-08-15 06:57:07 +0200
committerSuren A. Chilingaryan <csa@suren.me>2019-08-15 06:57:07 +0200
commite41e21f6d0f5ca7aace86bf60e8b503bb20fdcd5 (patch)
tree390101c89a5e8f5c8c8dd23263730821f7edbbeb
parent79b191d207d7670295781c550847ce7d695cc388 (diff)
downloadands-e41e21f6d0f5ca7aace86bf60e8b503bb20fdcd5.tar.gz
ands-e41e21f6d0f5ca7aace86bf60e8b503bb20fdcd5.tar.bz2
ands-e41e21f6d0f5ca7aace86bf60e8b503bb20fdcd5.tar.xz
ands-e41e21f6d0f5ca7aace86bf60e8b503bb20fdcd5.zip
Support BuildConfig in ands_kaas role
-rw-r--r--roles/ands_kaas/tasks/do_app.yml13
-rw-r--r--roles/ands_kaas/tasks/do_apps.yml6
-rw-r--r--roles/ands_kaas/tasks/project.yml2
-rw-r--r--roles/ands_kaas/tasks/template.yml4
-rw-r--r--roles/ands_kaas/tasks/templates.yml3
-rw-r--r--roles/ands_kaas/templates/40-kaas-app-builders.yml.j293
-rw-r--r--roles/ands_kaas/templates/50-kaas-app-pods.yml.j2 (renamed from roles/ands_kaas/templates/50-kaas-pods.yml.j2)19
-rw-r--r--setup/configs/openshift.yml8
8 files changed, 141 insertions, 7 deletions
diff --git a/roles/ands_kaas/tasks/do_app.yml b/roles/ands_kaas/tasks/do_app.yml
new file mode 100644
index 0000000..556a421
--- /dev/null
+++ b/roles/ands_kaas/tasks/do_app.yml
@@ -0,0 +1,13 @@
+- name: "Process KaaS App builders"
+ include_tasks: "template.yml"
+ run_once: true
+ vars:
+ tmpl_name: "40-kaas-app-builders.yml.j2"
+ yml_name: ternary ( '80-' + (appname | default('kaas')) + '-builder.yml'
+
+- name: "Process KaaS App pods"
+ include_tasks: "template.yml"
+ run_once: true
+ vars:
+ tmpl_name: "50-kaas-app-pods.yml.j2"
+ yml_name: ternary ( '90-' + (appname | default('kaas')) + '.yml'
diff --git a/roles/ands_kaas/tasks/do_apps.yml b/roles/ands_kaas/tasks/do_apps.yml
index 0e49981..382eb3c 100644
--- a/roles/ands_kaas/tasks/do_apps.yml
+++ b/roles/ands_kaas/tasks/do_apps.yml
@@ -1,5 +1,5 @@
- name: "Process KaaS apps"
- include_tasks: "template.yml"
+ include_tasks: "app.yml"
run_once: true
with_dict: "{{ kaas_project_apps | default({}) }}"
loop_control:
@@ -16,5 +16,5 @@
delete: "{{ options.delete | default(true) }}"
instantiate: "{{ appitem.value.instantiate | default(false) }}"
load: "{{ app.load | default(false) }}"
- pods: "{{ app.pods }}"
- tmpl_name: "50-kaas-pods.yml.j2"
+ pods: "{{ app.pods | default({}) }}"
+ builders: "{{ app.builders | default({}) }}"
diff --git a/roles/ands_kaas/tasks/project.yml b/roles/ands_kaas/tasks/project.yml
index 0376477..f1c596b 100644
--- a/roles/ands_kaas/tasks/project.yml
+++ b/roles/ands_kaas/tasks/project.yml
@@ -15,6 +15,7 @@
vars:
var_empty:
pods: {}
+ builders: {}
var_name: "var_{{kaas_project}}_config"
when: hostvars[inventory_hostname][var_name] is not defined
@@ -58,6 +59,7 @@
kaas_project_config: "{{ hostvars[inventory_hostname][var_name] }}"
kaas_project_volumes: "{{ kaas_project_config.volumes | default(kaas_project_config.extra_volumes | default({}) | combine(kaas_openshift_volumes)) }}"
kaas_project_local_volumes: "{{ kaas_project_config.local_volumes | default({}) }}"
+ kaas_project_builders: "{{ kaas_project_config.builders | default({}) }}"
kaas_project_pods: "{{ kaas_project_config.pods | default({}) }}"
kaas_project_apps: "{{ kaas_project_config.apps | default({}) }}"
kaas_project_gids: "{{ kaas_project_config.gids | default(kaas_openshift_gids) }}"
diff --git a/roles/ands_kaas/tasks/template.yml b/roles/ands_kaas/tasks/template.yml
index 89c30e0..73cf1c4 100644
--- a/roles/ands_kaas/tasks/template.yml
+++ b/roles/ands_kaas/tasks/template.yml
@@ -3,7 +3,7 @@
register: result
vars:
default_name: "{{ item | basename | regex_replace('\\.j2','') }}"
- dest_name: "{{ (appname is defined) | ternary ( '90-' + (appname | default('')) + '.yml', default_name ) }}"
+ dest_name: "{{ yml_name | default(default_name) }}"
with_first_found:
- paths:
- "{{ role_path }}/templates/"
@@ -16,7 +16,7 @@
when: instantiate == true
vars:
default_name: "{{ tmpl_name | basename | regex_replace('\\.j2','') }}"
- dest_name: "{{ (appname is defined) | ternary ( '90-' + (appname | default('')) + '.yml', default_name ) }}"
+ dest_name: "{{ yml_name | default(default_name) }}"
template: "{{ dest_name }}"
template_path: "{{ kaas_template_path }}"
project: "{{ kaas_namespace | default(kaas_project) }}"
diff --git a/roles/ands_kaas/tasks/templates.yml b/roles/ands_kaas/tasks/templates.yml
index 4417cf3..07b71ea 100644
--- a/roles/ands_kaas/tasks/templates.yml
+++ b/roles/ands_kaas/tasks/templates.yml
@@ -4,7 +4,7 @@
command: "echo {{ item | quote }}"
register: results
changed_when: false
- when: (kaas_project_pods | length > 0) or not (item | regex_search('kaas-pods'))
+ when: not (item | regex_search('kaas-app')) or ((kaas_project_pods | length > 0) and (item | regex_search('kaas-app-pods'))) or ((kaas_project_builders | length > 0) and (item | regex_search('kaas-app-builders')))
with_fileglob:
- "{{ role_path }}/templates/{{ kaas_template_glob | default('*') }}.j2"
- "{{ kaas_project_path }}/templates/{{ kaas_template_glob | default('*') }}.j2"
@@ -22,6 +22,7 @@
instantiate: true
load: false
pods: "{{ kaas_project_pods }}"
+ builders: "{{ kaas_project_builders }}"
loop_control:
loop_var: tmpl_name
diff --git a/roles/ands_kaas/templates/40-kaas-app-builders.yml.j2 b/roles/ands_kaas/templates/40-kaas-app-builders.yml.j2
new file mode 100644
index 0000000..090f15a
--- /dev/null
+++ b/roles/ands_kaas/templates/40-kaas-app-builders.yml.j2
@@ -0,0 +1,93 @@
+#jinja2: trim_blocks: "true", lstrip_blocks: "false"
+---
+{% set app = app | default('{}') %}
+{% set have_triggers = 0 %}
+apiVersion: v1
+kind: Template
+metadata:
+ name: {{ appname | default(kaas_project) }}-builders
+ annotations:
+ descriptions: {{ kaas_project_config.description | default(appname | default(kaas_project) ~ " auto-generated image-builder template") }}
+{% set applabels = ( app.labels | default({}) | combine( { 'app': appname }) ) if appname is defined else (app.labels | default({})) %}
+{% if applabels | length > 0 %}
+ labels: {{ applabels | to_json }}
+{% endif %}
+objects:
+{% for name, builder in builders.iteritems() %}
+ {% set isname = builder.name | default(name) | regex_replace('_','-') %}
+ {% set istag = builder.version | default("latest") %}
+ {% set type = builder.type | default("Docker") %}
+ {% set src_type = builder.src_type | default("git") %}
+ {% set image_type = builder.image_type | default("ImageStreamTag") %}
+ - kind: ImageStream
+ apiVersion: v1
+ metadata:
+ name: {{ isname }}
+ - kind: "BuildConfig"
+ apiVersion: v1
+ metadata:
+ name: {{ isname }}
+ spec:
+ successfulBuildsHistoryLimit: "{{ kaas_pod_history_limit }}"
+ failedBuildsHistoryLimit: "{{ kaas_pod_history_limit }}"
+ triggers:
+ - type: "ConfigChange"
+ source:
+ type: {{ src_type }}
+ {{ src_type }}:
+ uri: "{{ builder.src }}"
+ {% if builder.src_path is defined %}
+ contextDir: "{{ builder.src_path }}"
+ {% endif %}
+ strategy:
+ {% if type == 'Docker' %}
+ type: {{ type }}
+ {{ type | lower }}Strategy:
+ dockerfilePath: "{{ builder.dockerfile | default('Dockerfile') }}"
+ {% if builder.args is defined %}
+ buildArgs: {{ builder.args | to_json }}
+ {% endif %}
+ {% else %}
+ type: {{ type }}
+ {{ type | lower }}Strategy:
+ {% if builder.image is defined %}
+ from:
+ kind: {{ image_type }}
+ name: "{{ builder.image }}"
+ {% if image_type == 'ImageStreamTag' %}
+ namespace: "{{ builder.image_namespace | default('openshift') }}"
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ {% if builder.env is defined %}
+ env: {{ builder.env | to_json }}
+ {% endif %}
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "{{ isname }}:{{ istag }}"
+ imageLabels:
+ - name: "vendor"
+ value: "{{ builder.vendor | default(ands_info.vendor) }}"
+ - name: "author"
+ value: "{{ builder.author | default(ands_info.admin) }}"
+ - name: "authoritative-source-url"
+ value: "{{ builder.url | default(ands_info.git_url) }}"
+ triggers:
+ - type: ConfigChange
+ - type: ImageChange
+ {% if builder.trigger is defined %}
+ {% set have_triggers = 1 %}
+ {% set trigger_type = "Generic" if 'github.com' in builder.src else "Generic" %}
+ - type: {{ trigger_type }}
+ {{ trigger_type | lower }}:
+ secret: ${TRIGGER_SECRET}
+ {% endif %}
+{% endfor %}
+parameters:
+{% if have_triggers %}
+ - description: Trigger secret
+ from: '[a-zA-Z0-9]{8}'
+ generate: expression
+ name: TRIGGER_SECRET
+{% endif %}
diff --git a/roles/ands_kaas/templates/50-kaas-pods.yml.j2 b/roles/ands_kaas/templates/50-kaas-app-pods.yml.j2
index 8c7fe85..2174962 100644
--- a/roles/ands_kaas/templates/50-kaas-pods.yml.j2
+++ b/roles/ands_kaas/templates/50-kaas-app-pods.yml.j2
@@ -133,6 +133,23 @@ objects:
{% endif %}
triggers:
- type: ConfigChange
+ {% for img in pod.images %}
+ {% if img.stream is defined %}
+ {% set stream = img.stream.split('/') %}
+ {% set stream_name = stream[1] | default(stream[0]) %}
+ - type: ImageChange
+ imageChangeParams:
+ automatic: true
+ containerNames:
+ - {{ img.name | default(podname) }}
+ from:
+ kind: "ImageStreamTag"
+ name: {{ stream_name }}
+ {% if (stream[1] is defined) %}
+ namespace: {{ stream[0] }}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
{% if kind == 'StatefulSet' %}
{% if headless %}
serviceName: {{ podname }}-ss
@@ -230,7 +247,7 @@ objects:
{% for img in pod.images %}
{% set imgidx = loop.index %}
- name: {{ img.name | default(podname) }}
- image: {{ img.image }}
+ image: {{ img.stream | default(img.image) }}
imagePullPolicy: {{ img.pull | default('Always') }}
{% if (img.command is defined) %}
command: {{ img.command | to_json }}
diff --git a/setup/configs/openshift.yml b/setup/configs/openshift.yml
index 95ade9f..0f37a07 100644
--- a/setup/configs/openshift.yml
+++ b/setup/configs/openshift.yml
@@ -1,4 +1,9 @@
---
+ands_info:
+ vendor: KIT
+ admin: "Suren A. Chilingaryan"
+ git_url: "http://git.ipe.kit.edu"
+
ands_openshift_projects:
kaas: KaaS router and common resources
katrin: KArlsruhe TRItium Neutrino
@@ -31,3 +36,6 @@ ands_openshift_roles:
web/admin: kopmann, jonasteufel
mon/admin: csa
test/admin: csa, ntj, kopmann, katrin
+
+ands_repos:
+ docker: "{{ ands_info.git_url }}/ands-docker"