From b83cbe062c72a93517d7cb9be6cec96f938ba808 Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Mon, 9 Dec 2019 15:56:31 +0100 Subject: [PATCH 1/5] Parse Agent version --- tasks/main.yml | 2 ++ tasks/parse-version.yml | 48 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tasks/parse-version.yml diff --git a/tasks/main.yml b/tasks/main.yml index c1b24cd7..d3620025 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,4 +1,6 @@ --- +- include_tasks: parse-version.yml + - include_tasks: pkg-debian.yml when: ansible_os_family == "Debian" diff --git a/tasks/parse-version.yml b/tasks/parse-version.yml new file mode 100644 index 00000000..5dcda562 --- /dev/null +++ b/tasks/parse-version.yml @@ -0,0 +1,48 @@ +--- +- name: Parse Agent version + set_fact: + agent_version: "{{ datadog_agent_version | regex_search(regexp, '\\g', '\\g', '\\g', '\\g', '\\g', '\\g') }}" + vars: + regexp: '(?:(?P[0-9]+):)?(?P[0-9]+)\.(?P[0-9]+)\.(?P[0-9]+)(?P[^-\s]+)?(?:-(?P[0-9]+))?' + +- name: Set version vars + set_fact: + datadog_epoch: "{{ agent_version.0 }}" + datadog_major: "{{ agent_version.1 }}" + datadog_minor: "{{ agent_version.2 }}" + datadog_bugfix: "{{ agent_version.3 }}" + datadog_suffix: "{{ agent_version.4 }}" + datadog_release: "{{ agent_version.5 }}" + +- name: Fill empty version epoch with default + set_fact: + datadog_epoch: "1" + when: datadog_epoch | length == 0 + +- name: Fill empty version release with default + set_fact: + datadog_release: "1" + when: datadog_release | length == 0 + +- name: Set OS-specific versions + set_fact: + datadog_agent_debian_version: "{{ datadog_epoch }}:{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}-{{ datadog_release }}" + datadog_agent_redhat_version: "{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}-{{ datadog_release }}" + datadog_agent_suse_version: "{{ datadog_epoch }}:{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}-{{ datadog_release }}" + datadog_agent_windows_version: "{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}" + +- name: Print + debug: + var: datadog_agent_debian_version + +- name: Print + debug: + var: datadog_agent_redhat_version + +- name: Print + debug: + var: datadog_agent_suse_version + +- name: Print + debug: + var: datadog_agent_windows_version \ No newline at end of file From 39540a74b4d6620be840b2e8ae2a423ac1ab7b7e Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Mon, 9 Dec 2019 17:14:37 +0100 Subject: [PATCH 2/5] Replace installed version with per-OS version --- tasks/parse-version.yml | 16 ---------------- tasks/pkg-debian.yml | 6 +++--- tasks/pkg-redhat.yml | 6 +++--- tasks/pkg-suse.yml | 6 +++--- tasks/pkg-windows.yml | 4 ++-- tasks/win_agent_version.yml | 2 +- 6 files changed, 12 insertions(+), 28 deletions(-) diff --git a/tasks/parse-version.yml b/tasks/parse-version.yml index 5dcda562..36c56ce0 100644 --- a/tasks/parse-version.yml +++ b/tasks/parse-version.yml @@ -30,19 +30,3 @@ datadog_agent_redhat_version: "{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}-{{ datadog_release }}" datadog_agent_suse_version: "{{ datadog_epoch }}:{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}-{{ datadog_release }}" datadog_agent_windows_version: "{{ datadog_major }}.{{ datadog_minor }}.{{ datadog_bugfix }}{{ datadog_suffix }}" - -- name: Print - debug: - var: datadog_agent_debian_version - -- name: Print - debug: - var: datadog_agent_redhat_version - -- name: Print - debug: - var: datadog_agent_suse_version - -- name: Print - debug: - var: datadog_agent_windows_version \ No newline at end of file diff --git a/tasks/pkg-debian.yml b/tasks/pkg-debian.yml index 99a4e37d..6d69a683 100644 --- a/tasks/pkg-debian.yml +++ b/tasks/pkg-debian.yml @@ -49,12 +49,12 @@ - name: Ensure pinned version of Datadog agent is installed apt: - name: "datadog-agent={{ datadog_agent_version }}" + name: "datadog-agent={{ datadog_agent_debian_version }}" state: present force: "{{ datadog_agent_allow_downgrade }}" update_cache: yes cache_valid_time: "{{ datadog_apt_cache_valid_time }}" - when: (datadog_agent_version | length != 0) and (not ansible_check_mode) + when: (datadog_agent_debian_version is defined) and (not ansible_check_mode) - name: Ensure Datadog agent is installed apt: @@ -62,4 +62,4 @@ state: latest # noqa 403 update_cache: yes cache_valid_time: "{{ datadog_apt_cache_valid_time }}" - when: (datadog_agent_version | length == 0) and (not ansible_check_mode) + when: (datadog_agent_debian_version is not defined) and (not ansible_check_mode) diff --git a/tasks/pkg-redhat.yml b/tasks/pkg-redhat.yml index ca44512d..6e08161e 100644 --- a/tasks/pkg-redhat.yml +++ b/tasks/pkg-redhat.yml @@ -33,10 +33,10 @@ - name: Install pinned datadog-agent package yum: - name: "datadog-agent-{{ datadog_agent_version }}" + name: "datadog-agent-{{ datadog_agent_redhat_version }}" state: present allow_downgrade: "{{ datadog_agent_allow_downgrade }}" - when: (datadog_agent_version | length != 0) and (not ansible_check_mode) + when: (datadog_agent_redhat_version is defined) and (not ansible_check_mode) notify: restart datadog-agent - name: Install latest datadog-agent package @@ -44,4 +44,4 @@ name: datadog-agent update_cache: yes state: latest # noqa 403 - when: (datadog_agent_version | length == 0) and (not ansible_check_mode) + when: (datadog_agent_redhat_version is not defined) and (not ansible_check_mode) diff --git a/tasks/pkg-suse.yml b/tasks/pkg-suse.yml index 384d3bcd..57b8a189 100644 --- a/tasks/pkg-suse.yml +++ b/tasks/pkg-suse.yml @@ -67,15 +67,15 @@ - name: Install pinned datadog-agent package zypper: - name: "datadog-agent={{ datadog_agent_version }}" + name: "datadog-agent={{ datadog_agent_suse_version }}" state: present oldpackage: "{{ datadog_agent_allow_downgrade }}" - when: (datadog_agent_version | length != 0) and (not ansible_check_mode) + when: (datadog_agent_suse_version is defined) and (not ansible_check_mode) notify: restart datadog-agent - name: Install latest datadog-agent package zypper: name: datadog-agent state: latest # noqa 403 - when: (datadog_agent_version | length == 0) and (not ansible_check_mode) + when: (datadog_agent_suse_version is not defined) and (not ansible_check_mode) notify: restart datadog-agent diff --git a/tasks/pkg-windows.yml b/tasks/pkg-windows.yml index 71eb0c6b..84446448 100644 --- a/tasks/pkg-windows.yml +++ b/tasks/pkg-windows.yml @@ -15,10 +15,10 @@ &$env:temp\fix_6_14.ps1 - include_tasks: win_agent_6_latest.yml - when: not datadog_agent5 and (datadog_agent_version | length == 0) + when: datadog_agent_windows_version is not defined - include_tasks: win_agent_version.yml - when: not datadog_agent_version | length == 0 + when: datadog_agent_windows_version is defined - name: show URL var debug: diff --git a/tasks/win_agent_version.yml b/tasks/win_agent_version.yml index e559e2f2..96a0d93e 100644 --- a/tasks/win_agent_version.yml +++ b/tasks/win_agent_version.yml @@ -7,4 +7,4 @@ - name: set agent download filename to a specific version set_fact: - dd_download_url: "{{ datadog_windows_versioned_url }}-{{ datadog_agent_version }}.msi" + dd_download_url: "{{ datadog_windows_versioned_url }}-{{ datadog_agent_windows_version }}.msi" From 92573f4322ce4f44da3273405cd4eccaf78b13b6 Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Mon, 9 Dec 2019 17:57:12 +0100 Subject: [PATCH 3/5] Add README entry --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index d636840f..81c307e3 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,29 @@ ansible-galaxy install Datadog.datadog | `datadog_additional_groups` | Comma separated list of additional groups for the `datadog_user`. Linux only. | | `datadog_windows_ddagentuser_name` | Name of windows user to create/use, in the format `\`. Windows only. | | `datadog_windows_ddagentuser_password` | Password to use to create the user, and/or register the service. Windows only. | +## datadog_agent_version variable + +Starting with version 3 of this role, when the `datadog_agent_version` variable is used to pin a specific Agent version, the role will derive per-OS version names to comply with the version naming schemes of the operating systems we support (eg. `1:7.16.0-1` for Debian- and SUSE- based, `7.16.0-1` for Redhat-based and `7.16.0` for Windows). + +This makes it possible to target hosts running different operating systems in the same Ansible run. + +For instance, you can now provide: + +```yaml +datadog_agent_version: 7.16.0 +``` + +and the role will install `1:7.16.0-1` on Debian- and SUSE-based systems, `7.16.0-1` on Redhat-based systems, and `7.16.0` on Windows +(if not provided, the role uses `1` as the epoch, and `1` as the release number). + +Alternatively, you can provide: + +```yaml +datadog_agent_version: 1:7.16.0-1 +``` + +and the role will install `1:7.16.0-1` on Debian- and SUSE-based systems, `7.16.0-1` on Redhat-based systems, and `7.16.0` on Windows. + ## Agent 5 (older version) From f8b5845c7e6f5b8b86a25d817f4d7a38781e1c7a Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Mon, 9 Dec 2019 18:15:29 +0100 Subject: [PATCH 4/5] Do not parse datadog_agent_version if it does not exist --- tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/main.yml b/tasks/main.yml index d3620025..bf7c6563 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,5 +1,6 @@ --- - include_tasks: parse-version.yml + when: datadog_agent_version | length > 0 - include_tasks: pkg-debian.yml when: ansible_os_family == "Debian" From 1b15efab1fabf10b35f3ba21505ba0acaee99ff9 Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Mon, 9 Dec 2019 18:20:06 +0100 Subject: [PATCH 5/5] Run once for all hosts --- tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/main.yml b/tasks/main.yml index bf7c6563..08900ba9 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,6 +1,7 @@ --- - include_tasks: parse-version.yml when: datadog_agent_version | length > 0 + run_once: true - include_tasks: pkg-debian.yml when: ansible_os_family == "Debian"