From 6e34d2a3dcffa2dc1bfe486f82b8ca935596ac31 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Tue, 4 May 2021 10:44:13 +0100
Subject: [PATCH] Update README with reference to test.sh

---
 README.md | 100 ++++++++++++++++++++----------------------------------
 1 file changed, 36 insertions(+), 64 deletions(-)

diff --git a/README.md b/README.md
index b7ea5ef..b6b7928 100644
--- a/README.md
+++ b/README.md
@@ -6,53 +6,6 @@ This playbook will install
 machines, along with the necessary infrastructure (etcd, logging,
 monitoring and alerting).
 
-# Setup
-
-Before running the playbook against test or production environments,
-you'll need to ensure Ansible is set up properly.
-
-## ansible.cfg
-
-Use *ansible-playbook -i hosts.ini* to control the production
-hosts. But first you're going to need a proper ansible.cfg file. There
-are a few important settings that need to be present:
-
-* since some templates use facts from other hosts, if you ever want to
-  run the playbook on a subset of hosts you're going to need a fact
-  cache
-* preferably install Mitogen and set the *strategy* to
-  *mitogen_linear*
-
-Something like the following should do (change the Mitogen path to
-reflect your own installation):
-
-```
-[defaults]
-nocows = 1
-strategy_plugins = /usr/local/mitogen-0.2.9/ansible_mitogen/plugins/strategy
-strategy = mitogen_linear
-force_handlers = True
-fact_caching = jsonfile
-fact_caching_connection = .fact-cachs
-
-[ssh_connection]
-ssh_args = -C -o ControlMaster=auto -o ControlPersist=120s
-control_path_dir = ~/.ansible/cp
-control_path = %(directory)s/%%h-%%r
-pipelining = True
-```
-
-## ANSIBLE\_VAULT\_PASSWORD\_FILE
-
-Decrypt the ansible-vault passphrase from the secrets storage, and
-write it into a file named *.ansible_vault_pw* in this same directory.
-
-Then
-
-```shell
-$ export ANSIBLE_VAULT_PASSWORD_FILE=.ansible_vault_pw
-```
-
 # Configuration
 
 There are some mandatory configuration variables that need to be set
@@ -100,31 +53,50 @@ in the *monitor* group (for redundancy).
 
 # Testing
 
-To test locally (with Vagrant and Virtualbox):
+This repository contains a script to build dynamic, ephemeral test
+environments using virtual machines, so that different combinations of
+Ansible / autoradio / other packages can be tested before deploying
+them to production.
 
 ```shell
-$ vagrant up
-$ export ANSIBLE_HOST_KEY_CHECKING=False
-$ ansible-playbook -i hosts-vagrant.ini site.yml
+$ test.sh my-test
 ```
 
-This will start a 3-node autoradio cluster, with IPs
-10.236.82.10-12. The cluster will be using autoradio packages from the
-default Debian repository.
-
-## Testing with local autoradio builds
-
-If the *source_repository_path* Ansible variable is defined to point
-at the autoradio source repository, the playbook will install
-locally-built autoradio binaries. This can be very useful to quickly
-test local uncommitted changes:
+The above command will generate an Ansible configuration in the
+*my-test* directory, it will start some VMs, and it will run Ansible
+on them deploying the configuration from this repository.
+
+The test environment can be customized by setting environment
+variables when calling test.sh:
+
+* `DIST`: select the Debian distribution to use (default "buster")
+* `LIBVIRT_USER`, `LIBVIRT_HOST`: use libvirt-over-SSH, needs SSH
+passwordless authentication to be set up.
+* `APT_PROXY`: set to the *host:port* address of apt-cacher-ng. When
+using this directive, ensure that the apt-cacher-ng configuration has
+a permissive PassThroughPattern to allow access to https://
+repositories.
+* `VM`: select the VM manager to use, one of "vagrant" (default) or
+"vmine" (used in CI setups).
+* `VERBOSE`: set to a non-empty value to run ansible-playbook with
+increased verbosity.
+* `AUTORADIO_SRC`: if set, points at a local copy of the autoradio
+source repository which will be compiled and installed instead of
+using the default packages from the autoradio Debian repository.
+
+So, for example, if you have a copy of the *autoradio* source
+repository with some local changes that you want to test, you can use:
 
 ```shell
-$ ansible-playbook -i hosts.ini \
-    -e source_repository_path=$HOME/go/src/git.autistici.org/ale/autoradio \
-    site.yml
+$ AUTORADIO_SRC=/path/to/git.autistici.org/ale/autoradio test.sh my-test
 ```
 
+and the test environment in *my-test* will be set up to build
+autoradio from your local sources.
+
+Check the *hosts.ini* file in the my-test directory to find out the IP
+addresses of the virtual machines (which are randomly generated).
+
 ## Test stream
 
 The *test-source.yml* Ansible playbook can be used to quickly setup a
-- 
GitLab