aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorClement Delafargue <clement.delafargue@fretlink.com>2020-07-01 11:48:04 +0200
committerClement Delafargue <clement.delafargue@fretlink.com>2020-07-02 11:44:09 +0200
commit45a5c1337b777f34c06d2ce99931414ba9f57ecd (patch)
treebe4ec30d22ee9440d6404e972f4e43d62172c978
parentf642276169b56be94e8537458d0ce2286dc71748 (diff)
downloadansible-clever-45a5c1337b777f34c06d2ce99931414ba9f57ecd.tar.gz
ansible-clever-45a5c1337b777f34c06d2ce99931414ba9f57ecd.tar.zst
ansible-clever-45a5c1337b777f34c06d2ce99931414ba9f57ecd.zip
Add support for linking service dependencies
-rw-r--r--README.md2
-rw-r--r--defaults/main.yml6
-rw-r--r--tasks/deploy.yml6
-rw-r--r--tasks/service-dep.yml17
-rw-r--r--tests/test-all.yml1
-rw-r--r--tests/test-service-deps.yml36
6 files changed, 68 insertions, 0 deletions
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:
34- `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. 34- `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.
35- `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. 35- `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.
36- `clever_scaling`: an optional object used to configure the runtime instances flavours and numbers. If not defined, it delegates to clever cloud default behaviour. 36- `clever_scaling`: an optional object used to configure the runtime instances flavours and numbers. If not defined, it delegates to clever cloud default behaviour.
37- `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.<br/>
38 Example: `[{ addon_id: addon_00000000-0000-0000-0000-000000000000 }, { app_id: app_00000000-0000-0000-0000-000000000000 }]`
37 39
38Variables specific to deployment, defaults should be fine: 40Variables specific to deployment, defaults should be fine:
39 41
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: []
16# clever_addons: 16# clever_addons:
17# - name: pg 17# - name: pg
18# - env_prefix: POSTGRESQL_ADDON 18# - env_prefix: POSTGRESQL_ADDON
19
20clever_service_dependencies: []
21# example
22# clever_service_dependencies:
23# - addon_id: addon_00000000-0000-0000-0000-000000000000
24# - 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 @@
38 MIN_FLAVOR: "{{ clever_scaling.flavor.min | default('') }}" 38 MIN_FLAVOR: "{{ clever_scaling.flavor.min | default('') }}"
39 MAX_FLAVOR: "{{ clever_scaling.flavor.max | default('') }}" 39 MAX_FLAVOR: "{{ clever_scaling.flavor.max | default('') }}"
40 40
41- name: Configure service dependencies
42 include_tasks: service-dep.yml
43 vars:
44 service_dep: "{{ item }}"
45 with_items: "{{ clever_service_dependencies }}"
46
41- name: Push Environment 47- name: Push Environment
42 shell: "clever env import --json < {{ clever_app_confdir }}/env" 48 shell: "clever env import --json < {{ clever_app_confdir }}/env"
43 args: 49 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 @@
1- name: Make sure addon {{ service_dep.addon_id }} is linked
2 shell: >
3 clever service link-addon {{ service_dep.addon_id }}
4 args:
5 chdir: "{{ clever_app_root }}"
6 environment:
7 CONFIGURATION_FILE: "{{ clever_login_file }}"
8 when: service_dep.addon_id is defined
9
10- name: Make sure app {{ service_dep.app_id }} is linked
11 shell: >
12 clever service link-app {{ service_dep.app_id }}
13 args:
14 chdir: "{{ clever_app_root }}"
15 environment:
16 CONFIGURATION_FILE: "{{ clever_login_file }}"
17 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 @@
4- import_playbook: ./test-haskell-app.yml 4- import_playbook: ./test-haskell-app.yml
5- import_playbook: ./test-noop-deploy.yml 5- import_playbook: ./test-noop-deploy.yml
6- import_playbook: ./test-scalability.yml 6- import_playbook: ./test-scalability.yml
7- import_playbook: ./test-service-deps.yml
7- import_playbook: ./test-restart-app.yml 8- 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 @@
1---
2- name: Deploy an app & configure service dependencies on clever
3 hosts: localhost
4 remote_user: root
5 pre_tasks:
6 - file:
7 state: absent
8 path: ../clever-commands
9 roles:
10 - role: clever
11 vars:
12 clever_token: 123abc
13 clever_secret: cba321
14 clever_app: app_00000000-0000-0000-0000-000000000000
15 clever_service_dependencies:
16 - app_id: app_00000000-2222-2222-2222-000000000000
17 - addon_id: addon_00000000-0000-0000-0000-000000000000
18 post_tasks:
19 - name: Check stubbed commands
20 shell: "{{ item.cmd }}"
21 ignore_errors: true
22 vars:
23 display: "{{ item.display }}"
24 with_list:
25 - cmd: "grep service ../clever-commands"
26 display: "Expected 'clever service' command to be called"
27 register: tests_results
28 - name: show results
29 debug:
30 msg:
31 - "failed_results: {{ failed_results }}"
32 - "success_results: {{ success_results }}"
33 failed_when: tests_results is failed
34 vars:
35 failed_results: "{{ tests_results.results | selectattr('failed') | map(attribute='item.display') | list }}"
36 success_results: "{{ tests_results.results | rejectattr('failed') | map(attribute='item.display') | list }}"