diff options
Diffstat (limited to 'roles')
-rw-r--r-- | roles/ands_kaas/tasks/do_app.yml | 13 | ||||
-rw-r--r-- | roles/ands_kaas/tasks/do_apps.yml | 6 | ||||
-rw-r--r-- | roles/ands_kaas/tasks/project.yml | 2 | ||||
-rw-r--r-- | roles/ands_kaas/tasks/template.yml | 4 | ||||
-rw-r--r-- | roles/ands_kaas/tasks/templates.yml | 3 | ||||
-rw-r--r-- | roles/ands_kaas/templates/40-kaas-app-builders.yml.j2 | 93 | ||||
-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 |
7 files changed, 133 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 }} |