From: Hussein A <44173825+haitlahcen@users.noreply.github.com> Date: Tue, 20 Nov 2018 15:44:40 +0000 (+0100) Subject: Merge pull request #18 from haitlahcen/dhall-interface X-Git-Tag: v1.9 X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=5485dbc4db3e141673457475bcda5fc88057739f;hp=b570ba036adb74095c712705d686f630d41f4ed0;p=github%2Ffretlink%2Fansible-clever.git Merge pull request #18 from haitlahcen/dhall-interface add dhall interface --- diff --git a/.travis.yml b/.travis.yml index 82ddcec..ef53f71 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ sudo: false install: - nix-env -i python2.7-ansible - nix-env -i python2.7-ansible-lint + - nix-env -if ./dhall-1.18.nix # Check ansible version - ansible --version @@ -20,6 +21,7 @@ script: # Basic role syntax check - ansible-playbook tests/test.yml -i tests/inventory --syntax-check - ansible-lint . + - scripts/dhall_check.sh notifications: slack: fretlink:pTIylIN7zkwRFuL3aHERmsbB diff --git a/README.md b/README.md index 86153af..b932c7f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Variables for the application - _Obsolete_: `domain`: Same as above but was replaced by `clever_domain` since v1.4 of this role. - `clever_syslog_server`: UDP Syslog server to be used as UDPSyslog drain for the application, optional. Example: `udp://198.51.100.51:12345`. - _Obsolete_: `syslog_server`: Same as above but was replaced by `clever_syslog_server` since v1.5 of this role. -- `clever_metrics`: a boolean to enable or disable metrics support. Optional, default to `false`. +- `clever_metrics`: a boolean to enable or disable metrics support. Optional, default to `true`. Variables specific to deployment, default should be fine: - `clever_cli_version`: Version of clever cli tools, default to `0.9.3`. diff --git a/defaults/main.yml b/defaults/main.yml index 1fbea48..fb0e30f 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,7 +9,7 @@ clever_login_file: "{{ clever_app_confdir }}/login" clever_entry_point: "" clever_env: {} -clever_metrics: false +clever_metrics: true clever_addons: [] # example diff --git a/dhall-1.18.nix b/dhall-1.18.nix new file mode 100644 index 0000000..d6522bd --- /dev/null +++ b/dhall-1.18.nix @@ -0,0 +1,16 @@ +{ pkgs ? import {} }: with pkgs; + +stdenv.mkDerivation rec { + name = "dhall-${version}"; + version = "1.18.0"; + phases = [ "installPhase "]; + src = fetchurl { + url = "https://github.com/dhall-lang/dhall-haskell/releases/download/${version}/dhall-${version}-x86_64-linux.tar.bz2"; + sha256 = "0jvw6ss96xifb21mzpvfjzvaffcnpj0jhpc4rd36cl2r22800qgx"; + }; + installPhase = '' + mkdir -p $out/bin + tar -xjf $src + mv bin/dhall $out/bin/ + ''; +} diff --git a/dhall/Config.dhall b/dhall/Config.dhall new file mode 100644 index 0000000..01329a8 --- /dev/null +++ b/dhall/Config.dhall @@ -0,0 +1,26 @@ + let Addon = ./addon/Addon.dhall + +in λ(Environment : Type) + → { clever_app : + Text + , clever_orga : + Text + , clever_secret : + Text + , clever_token : + Text + , clever_syslog_server : + Text + , clever_domain : + Text + , clever_app_tasks_file : + Text + , clever_entry_point : + Text + , clever_metrics : + Bool + , clever_addons : + List Addon + , clever_env : + Environment + } diff --git a/dhall/Vault.dhall b/dhall/Vault.dhall new file mode 100644 index 0000000..ba1a309 --- /dev/null +++ b/dhall/Vault.dhall @@ -0,0 +1 @@ +{ organization : Text, secret : Text, token : Text } diff --git a/dhall/addon/Addon.dhall b/dhall/addon/Addon.dhall new file mode 100644 index 0000000..2eb781c --- /dev/null +++ b/dhall/addon/Addon.dhall @@ -0,0 +1 @@ +< Postgresql : { name : Text, env_prefix : Text } > diff --git a/dhall/addon/Postgresql.dhall b/dhall/addon/Postgresql.dhall new file mode 100644 index 0000000..9dd9744 --- /dev/null +++ b/dhall/addon/Postgresql.dhall @@ -0,0 +1,3 @@ + let addon = constructors ./Addon.dhall + +in addon.Postgresql { name = "pg", env_prefix = "POSTGRESQL_ADDON" } diff --git a/dhall/addon/functions.dhall b/dhall/addon/functions.dhall new file mode 100644 index 0000000..65979ac --- /dev/null +++ b/dhall/addon/functions.dhall @@ -0,0 +1 @@ +{ Postgresql = ./Postgresql.dhall } diff --git a/dhall/environment/Environment.dhall b/dhall/environment/Environment.dhall new file mode 100644 index 0000000..68514c9 --- /dev/null +++ b/dhall/environment/Environment.dhall @@ -0,0 +1 @@ +{ FORCE_HTTPS : Bool } diff --git a/dhall/functions.dhall b/dhall/functions.dhall new file mode 100644 index 0000000..f047c19 --- /dev/null +++ b/dhall/functions.dhall @@ -0,0 +1 @@ +{ Addon = ./addon/functions.dhall, mkConfig = ./mkConfig.dhall } diff --git a/dhall/mkConfig.dhall b/dhall/mkConfig.dhall new file mode 100644 index 0000000..5040f1c --- /dev/null +++ b/dhall/mkConfig.dhall @@ -0,0 +1,44 @@ + let Config = ./Config.dhall + +in let Vault = ./Vault.dhall + +in let Addon = ./addon/Addon.dhall + +in let Environment = ./environment/Environment.dhall + +in let nonifyEmpty = + λ(opt : Optional Text) + → Optional/fold Text opt Text (λ(x : Text) → x) "None" + +in λ(vault : Vault) + → λ(app : Text) + → λ(entryPoint : Text) + → λ(metrics : Bool) + → λ(syslogServer : Optional Text) + → λ(domain : Optional Text) + → λ(tasksFile : Optional Text) + → λ(addons : List Addon) + → { clever_app = + app + , clever_orga = + vault.organization + , clever_secret = + vault.secret + , clever_token = + vault.token + , clever_syslog_server = + nonifyEmpty syslogServer + , clever_domain = + nonifyEmpty domain + , clever_app_tasks_file = + nonifyEmpty tasksFile + , clever_entry_point = + entryPoint + , clever_metrics = + metrics + , clever_addons = + addons + , clever_env = + { FORCE_HTTPS = True } + } + : Config Environment diff --git a/dhall/types.dhall b/dhall/types.dhall new file mode 100644 index 0000000..5e6a81c --- /dev/null +++ b/dhall/types.dhall @@ -0,0 +1,9 @@ +{ Vault = + ./Vault.dhall +, Addon = + ./addon/Addon.dhall +, Environment = + ./environment/Environment.dhall +, Config = + ./Config.dhall +} diff --git a/scripts/dhall_check.sh b/scripts/dhall_check.sh new file mode 100755 index 0000000..a3413ec --- /dev/null +++ b/scripts/dhall_check.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +pushd () { + command pushd "$@" > /dev/null +} + +popd () { + command popd "$@" > /dev/null +} + +go() { + local ERROR=0; + for file in $(find -type f -name "*.dhall"); do + pushd $(dirname $file); + cat $(basename $file) | dhall --explain resolve > /dev/null; + echo "Typechecking ${file}" + if [ "$?" -ne "0" ]; then + echo "Failed to resolve $file" + ERROR=1; + fi; + popd; + done; + exit $ERROR; +} + +go