From 7cd11527be674196943e0d34328552cf7e81b2f1 Mon Sep 17 00:00:00 2001 From: Marius Ghita Date: Thu, 15 Feb 2024 20:14:35 +0000 Subject: [PATCH 1/3] fix: workaround ansible inconsistent var handling Context: if a variable is defined within a set_fact module call, and the variable value is used within the new varibles defined via set_fact. If the variable defined already has a value, within the set_fact variables the existing value will be used instead of the newly assigned value. Encounted with Ansible version 2.16.3 Reproduction example: ```yaml - ansible.builtin.set_fact: status: "no a json" - ansible.builtin.shell: > echo "{ \"Self\": { \"Online\": true }, \"Version\": 1.0 }" changed_when: false register: tailscale_status - vars: status: "{{ tailscale_status.stdout | from_json }}" # <- does not take place ansible.builtin.set_fact: tailscale_is_online: "{{ status.Self.Online }}" tailscale_version: "{{ status.Version }}" ``` --- handlers/main.yml | 5 ++++- tasks/install.yml | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/handlers/main.yml b/handlers/main.yml index 857c8ac5..d107d6f4 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -7,8 +7,11 @@ - name: Parse status JSON listen: Confirm Tailscale is Connected - vars: + ansible.builtin.set_fact: status: "{{ tailscale_status.stdout | from_json }}" + +- name: Set facts based on status + listen: Confirm Tailscale is Connected ansible.builtin.set_fact: tailscale_is_online: "{{ status.Self.Online }}" diff --git a/tasks/install.yml b/tasks/install.yml index de6635d2..bd1ed119 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -65,8 +65,10 @@ register: tailscale_status - name: Install | Parse status JSON - vars: + ansible.builtin.set_fact: status: "{{ tailscale_status.stdout | from_json }}" + +- name: Install | Set facts based on status ansible.builtin.set_fact: tailscale_is_online: "{{ status.Self.Online }}" tailscale_version: "{{ status.Version }}" From 857b072e85b0a47ad0eb0fb03805663fa45bd50d Mon Sep 17 00:00:00 2001 From: Marius Ghita Date: Fri, 16 Feb 2024 13:33:02 +0200 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: flowerysong --- handlers/main.yml | 6 +----- tasks/install.yml | 10 ++++------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/handlers/main.yml b/handlers/main.yml index d107d6f4..6dfec116 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -7,13 +7,9 @@ - name: Parse status JSON listen: Confirm Tailscale is Connected - ansible.builtin.set_fact: - status: "{{ tailscale_status.stdout | from_json }}" - -- name: Set facts based on status listen: Confirm Tailscale is Connected ansible.builtin.set_fact: - tailscale_is_online: "{{ status.Self.Online }}" + tailscale_is_online: "{{ (tailscale_status.stdout | from_json).Self.Online }}" - name: Tailscale online status listen: Confirm Tailscale is Connected diff --git a/tasks/install.yml b/tasks/install.yml index bd1ed119..4719173b 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -65,13 +65,11 @@ register: tailscale_status - name: Install | Parse status JSON + vars: + tailscale_status_parsed: "{{ tailscale_status.stdout | from_json }}" ansible.builtin.set_fact: - status: "{{ tailscale_status.stdout | from_json }}" - -- name: Install | Set facts based on status - ansible.builtin.set_fact: - tailscale_is_online: "{{ status.Self.Online }}" - tailscale_version: "{{ status.Version }}" + tailscale_is_online: "{{ tailscale_status_parsed.Self.Online }}" + tailscale_version: "{{ tailscale_status_parsed.Version }}" - name: Install | Tailscale version and online status ansible.builtin.debug: From 284d19c56079e2ed5623bae60156fb2795fa7859 Mon Sep 17 00:00:00 2001 From: Marius Ghita Date: Fri, 16 Feb 2024 15:54:12 +0200 Subject: [PATCH 3/3] fix: remove duplicate listen attribute --- handlers/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/handlers/main.yml b/handlers/main.yml index 6dfec116..f684b429 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -6,7 +6,6 @@ register: tailscale_status - name: Parse status JSON - listen: Confirm Tailscale is Connected listen: Confirm Tailscale is Connected ansible.builtin.set_fact: tailscale_is_online: "{{ (tailscale_status.stdout | from_json).Self.Online }}"