ansible-taler-exchange

Ansible playbook to deploy a production Taler Exchange
Log | Files | Refs | Submodules | README | LICENSE

commit 778ad61d3e44f427eceee65bd9f29e670f0728ba
parent 15e15b0bfdbfb4f4c74685144129223b35ebc2f5
Author: Florian Dold <florian@dold.me>
Date:   Tue, 20 May 2025 02:12:27 +0200

basic GLS-style setup (#9982)

Diffstat:
Minventories/group_vars/all/defaults.yml | 7+++++--
Minventories/host_vars/fdold-acai-gls/test-public.yml | 8+++++---
Mroles/libeufin-nexus/tasks/main.yml | 46++++++++++++++++++++++++++++++++++++++++++----
Mroles/libeufin-nexus/templates/etc/libeufin/libeufin-nexus-ebics.conf.j2 | 3+++
Mtesting-offline/fdold-acai-gls.conf | 2+-
Atesting-offline/fdold-acai-gls.sh | 18++++++++++++++++++
6 files changed, 74 insertions(+), 10 deletions(-)

diff --git a/inventories/group_vars/all/defaults.yml b/inventories/group_vars/all/defaults.yml @@ -7,4 +7,7 @@ deploy_auditor: true deploy_challenger: false # Deploy monitoring? -deploy_monitoring: true -\ No newline at end of file +deploy_monitoring: true + +# If true, use EBICS keys from that were externally created. +ebics_keys_external: false +\ No newline at end of file diff --git a/inventories/host_vars/fdold-acai-gls/test-public.yml b/inventories/host_vars/fdold-acai-gls/test-public.yml @@ -5,6 +5,10 @@ USE_PREGENERATED_DHPARAM: true # No auditor (yet) deploy_auditor: false deploy_monitoring: false +# We use EBICS to talk to the bank. +use_ebics: true +# Use externally created EBICS keys. +ebics_keys_external: true # Main domain name. DOMAIN_NAME: "glstest.fdold.eu" # High-level kind of deployment. @@ -22,8 +26,6 @@ TARGET_HOST_NAME: "acai.box.fdold.eu" DISABLE_RESTORE_BACKUP: true # Use nightly Taler distro (true/false). USE_NIGHTLY: false -# Deploy EBICS configuration (true/false). -use_ebics: false # Our currency. CURRENCY: EUR # Smallest unit of the currency for wire transfers. @@ -31,7 +33,7 @@ CURRENCY_ROUND_UNIT: "EUR:0.01" # Base URL of the exchange REST API EXCHANGE_BASE_URL: "https://exchange.{{ DOMAIN_NAME }}/" # Exchange offline master public key. -EXCHANGE_MASTER_PUB: GT1ZRF6DT4RAETDEGW3KTWRH15RAKH9T0TK6ZJEYFGRX18B54AK0 +EXCHANGE_MASTER_PUB: X84658KACCBRWMM7FS3TGGRZB0NFF6TWMMXDVCQG46WW84S40SVG # URL with merchants accepting this exchange. EXCHANGE_SHOPPING_URL: "https://shops.taler.gls.de/" # Name of Terms of service resource file diff --git a/roles/libeufin-nexus/tasks/main.yml b/roles/libeufin-nexus/tasks/main.yml @@ -71,12 +71,49 @@ - name: Setup libeufin database ansible.builtin.command: cmd: libeufin-dbconfig --only-nexus -# FIXME: pass "--bank-config=/etc/libeufin/libeufin-nexus.conf" once libeufin 0.14.x is out! chdir: /tmp - name: Show vars ansible.builtin.setup: +- name: Check if EBICS client keys exist. + stat: + path: /var/lib/libeufin-nexus/client-ebics-keys.json + register: stat_result + +- name: Fail if external client keys are missing. + fail: + msg: External EBICS client keys missing + when: ebics_keys_external and not stat_result.stat.exists + +- name: Adjust EBICS client keys permissions + file: + path: "/var/lib/libeufin-nexus/client-ebics-keys.json" + state: file + mode: "0400" + owner: libeufin-nexus + group: libeufin-nexus + when: ebics_keys_external and stat_result.stat.exists + +- name: Check if EBICS bank keys exist. + stat: + path: /var/lib/libeufin-nexus/bank-ebics-keys.json + register: stat_result + +- name: Fail if external bank keys are missing. + fail: + msg: External EBICS bank keys missing + when: ebics_keys_external and not stat_result.stat.exists + +- name: Adjust EBICS client keys permissions + file: + path: "/var/lib/libeufin-nexus/bank-ebics-keys.json" + state: file + mode: "0400" + owner: libeufin-nexus + group: libeufin-nexus + when: ebics_keys_external and stat_result.stat.exists + # FIXME: this step currently fails with pofi, seems command wants # extra arguments to do PDF letter generation? - name: EBICS setup @@ -100,7 +137,6 @@ name: libeufin-nexus-httpd.service state: started enabled: true - when: not use_ebics - name: Place login script for libeufin-nexus-import technical user ansible.builtin.copy: @@ -109,6 +145,7 @@ owner: root group: root mode: "0755" + when: not use_ebics - name: Place login script for libeufin-nexus-export technical user ansible.builtin.copy: @@ -117,6 +154,7 @@ owner: root group: root mode: "0755" + when: not use_ebics - name: Ensure group for libeufin-nexus-import exists group: @@ -133,7 +171,7 @@ name: libeufin-nexus-import group: libeufin-nexus-import shell: /usr/local/bin/libeufin-nexus-import.sh - password: '!' + password: "!" when: not use_ebics - name: Ensure technical user for libeufin-nexus export exists @@ -141,7 +179,7 @@ name: libeufin-nexus-export group: libeufin-nexus-export shell: /usr/local/bin/libeufin-nexus-export.sh - password: '!' + password: "!" when: not use_ebics - name: Grant sudo rights to login script for importer diff --git a/roles/libeufin-nexus/templates/etc/libeufin/libeufin-nexus-ebics.conf.j2 b/roles/libeufin-nexus/templates/etc/libeufin/libeufin-nexus-ebics.conf.j2 @@ -14,3 +14,5 @@ PARTNER_ID = {{ LIBEUFIN_NEXUS_EBICS_PARTNER_ID }} # EBICS partner ID, as assigned by the bank. # ??? SYSTEM_ID = {{ LIBEUFIN_NEXUS_EBICS_SYSTEM_ID }} + +BANK_DIALECT = {{ LIBEUFIN_NEXUS_EBICS_BANK_DIALECT }} +\ No newline at end of file diff --git a/testing-offline/fdold-acai-gls.conf b/testing-offline/fdold-acai-gls.conf @@ -3,5 +3,5 @@ CURRENCY = EUR BASE_URL = https://exchange.glstest.fdold.eu/ [exchange-offline] -MASTER_PRIV_FILE = testing-offline/fdold-acai-gls-master.priv +MASTER_PRIV_FILE = fdold-acai-gls-master.priv SECM_TOFU_FILE = /tmp/fdold-acaci-gls-tofu.pub diff --git a/testing-offline/fdold-acai-gls.sh b/testing-offline/fdold-acai-gls.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -eu +set -x + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +taler-exchange-offline -c "$SCRIPT_DIR/fdold-acai-gls.conf" \ + download sign upload + +taler-exchange-offline -c "$SCRIPT_DIR/fdold-acai-gls.conf" \ + wire-fee 2025 iban EUR:0 EUR:0 \ + global-fee 2025 EUR:0 EUR:0 EUR:0 "1 d" "1 year" 1000 \ + wire-fee 2026 iban EUR:0 EUR:0 \ + global-fee 2026 EUR:0 EUR:0 EUR:0 "1 d" "1 year" 1000 \ + enable-account 'payto://iban/DE88430609678937360305?receiver-name=GLS+Taler%2FVerrechnungskonto' \ + upload +