From: Clement Delafargue Date: Wed, 1 Jul 2020 09:48:04 +0000 (+0200) Subject: Add support for linking service dependencies X-Git-Tag: v2.7^2~2 X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=45a5c1337b777f34c06d2ce99931414ba9f57ecd;p=github%2Ffretlink%2Fansible-clever.git Add support for linking service dependencies --- diff --git a/README.md b/README.md index 51b9e3d..eaddbd5 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ Variables for the application: - `clever_env_output_file`: as a post deploy task you might need to retrieve the full Clever environment configuration (i.e. with addon env variables). If this variable is set to a filename then the env will be retrieved after a successful deploy and written to this file. Beware, the resulting file will contain sensitive information (addon passwords, …). Optional. - `clever_build_flavor`: an optional text value used to configure the size of the dedicated build instance (for instance `S` or `XL`). If not defined, it delegates to clever cloud default behaviour. Setting `disabled` disables the dedicated build instance altogether. - `clever_scaling`: an optional object used to configure the runtime instances flavours and numbers. If not defined, it delegates to clever cloud default behaviour. +- `clever_service_dependencies`: a list of the service dependencies needed by the application (each service being a dict containing either an `app_id` field, or an `addon_id` field), optional.
+ Example: `[{ addon_id: addon_00000000-0000-0000-0000-000000000000 }, { app_id: app_00000000-0000-0000-0000-000000000000 }]` Variables specific to deployment, defaults should be fine: diff --git a/defaults/main.yml b/defaults/main.yml index 4e2ef8e..68e3abe 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -16,3 +16,9 @@ clever_addons: [] # clever_addons: # - name: pg # - env_prefix: POSTGRESQL_ADDON + +clever_service_dependencies: [] +# example +# clever_service_dependencies: +# - addon_id: addon_00000000-0000-0000-0000-000000000000 +# - app_id: app_00000000-0000-0000-0000-000000000000 diff --git a/tasks/deploy.yml b/tasks/deploy.yml index ae11921..8dda5e0 100644 --- a/tasks/deploy.yml +++ b/tasks/deploy.yml @@ -38,6 +38,12 @@ MIN_FLAVOR: "{{ clever_scaling.flavor.min | default('') }}" MAX_FLAVOR: "{{ clever_scaling.flavor.max | default('') }}" +- name: Configure service dependencies + include_tasks: service-dep.yml + vars: + service_dep: "{{ item }}" + with_items: "{{ clever_service_dependencies }}" + - name: Push Environment shell: "clever env import --json < {{ clever_app_confdir }}/env" args: diff --git a/tasks/service-dep.yml b/tasks/service-dep.yml new file mode 100644 index 0000000..67621f6 --- /dev/null +++ b/tasks/service-dep.yml @@ -0,0 +1,17 @@ +- name: Make sure addon {{ service_dep.addon_id }} is linked + shell: > + clever service link-addon {{ service_dep.addon_id }} + args: + chdir: "{{ clever_app_root }}" + environment: + CONFIGURATION_FILE: "{{ clever_login_file }}" + when: service_dep.addon_id is defined + +- name: Make sure app {{ service_dep.app_id }} is linked + shell: > + clever service link-app {{ service_dep.app_id }} + args: + chdir: "{{ clever_app_root }}" + environment: + CONFIGURATION_FILE: "{{ clever_login_file }}" + when: service_dep.app_id is defined diff --git a/tests/test-all.yml b/tests/test-all.yml index 145b16d..8a6c0ba 100644 --- a/tests/test-all.yml +++ b/tests/test-all.yml @@ -4,4 +4,5 @@ - import_playbook: ./test-haskell-app.yml - import_playbook: ./test-noop-deploy.yml - import_playbook: ./test-scalability.yml +- import_playbook: ./test-service-deps.yml - import_playbook: ./test-restart-app.yml diff --git a/tests/test-service-deps.yml b/tests/test-service-deps.yml new file mode 100644 index 0000000..4e848e5 --- /dev/null +++ b/tests/test-service-deps.yml @@ -0,0 +1,36 @@ +--- +- name: Deploy an app & configure service dependencies on clever + hosts: localhost + remote_user: root + pre_tasks: + - file: + state: absent + path: ../clever-commands + roles: + - role: clever + vars: + clever_token: 123abc + clever_secret: cba321 + clever_app: app_00000000-0000-0000-0000-000000000000 + clever_service_dependencies: + - app_id: app_00000000-2222-2222-2222-000000000000 + - addon_id: addon_00000000-0000-0000-0000-000000000000 + post_tasks: + - name: Check stubbed commands + shell: "{{ item.cmd }}" + ignore_errors: true + vars: + display: "{{ item.display }}" + with_list: + - cmd: "grep service ../clever-commands" + display: "Expected 'clever service' command to be called" + register: tests_results + - name: show results + debug: + msg: + - "failed_results: {{ failed_results }}" + - "success_results: {{ success_results }}" + failed_when: tests_results is failed + vars: + failed_results: "{{ tests_results.results | selectattr('failed') | map(attribute='item.display') | list }}" + success_results: "{{ tests_results.results | rejectattr('failed') | map(attribute='item.display') | list }}"