]> git.immae.eu Git - github/fretlink/ansible-clever.git/commitdiff
Merge pull request #74 from clementd-fretlink/service-dependencies v2.7
authorClément Delafargue <39330590+clementd-fretlink@users.noreply.github.com>
Fri, 3 Jul 2020 13:16:54 +0000 (15:16 +0200)
committerGitHub <noreply@github.com>
Fri, 3 Jul 2020 13:16:54 +0000 (15:16 +0200)
Service dependencies

README.md
defaults/main.yml
dhall/Config.dhall
dhall/ServiceDependency.dhall [new file with mode: 0644]
dhall/package.dhall
tasks/addon.yml
tasks/deploy.yml
tasks/service-dep.yml [new file with mode: 0644]
tests/test-all.yml
tests/test-service-deps.yml [new file with mode: 0644]

index 51b9e3d49e180cdefee74472bcc8a6747d481a16..eaddbd524db93461042fb7494f7f4d51bdbecdf3 100644 (file)
--- 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.<br/>
+  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:
 
index 4e2ef8e023159098cab3638d1ac310a29b6668b0..f117f159bbb89de8e3fd03a7a6a83e12b991f92d 100644 (file)
@@ -15,4 +15,10 @@ clever_addons: []
 # example
 # clever_addons:
 #   - name: pg
-#   - env_prefix: POSTGRESQL_ADDON
+#     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
index 9e46679e4e02ac1fe81d964e17d6a083fcefae6c..1e0f4aee90598b8faaf770991f7d92b9ca095484 100644 (file)
@@ -1,5 +1,7 @@
 let Addon = (./Addon.dhall).Type
 
+let ServiceDependency = (./ServiceDependency.dhall).Type
+
 let Vault = ./Vault.dhall
 
 let FixedOrRange =
@@ -28,6 +30,7 @@ let Config =
         , clever_haskell_entry_point : Optional Text
         , clever_disable_metrics : Bool
         , clever_addons : List Addon
+        , clever_service_dependencies : List ServiceDependency
         , clever_env : Environment
         , clever_build_flavor : Optional Text
         , clever_scaling : Optional ScalingParameters
@@ -48,6 +51,7 @@ let mkConfig =
           , clever_haskell_entry_point = None Text
           , clever_disable_metrics = False
           , clever_addons = [] : List Addon
+          , clever_service_dependencies = [] : List ServiceDependency
           , clever_env = {=}
           , clever_build_flavor = None Text
           , clever_scaling = None ScalingParameters
diff --git a/dhall/ServiceDependency.dhall b/dhall/ServiceDependency.dhall
new file mode 100644 (file)
index 0000000..9cad9b4
--- /dev/null
@@ -0,0 +1,9 @@
+let ServiceDependency =
+      < Addon : { addon_id : Text } | Application : { app_id : Text } >
+
+let addon = λ(addon_id : Text) → ServiceDependency.Addon { addon_id = addon_id }
+
+let application =
+      λ(app_id : Text) → ServiceDependency.Application { app_id = app_id }
+
+in  { Type = ServiceDependency, addon = addon, application = application }
index c653ddb4a49868fb653f61d28d987d81ed88859d..c430b44513621da29b5d2e705358aa5c5ed7e0bb 100644 (file)
@@ -1 +1,5 @@
-{ Addon = ./Addon.dhall, Config = ./Config.dhall, Vault = ./Vault.dhall }
+{ Addon = ./Addon.dhall
+, ServiceDependency = ./ServiceDependency.dhall
+, Config = ./Config.dhall
+, Vault = ./Vault.dhall
+}
index 328664d087461e8baf4adaebde01971798315872..1ee8eff77c131adf80ad5e8aed52489818953be4 100644 (file)
@@ -1,18 +1,4 @@
-- name: Gather addon information for {{ addon.name }} (clever --version < 1.5.0)
-  shell: >
-    set -o pipefail &&
-    clever env | grep {{ addon.env_prefix }}
-    | sed -e 's/{{ addon.env_prefix }}_//' -e 's/=/: \"/' -e 's/$/\"/'
-    > {{ clever_app_confdir }}/{{ addon.name }}_env.yml
-  args:
-    chdir: "{{ clever_app_root }}"
-    executable: "bash"
-  environment:
-    CONFIGURATION_FILE: "{{ clever_login_file }}"
-  changed_when: False
-  when: clever_returned_version.stdout is version('1.5.0', '<')
-
-- name: Gather addon information for {{ addon.name }} (clever --version >= 1.5.0)
+- name: Gather addon information for {{ addon.name }}
   shell: >
     set -o pipefail &&
     clever env | grep {{ addon.env_prefix }}
@@ -24,7 +10,6 @@
   environment:
     CONFIGURATION_FILE: "{{ clever_login_file }}"
   changed_when: False
-  when: clever_returned_version.stdout is version('1.5.0', '>=')
 
 - name: Include addon var for {{ addon.name }}
   include_vars:
index ae119218a77e034cec3d813f0e72263cdfb7b4ce..8dda5e0f7dc82673e91a1da91525a32708692e98 100644 (file)
     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 (file)
index 0000000..67621f6
--- /dev/null
@@ -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
index 145b16d2b1f867d6aa0453dc012779b94ff95f11..8a6c0ba362552ea5f8bbad5695ff56cca47824db 100644 (file)
@@ -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 (file)
index 0000000..4e848e5
--- /dev/null
@@ -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 }}"