From f10037152b6d4e29359e16cbb2f0f0674624e2f3 Mon Sep 17 00:00:00 2001 From: Katya Ryazantseva Date: Wed, 7 Jan 2026 00:39:29 +0100 Subject: [PATCH 1/4] fix: add clean-data playbook to prevent storage issues --- ansible/playbooks/clean-data.yml | 114 ++++++++++++++++++++++++ ansible/playbooks/site.yml | 15 +++- ansible/roles/lantern/tasks/main.yml | 13 ++- ansible/roles/lighthouse/tasks/main.yml | 13 ++- ansible/roles/qlean/tasks/main.yml | 13 ++- ansible/roles/ream/tasks/main.yml | 13 ++- ansible/roles/zeam/tasks/main.yml | 13 ++- 7 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 ansible/playbooks/clean-data.yml diff --git a/ansible/playbooks/clean-data.yml b/ansible/playbooks/clean-data.yml new file mode 100644 index 0000000..84d2857 --- /dev/null +++ b/ansible/playbooks/clean-data.yml @@ -0,0 +1,114 @@ +--- +# Clean data playbook: Clean node data directories + +- name: Parse and validate node names + hosts: localhost + connection: local + gather_facts: no + vars: + validator_config_file: "{{ genesis_dir }}/validator-config.yaml" + tags: + - zeam + - ream + - qlean + - lantern + - lighthouse + - deploy + + tasks: + - name: Validate validator-config.yaml exists + stat: + path: "{{ validator_config_file }}" + register: validator_config_stat + + - name: Fail if validator-config.yaml missing + fail: + msg: "validator-config.yaml not found at {{ validator_config_file }}" + when: not validator_config_stat.stat.exists + + - name: Extract all node names + shell: | + yq eval '.validators[].name' {{ validator_config_file }} + register: all_node_names_raw + changed_when: false + + - name: Set all node names + set_fact: + all_node_names: "{{ all_node_names_raw.stdout_lines }}" + + - name: Fail if node_names is not specified + fail: + msg: "node_names must be specified. Provide one or more node names (comma or space separated)." + when: node_names is not defined or node_names == "" + + - name: Handle "all" node names - expand to all nodes + set_fact: + clean_nodes: "{{ all_node_names }}" + when: + - node_names is defined + - node_names == "all" + + - name: Parse node names if provided as comma-separated string + set_fact: + clean_nodes: "{{ node_names.split(',') | map('trim') | list }}" + when: + - node_names is defined + - node_names is string + - node_names != "all" + - '("," in node_names)' + + - name: Parse node names if provided as space-separated string + set_fact: + clean_nodes: "{{ node_names.split(' ') | map('trim') | select('length') | list }}" + when: + - node_names is defined + - node_names is string + - node_names != "all" + - '("," not in node_names)' + - '(" " in node_names)' + + - name: Handle single node name + set_fact: + clean_nodes: "{{ [node_names] }}" + when: + - node_names is defined + - node_names is string + - node_names != "all" + - '"," not in node_names' + - '" " not in node_names' + + - name: Display nodes to clean + debug: + msg: "Cleaning data directories for nodes: {{ clean_nodes | join(', ') }}" + + - name: Add nodes to clean_targets group + add_host: + name: "{{ item }}" + groups: clean_targets + loop: "{{ clean_nodes }}" + +- name: Clean node data directories on remote hosts + hosts: clean_targets + gather_facts: no + vars: + # Use remote paths on remote hosts + data_dir: "{{ remote_data_dir | default('/opt/lean-quickstart/data') }}" + node_name: "{{ inventory_hostname }}" + tags: + - zeam + - ream + - qlean + - lantern + - lighthouse + - deploy + + tasks: + - name: Clean node data directory + file: + path: "{{ data_dir }}/{{ node_name }}" + state: absent + become: yes + + - name: Display cleaned directory + debug: + msg: "Cleaned data directory: {{ data_dir }}/{{ node_name }}" diff --git a/ansible/playbooks/site.yml b/ansible/playbooks/site.yml index c62bf91..27b7bdb 100644 --- a/ansible/playbooks/site.yml +++ b/ansible/playbooks/site.yml @@ -1,8 +1,9 @@ --- # Main site playbook: Complete deployment workflow -# 1. Generate genesis files locally (including .key files) -# 2. Copy genesis files to remote hosts -# 3. Deploy nodes +# 1. Clean data directories (if clean_data=true) +# 2. Generate genesis files locally (including .key files) +# 3. Copy genesis files to remote hosts +# 4. Deploy nodes # # Usage: # ansible-playbook -i inventory/hosts.yml playbooks/site.yml \ @@ -13,9 +14,17 @@ # network_dir - Path to network directory (genesis_dir derived from this) # genesis_dir - Path to genesis directory (required) # node_names - Nodes to deploy: "all" or comma-separated names +# clean_data - Set to true to clean data directories before deployment (default: false) # skip_genesis - Set to true to skip genesis generation (default: false) # genesis_offset - Seconds to add to current time for genesis (default: 360 for ansible mode) +- name: Clean Data Directories + import_playbook: clean-data.yml + vars: + genesis_dir: "{{ network_dir }}/genesis" + node_names: "{{ node_names }}" + when: clean_data | default(false) | bool + - name: Generate Genesis Files import_playbook: generate-genesis.yml vars: diff --git a/ansible/roles/lantern/tasks/main.yml b/ansible/roles/lantern/tasks/main.yml index 9932194..34fbeec 100644 --- a/ansible/roles/lantern/tasks/main.yml +++ b/ansible/roles/lantern/tasks/main.yml @@ -60,11 +60,22 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) +- name: Check if node data directory has contents + find: + paths: "{{ data_dir }}/{{ node_name }}" + file_type: any + hidden: yes + register: node_data_contents + failed_when: false + when: clean_data | default(false) | bool + - name: Clean node data directory file: path: "{{ data_dir }}/{{ node_name }}" state: absent - when: clean_data | default(false) | bool + when: + - clean_data | default(false) | bool + - node_data_contents.matched | default(0) > 0 - name: Create node data directory file: diff --git a/ansible/roles/lighthouse/tasks/main.yml b/ansible/roles/lighthouse/tasks/main.yml index feed56c..88d3fbf 100644 --- a/ansible/roles/lighthouse/tasks/main.yml +++ b/ansible/roles/lighthouse/tasks/main.yml @@ -58,11 +58,22 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) +- name: Check if node data directory has contents + find: + paths: "{{ data_dir }}/{{ node_name }}" + file_type: any + hidden: yes + register: node_data_contents + failed_when: false + when: clean_data | default(false) | bool + - name: Clean node data directory file: path: "{{ data_dir }}/{{ node_name }}" state: absent - when: clean_data | default(false) | bool + when: + - clean_data | default(false) | bool + - node_data_contents.matched | default(0) > 0 - name: Create node data directory file: diff --git a/ansible/roles/qlean/tasks/main.yml b/ansible/roles/qlean/tasks/main.yml index eaf1c5a..b6911bf 100644 --- a/ansible/roles/qlean/tasks/main.yml +++ b/ansible/roles/qlean/tasks/main.yml @@ -72,11 +72,22 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) +- name: Check if node data directory has contents + find: + paths: "{{ data_dir }}/{{ node_name }}" + file_type: any + hidden: yes + register: node_data_contents + failed_when: false + when: clean_data | default(false) | bool + - name: Clean node data directory file: path: "{{ data_dir }}/{{ node_name }}" state: absent - when: clean_data | default(false) | bool + when: + - clean_data | default(false) | bool + - node_data_contents.matched | default(0) > 0 - name: Create node data directory file: diff --git a/ansible/roles/ream/tasks/main.yml b/ansible/roles/ream/tasks/main.yml index 1ed3326..385731a 100644 --- a/ansible/roles/ream/tasks/main.yml +++ b/ansible/roles/ream/tasks/main.yml @@ -60,11 +60,22 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) +- name: Check if node data directory has contents + find: + paths: "{{ data_dir }}/{{ node_name }}" + file_type: any + hidden: yes + register: node_data_contents + failed_when: false + when: clean_data | default(false) | bool + - name: Clean node data directory file: path: "{{ data_dir }}/{{ node_name }}" state: absent - when: clean_data | default(false) | bool + when: + - clean_data | default(false) | bool + - node_data_contents.matched | default(0) > 0 - name: Create node data directory file: diff --git a/ansible/roles/zeam/tasks/main.yml b/ansible/roles/zeam/tasks/main.yml index a0936c9..bdc0f39 100644 --- a/ansible/roles/zeam/tasks/main.yml +++ b/ansible/roles/zeam/tasks/main.yml @@ -65,11 +65,22 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) +- name: Check if node data directory has contents + find: + paths: "{{ data_dir }}/{{ node_name }}" + file_type: any + hidden: yes + register: node_data_contents + failed_when: false + when: clean_data | default(false) | bool + - name: Clean node data directory file: path: "{{ data_dir }}/{{ node_name }}" state: absent - when: clean_data | default(false) | bool + when: + - clean_data | default(false) | bool + - node_data_contents.matched | default(0) > 0 - name: Create node data directory file: From 8a0129f99df3ac9fb3d2a97e6507baa285d48c07 Mon Sep 17 00:00:00 2001 From: Katya Ryazantseva Date: Tue, 13 Jan 2026 23:36:31 +0100 Subject: [PATCH 2/4] fix: use raw module for cleaning --- ansible/playbooks/clean-data.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ansible/playbooks/clean-data.yml b/ansible/playbooks/clean-data.yml index 84d2857..a2a8368 100644 --- a/ansible/playbooks/clean-data.yml +++ b/ansible/playbooks/clean-data.yml @@ -26,6 +26,18 @@ msg: "validator-config.yaml not found at {{ validator_config_file }}" when: not validator_config_stat.stat.exists + - name: Verify yq is available + command: yq --version + register: yq_version + changed_when: false + failed_when: false + ignore_errors: true + + - name: Fail if yq is not available + fail: + msg: "yq is required but not installed. Install on macOS: brew install yq, or see https://github.com/mikefarah/yq" + when: yq_version.rc != 0 + - name: Extract all node names shell: | yq eval '.validators[].name' {{ validator_config_file }} @@ -104,10 +116,7 @@ tasks: - name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - become: yes + raw: rm -rf {{ data_dir }}/{{ node_name }} - name: Display cleaned directory debug: From 34f9d72881ca5f4ab95958bf85f4460a44fd3405 Mon Sep 17 00:00:00 2001 From: Katya Ryazantseva Date: Wed, 14 Jan 2026 11:04:35 +0100 Subject: [PATCH 3/4] fix: remove cleaning from role level --- .../{clean-data.yml => clean-node-data.yml} | 0 ansible/playbooks/deploy-nodes.yml | 15 ++++++++++++++- .../{ => helpers}/deploy-single-node.yml | 0 ansible/playbooks/site.yml | 3 ++- ansible/roles/lantern/tasks/main.yml | 17 ----------------- ansible/roles/lighthouse/tasks/main.yml | 17 ----------------- ansible/roles/qlean/tasks/main.yml | 17 ----------------- ansible/roles/ream/tasks/main.yml | 17 ----------------- ansible/roles/zeam/tasks/main.yml | 17 ----------------- 9 files changed, 16 insertions(+), 87 deletions(-) rename ansible/playbooks/{clean-data.yml => clean-node-data.yml} (100%) rename ansible/playbooks/{ => helpers}/deploy-single-node.yml (100%) diff --git a/ansible/playbooks/clean-data.yml b/ansible/playbooks/clean-node-data.yml similarity index 100% rename from ansible/playbooks/clean-data.yml rename to ansible/playbooks/clean-node-data.yml diff --git a/ansible/playbooks/deploy-nodes.yml b/ansible/playbooks/deploy-nodes.yml index b163338..edb2efc 100644 --- a/ansible/playbooks/deploy-nodes.yml +++ b/ansible/playbooks/deploy-nodes.yml @@ -94,6 +94,19 @@ node_name: "{{ inventory_hostname }}" tasks: + - name: Clean node data directory + raw: rm -rf {{ data_dir }}/{{ node_name }} + when: + - clean_data | default(false) | bool + - not (skip_role_cleaning | default(false) | bool) + tags: + - zeam + - ream + - qlean + - lantern + - lighthouse + - deploy + - name: Include common role include_role: name: common @@ -104,7 +117,7 @@ - deploy - name: Deploy this node - include_tasks: deploy-single-node.yml + include_tasks: helpers/deploy-single-node.yml vars: node_name: "{{ inventory_hostname }}" tags: diff --git a/ansible/playbooks/deploy-single-node.yml b/ansible/playbooks/helpers/deploy-single-node.yml similarity index 100% rename from ansible/playbooks/deploy-single-node.yml rename to ansible/playbooks/helpers/deploy-single-node.yml diff --git a/ansible/playbooks/site.yml b/ansible/playbooks/site.yml index 27b7bdb..fea64cc 100644 --- a/ansible/playbooks/site.yml +++ b/ansible/playbooks/site.yml @@ -19,7 +19,7 @@ # genesis_offset - Seconds to add to current time for genesis (default: 360 for ansible mode) - name: Clean Data Directories - import_playbook: clean-data.yml + import_playbook: clean-node-data.yml vars: genesis_dir: "{{ network_dir }}/genesis" node_names: "{{ node_names }}" @@ -41,3 +41,4 @@ import_playbook: deploy-nodes.yml vars: node_names: "{{ node_names }}" + skip_role_cleaning: "{{ clean_data | default(false) | bool }}" diff --git a/ansible/roles/lantern/tasks/main.yml b/ansible/roles/lantern/tasks/main.yml index 34fbeec..3920ad8 100644 --- a/ansible/roles/lantern/tasks/main.yml +++ b/ansible/roles/lantern/tasks/main.yml @@ -60,23 +60,6 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) -- name: Check if node data directory has contents - find: - paths: "{{ data_dir }}/{{ node_name }}" - file_type: any - hidden: yes - register: node_data_contents - failed_when: false - when: clean_data | default(false) | bool - -- name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - when: - - clean_data | default(false) | bool - - node_data_contents.matched | default(0) > 0 - - name: Create node data directory file: path: "{{ data_dir }}/{{ node_name }}" diff --git a/ansible/roles/lighthouse/tasks/main.yml b/ansible/roles/lighthouse/tasks/main.yml index b24fb6f..b00af77 100644 --- a/ansible/roles/lighthouse/tasks/main.yml +++ b/ansible/roles/lighthouse/tasks/main.yml @@ -60,23 +60,6 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) -- name: Check if node data directory has contents - find: - paths: "{{ data_dir }}/{{ node_name }}" - file_type: any - hidden: yes - register: node_data_contents - failed_when: false - when: clean_data | default(false) | bool - -- name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - when: - - clean_data | default(false) | bool - - node_data_contents.matched | default(0) > 0 - - name: Create node data directory file: path: "{{ data_dir }}/{{ node_name }}" diff --git a/ansible/roles/qlean/tasks/main.yml b/ansible/roles/qlean/tasks/main.yml index 7f06801..69187cb 100644 --- a/ansible/roles/qlean/tasks/main.yml +++ b/ansible/roles/qlean/tasks/main.yml @@ -72,23 +72,6 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) -- name: Check if node data directory has contents - find: - paths: "{{ data_dir }}/{{ node_name }}" - file_type: any - hidden: yes - register: node_data_contents - failed_when: false - when: clean_data | default(false) | bool - -- name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - when: - - clean_data | default(false) | bool - - node_data_contents.matched | default(0) > 0 - - name: Create node data directory file: path: "{{ data_dir }}/{{ node_name }}" diff --git a/ansible/roles/ream/tasks/main.yml b/ansible/roles/ream/tasks/main.yml index 385731a..ba8ccbd 100644 --- a/ansible/roles/ream/tasks/main.yml +++ b/ansible/roles/ream/tasks/main.yml @@ -60,23 +60,6 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) -- name: Check if node data directory has contents - find: - paths: "{{ data_dir }}/{{ node_name }}" - file_type: any - hidden: yes - register: node_data_contents - failed_when: false - when: clean_data | default(false) | bool - -- name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - when: - - clean_data | default(false) | bool - - node_data_contents.matched | default(0) > 0 - - name: Create node data directory file: path: "{{ data_dir }}/{{ node_name }}" diff --git a/ansible/roles/zeam/tasks/main.yml b/ansible/roles/zeam/tasks/main.yml index bdc0f39..a29a319 100644 --- a/ansible/roles/zeam/tasks/main.yml +++ b/ansible/roles/zeam/tasks/main.yml @@ -65,23 +65,6 @@ msg: "Node key file {{ node_name }}.key not found in {{ genesis_dir }}" when: not (node_key_stat.stat.exists | default(false)) -- name: Check if node data directory has contents - find: - paths: "{{ data_dir }}/{{ node_name }}" - file_type: any - hidden: yes - register: node_data_contents - failed_when: false - when: clean_data | default(false) | bool - -- name: Clean node data directory - file: - path: "{{ data_dir }}/{{ node_name }}" - state: absent - when: - - clean_data | default(false) | bool - - node_data_contents.matched | default(0) > 0 - - name: Create node data directory file: path: "{{ data_dir }}/{{ node_name }}" From 49c845ea8be02a3ccb420d68b5242219e8549258 Mon Sep 17 00:00:00 2001 From: Katya Ryazantseva Date: Thu, 15 Jan 2026 12:37:27 +0100 Subject: [PATCH 4/4] fix: update docs, add grandine --- README.md | 23 ++++++++++++++++------- ansible/README.md | 7 +++++-- ansible/playbooks/clean-node-data.yml | 2 ++ ansible/playbooks/deploy-nodes.yml | 1 + 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3b2916a..9497853 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A single command line quickstart to spin up lean node(s) - Uses PK's `eth-beacon-genesis` docker tool (not custom tooling) - Generates PQ keys based on specified configuration in `validator-config.yaml` - Force regen with flag `--forceKeyGen` when supplied with `generateGenesis` -- ✅ Integrates zeam, ream, qlean, lantern (and more incoming...) +- ✅ Integrates zeam, ream, qlean, lantern, lighthouse, grandine - ✅ Configure to run clients in docker or binary mode for easy development - ✅ Linux & Mac compatible & tested - ✅ Option to operate on single or multiple nodes or `all` @@ -114,8 +114,8 @@ NETWORK_DIR=local-devnet ./spin-node.sh --node all --generateGenesis --metrics - If not specified, uses the current user (whoami) for SSH connections - If specified, uses `root` user for SSH connections - Example: `--useRoot` to connect as root user -10. `--tag` specifies the Docker image tag to use for zeam, ream, qlean, and lantern containers. - - If provided, all clients will use this tag (e.g., `blockblaz/zeam:${tag}`, `ghcr.io/reamlabs/ream:${tag}`, `qdrvm/qlean-mini:${tag}`, `piertwo/lantern:${tag}`) +10. `--tag` specifies the Docker image tag to use for zeam, ream, qlean, lantern, lighthouse, and grandine containers. + - If provided, all clients will use this tag (e.g., `blockblaz/zeam:${tag}`, `ghcr.io/reamlabs/ream:${tag}`, `qdrvm/qlean-mini:${tag}`, `piertwo/lantern:${tag}`, `hopinheimer/lighthouse:${tag}`, `sifrai/grandine:${tag}`) - If not provided, defaults to `latest` for zeam, ream, and lantern, and `dd67521` for qlean - The script will automatically pull the specified Docker images before running containers - Example: `--tag devnet0` or `--tag devnet1` @@ -129,6 +129,8 @@ Current following clients are supported: 2. Ream 3. Qlean 4. Lantern +5. Lighthouse +6. Grandine However adding a lean client to this setup is very easy. Feel free to do the PR or reach out to the maintainers. @@ -615,16 +617,23 @@ ansible/ │ └── group_vars/ # Group variables │ └── all.yml # Global variables ├── playbooks/ -│ ├── site.yml # Main playbook (copy genesis + deploy) +│ ├── site.yml # Main playbook (clean + copy genesis + deploy) +│ ├── clean-node-data.yml # Clean node data directories +│ ├── generate-genesis.yml # Generate genesis files │ ├── copy-genesis.yml # Copy genesis files to remote hosts │ ├── deploy-nodes.yml # Node deployment playbook -│ └── deploy-single-node.yml # Helper for single node deployment +│ ├── stop-nodes.yml # Stop and remove nodes +│ └── helpers/ # Helper task files +│ └── deploy-single-node.yml # Single node deployment tasks └── roles/ ├── common/ # Common setup (Docker, yq, directories) ├── genesis/ # Genesis file generation ├── zeam/ # Zeam node role ├── ream/ # Ream node role - └── qlean/ # Qlean node role + ├── qlean/ # Qlean node role + ├── lantern/ # Lantern node role + ├── lighthouse/ # Lighthouse node role + └── grandine/ # Grandine node role ``` ### Remote Deployment @@ -673,7 +682,7 @@ NETWORK_DIR=local-devnet ./spin-node.sh --node all --generateGenesis --deploymen The inventory generator will automatically: - Detect remote IPs (non-localhost) and configure remote connections -- Group nodes by client type (zeam_nodes, ream_nodes, qlean_nodes, lantern_nodes) +- Group nodes by client type (zeam_nodes, ream_nodes, qlean_nodes, lantern_nodes, lighthouse_nodes, grandine_nodes) - Set appropriate connection parameters - Apply SSH key file if provided via `--sshKey` parameter diff --git a/ansible/README.md b/ansible/README.md index 7a4330d..65dd6a1 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -83,7 +83,7 @@ docker ps | grep zeam_0 - `ansible.cfg` - Ansible configuration - `inventory/` - Host inventory and variables - `playbooks/` - Main playbooks -- `roles/` - Reusable role modules (zeam, ream, qlean, lantern, genesis, common) +- `roles/` - Reusable role modules (zeam, ream, qlean, lantern, lighthouse, grandine, genesis, common) - `requirements.yml` - Ansible Galaxy dependencies ## Configuration Source @@ -177,8 +177,11 @@ cd ansible # Check all playbooks ansible-playbook --syntax-check playbooks/site.yml +ansible-playbook --syntax-check playbooks/clean-node-data.yml +ansible-playbook --syntax-check playbooks/generate-genesis.yml ansible-playbook --syntax-check playbooks/copy-genesis.yml ansible-playbook --syntax-check playbooks/deploy-nodes.yml +ansible-playbook --syntax-check playbooks/stop-nodes.yml ``` ### Phase 3: Test Genesis File Copying @@ -511,7 +514,7 @@ This section covers how to test the latest changes that extract docker images an - Docker images and deployment modes are now automatically extracted from `client-cmds/*-cmd.sh` files - This ensures consistency between `spin-node.sh` (local) and Ansible (remote) deployments -- All client roles (zeam, ream, qlean, lantern) now use this extraction mechanism +- All client roles (zeam, ream, qlean, lantern, lighthouse, grandine) now use this extraction mechanism ### Quick Test diff --git a/ansible/playbooks/clean-node-data.yml b/ansible/playbooks/clean-node-data.yml index a2a8368..4fbab61 100644 --- a/ansible/playbooks/clean-node-data.yml +++ b/ansible/playbooks/clean-node-data.yml @@ -13,6 +13,7 @@ - qlean - lantern - lighthouse + - grandine - deploy tasks: @@ -112,6 +113,7 @@ - qlean - lantern - lighthouse + - grandine - deploy tasks: diff --git a/ansible/playbooks/deploy-nodes.yml b/ansible/playbooks/deploy-nodes.yml index edb2efc..735b6d1 100644 --- a/ansible/playbooks/deploy-nodes.yml +++ b/ansible/playbooks/deploy-nodes.yml @@ -105,6 +105,7 @@ - qlean - lantern - lighthouse + - grandine - deploy - name: Include common role