From 0b5cb86ac732b39bd1e158138b2d000c5a780a4a Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:49:35 +0200 Subject: [PATCH 01/11] feat: add Ubuntu 22.04 and 24.04 support --- meta/main.yml | 4 ++ tasks/main.yml | 121 +++++++++++++++++++++++++++++++++++++++++++-- vars/Debian.yml | 15 ++++++ vars/Ubuntu_22.yml | 6 +++ vars/Ubuntu_24.yml | 6 +++ vars/main.yml | 3 ++ 6 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 vars/Debian.yml create mode 100644 vars/Ubuntu_22.yml create mode 100644 vars/Ubuntu_24.yml diff --git a/meta/main.yml b/meta/main.yml index ca237d98..2c99514a 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -20,6 +20,10 @@ galaxy_info: - name: opensuse versions: - "15.5" + - name: Ubuntu + versions: + - "22.04" + - "24.04" galaxy_tags: - centos - containerbuild diff --git a/tasks/main.yml b/tasks/main.yml index fd3cc224..08958c12 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -93,6 +93,24 @@ - ansible_facts["distribution"] in ['CentOS', 'RedHat'] - ansible_facts["distribution_major_version"] is version('10', '=') +- name: Fail on Ubuntu when mssql_ha_configure is requested because it is not supported + fail: + msg: >- + This role does not support mssql_ha_configure on Ubuntu. HA configuration + is only supported on RHEL, CentOS, Fedora, and SLES platforms. + when: + - mssql_ha_configure | bool + - ansible_facts["distribution"] == 'Ubuntu' + +- name: Fail on Ubuntu when mssql_ad_configure is requested because it is not supported + fail: + msg: >- + This role does not support mssql_ad_configure on Ubuntu. AD configuration + is only supported on RHEL platforms. + when: + - mssql_ad_configure | bool + - ansible_facts["distribution"] == 'Ubuntu' + - name: Verify that the user accepts EULA variables assert: that: @@ -249,6 +267,30 @@ state: present register: __mssql_gpg until: __mssql_gpg is success + when: ansible_facts["pkg_mgr"] != 'apt' + +- name: Deploy the GPG key for Microsoft repositories on Ubuntu + when: ansible_facts["pkg_mgr"] == 'apt' + block: + - name: Ensure gnupg is installed for key conversion + apt: + name: gnupg + state: present + update_cache: true + + - name: Download Microsoft GPG key + get_url: + url: "{{ mssql_rpm_key }}" + dest: /tmp/microsoft.asc + mode: '0644' + register: __mssql_gpg + until: __mssql_gpg is success + + - name: Convert Microsoft GPG key to binary keyring format + command: >- + gpg --dearmor -o {{ __mssql_gpg_key_dest }} /tmp/microsoft.asc + args: + creates: "{{ __mssql_gpg_key_dest }}" - name: Prepare for the upgrade on RedHat when: @@ -345,6 +387,52 @@ failed_when: not __zypper_addrepo_server_output.rc in [0, 4] changed_when: __zypper_addrepo_server_output.rc != 4 +- name: Prepare for the upgrade on Ubuntu + when: + - __mssql_current_version is defined + - mssql_upgrade | bool + - ansible_facts["pkg_mgr"] == 'apt' + - __mssql_server_repository_list_url is defined + - __mssql_current_version | int != mssql_version | int + file: + path: /etc/apt/sources.list.d/mssql-server-{{ __mssql_current_version | int }}.list + state: absent + +- name: Configure the Microsoft SQL Server repo on Ubuntu using packages-microsoft-prod.deb + when: + - ansible_facts["pkg_mgr"] == 'apt' + - __mssql_prod_pkg_url is defined + - >- + (__mssql_server_packages not in ansible_facts.packages) or + (mssql_upgrade | bool) + block: + - name: Download packages-microsoft-prod.deb + get_url: + url: "{{ __mssql_prod_pkg_url }}" + dest: /tmp/packages-microsoft-prod.deb + mode: '0644' + + - name: Install packages-microsoft-prod.deb + apt: + deb: /tmp/packages-microsoft-prod.deb + +- name: Configure the Microsoft SQL Server repo on Ubuntu 22 using list file + get_url: + url: "{{ __mssql_server_repository_list_url }}" + dest: /etc/apt/sources.list.d/mssql-server-{{ mssql_version | int }}.list + mode: '0644' + when: + - ansible_facts["pkg_mgr"] == 'apt' + - __mssql_server_repository_list_url is defined + - >- + (__mssql_server_packages not in ansible_facts.packages) or + (mssql_upgrade | bool) + +- name: Update apt cache after configuring Microsoft SQL Server repository + apt: + update_cache: true + when: ansible_facts["pkg_mgr"] == 'apt' + - name: Configure to run as a confined application with SELinux package: name: "{{ __mssql_server_selinux_packages }}" @@ -570,6 +658,20 @@ failed_when: not __zypper_addrepo_tools_output.rc in [0, 4] changed_when: __zypper_addrepo_tools_output.rc != 4 +- name: Configure the Microsoft SQL Server Tools repository on Ubuntu 22 using list file + get_url: + url: "{{ __mssql_client_repository_list_url }}" + dest: /etc/apt/sources.list.d/mssql-release.list + mode: '0644' + when: + - ansible_facts["pkg_mgr"] == 'apt' + - __mssql_client_repository_list_url is defined + +- name: Update apt cache after configuring Microsoft SQL Server Tools repository + apt: + update_cache: true + when: ansible_facts["pkg_mgr"] == 'apt' + - name: Ensure that SQL Server client tools are installed package: name: "{{ __mssql_client_packages }}" @@ -580,6 +682,17 @@ - name: Configure TLS encryption when: mssql_tls_enable is not none block: + - name: Ensure TLS private key directory exists on Debian-family systems + file: + path: "{{ __mssql_tls_private_key_dest_dir }}" + state: directory + owner: mssql + group: mssql + mode: "0700" + when: + - mssql_tls_enable | bool + - ansible_facts["pkg_mgr"] == 'apt' + - name: >- Create certificate and private_key files and set mssql_tls_cert and _private_key @@ -621,8 +734,8 @@ src: "{{ item }}" remote_src: "{{ mssql_tls_remote_src }}" dest: >- - /etc/pki/tls/{{ 'certs' if item == mssql_tls_cert - else 'private' }}/{{ item | basename }} + {{ __mssql_tls_cert_dest_dir if item == mssql_tls_cert + else __mssql_tls_private_key_dest_dir }}/{{ item | basename }} owner: mssql group: mssql mode: "0600" @@ -635,7 +748,7 @@ include_tasks: mssql_conf_setting.yml vars: __mssql_tls_cert_dest: >- - /etc/pki/tls/certs/{{ mssql_tls_cert | basename }} + {{ __mssql_tls_cert_dest_dir }}/{{ mssql_tls_cert | basename }} __mssql_conf_setting: "network tlscert" __mssql_conf_setting_value: >- {{ __mssql_tls_cert_dest if mssql_tls_enable else 'unset' }} @@ -644,7 +757,7 @@ include_tasks: mssql_conf_setting.yml vars: __mssql_tls_private_key_dest: >- - /etc/pki/tls/private/{{ mssql_tls_private_key | basename }} + {{ __mssql_tls_private_key_dest_dir }}/{{ mssql_tls_private_key | basename }} __mssql_conf_setting: "network tlskey" __mssql_conf_setting_value: >- {{ __mssql_tls_private_key_dest if mssql_tls_enable else 'unset' }} diff --git a/vars/Debian.yml b/vars/Debian.yml new file mode 100644 index 00000000..33cb64d8 --- /dev/null +++ b/vars/Debian.yml @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: MIT +--- +__mssql_supported_versions: + - 2022 + - 2025 +__mssql_confined_supported: false +__mssql_tuned_supported: false +__mssql_gpg_key_dest: /usr/share/keyrings/microsoft-prod.gpg +__mssql_tls_cert_dest_dir: /etc/ssl/certs +__mssql_tls_private_key_dest_dir: /etc/ssl/mssql +__mssql_server_repository: '' +__mssql_client_repository: '' +__mssql_client_packages: + - "mssql-tools{{ '' if __sqlcmd_ver | int == 17 else __sqlcmd_ver }}" + - unixodbc-dev diff --git a/vars/Ubuntu_22.yml b/vars/Ubuntu_22.yml new file mode 100644 index 00000000..3cf32d79 --- /dev/null +++ b/vars/Ubuntu_22.yml @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: MIT +--- +__mssql_server_repository_list_url: >- + https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-{{ mssql_version | int }}.list +__mssql_client_repository_list_url: >- + https://packages.microsoft.com/config/ubuntu/22.04/prod.list diff --git a/vars/Ubuntu_24.yml b/vars/Ubuntu_24.yml new file mode 100644 index 00000000..f7ba354d --- /dev/null +++ b/vars/Ubuntu_24.yml @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: MIT +--- +__mssql_prod_pkg_url: >- + https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb +__mssql_supported_versions: + - 2025 diff --git a/vars/main.yml b/vars/main.yml index efaa63ac..8327b9d2 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -33,6 +33,9 @@ __mssql_version_package_mapping: - 2017: 14 - 2019: 15 - 2022: 16 + - 2025: 17 +__mssql_tls_cert_dest_dir: /etc/pki/tls/certs +__mssql_tls_private_key_dest_dir: /etc/pki/tls/private __mssql_keytab_path: /var/opt/mssql/secrets/mssql.keytab __mssql_conf_path: /var/opt/mssql/mssql.conf __mssql_conf_cli: /opt/mssql/bin/mssql-conf From ecb4db33f61ee46257e99cf7f8a5d47c276bdaad Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 12:02:59 +0200 Subject: [PATCH 02/11] Update tasks/main.yml Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- tasks/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 08958c12..a016b39b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -285,6 +285,8 @@ mode: '0644' register: __mssql_gpg until: __mssql_gpg is success + retries: 3 + delay: 5 - name: Convert Microsoft GPG key to binary keyring format command: >- From e816e05a1f3531fd54813e94fbcb783c1cbad662 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 12:03:25 +0200 Subject: [PATCH 03/11] Update tasks/main.yml Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- tasks/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index a016b39b..8752093f 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -684,7 +684,7 @@ - name: Configure TLS encryption when: mssql_tls_enable is not none block: - - name: Ensure TLS private key directory exists on Debian-family systems + - name: Ensure TLS private key directory exists file: path: "{{ __mssql_tls_private_key_dest_dir }}" state: directory @@ -693,7 +693,6 @@ mode: "0700" when: - mssql_tls_enable | bool - - ansible_facts["pkg_mgr"] == 'apt' - name: >- Create certificate and private_key files and set mssql_tls_cert From 3edee4f4abef6d08f21b61f6a349f40dc621d94c Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:28:07 +0200 Subject: [PATCH 04/11] fix ubuntu24 repo --- tasks/main.yml | 15 +++++++++++++-- vars/Ubuntu_24.yml | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 8752093f..2cffa3ed 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -283,16 +283,27 @@ url: "{{ mssql_rpm_key }}" dest: /tmp/microsoft.asc mode: '0644' +<<<<<<< HEAD register: __mssql_gpg until: __mssql_gpg is success retries: 3 delay: 5 +======= + register: __mssql_gpg_download + until: __mssql_gpg_download is success +>>>>>>> c501f4b (fix ubuntu24 repo) - name: Convert Microsoft GPG key to binary keyring format command: >- gpg --dearmor -o {{ __mssql_gpg_key_dest }} /tmp/microsoft.asc - args: - creates: "{{ __mssql_gpg_key_dest }}" + changed_when: __mssql_gpg_download is changed + + - name: Ensure correct permissions on Microsoft GPG keyring + file: + path: "{{ __mssql_gpg_key_dest }}" + owner: root + group: root + mode: '0644' - name: Prepare for the upgrade on RedHat when: diff --git a/vars/Ubuntu_24.yml b/vars/Ubuntu_24.yml index f7ba354d..2e81138c 100644 --- a/vars/Ubuntu_24.yml +++ b/vars/Ubuntu_24.yml @@ -2,5 +2,7 @@ --- __mssql_prod_pkg_url: >- https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb +__mssql_server_repository_list_url: >- + https://packages.microsoft.com/config/ubuntu/24.04/mssql-server-{{ mssql_version | int }}.list __mssql_supported_versions: - 2025 From b7009d52c82c5757f7022f9819ec02d233595910 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:30:09 +0200 Subject: [PATCH 05/11] fix ubuntu24 repo --- tasks/main.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 2cffa3ed..aaa4ff45 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -283,15 +283,10 @@ url: "{{ mssql_rpm_key }}" dest: /tmp/microsoft.asc mode: '0644' -<<<<<<< HEAD - register: __mssql_gpg - until: __mssql_gpg is success - retries: 3 - delay: 5 -======= register: __mssql_gpg_download until: __mssql_gpg_download is success ->>>>>>> c501f4b (fix ubuntu24 repo) + retries: 3 + delay: 5 - name: Convert Microsoft GPG key to binary keyring format command: >- From f674a051808aa83b769b7cde62de2b990577748e Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:44:33 +0200 Subject: [PATCH 06/11] fix: add --batch --no-tty --yes to gpg --dearmor to prevent hang in non-interactive mode --- tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index aaa4ff45..3b0fa5ab 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -290,7 +290,7 @@ - name: Convert Microsoft GPG key to binary keyring format command: >- - gpg --dearmor -o {{ __mssql_gpg_key_dest }} /tmp/microsoft.asc + gpg --batch --no-tty --yes --dearmor -o {{ __mssql_gpg_key_dest }} /tmp/microsoft.asc changed_when: __mssql_gpg_download is changed - name: Ensure correct permissions on Microsoft GPG keyring From c981a7b9ae18136a7b1e346a29671232e61e7e47 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Tue, 28 Apr 2026 16:03:46 +0200 Subject: [PATCH 07/11] fix: add executable: /bin/bash to shell tasks using pipefail for Ubuntu compatibility --- tasks/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 3b0fa5ab..21859bd9 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -463,6 +463,8 @@ else echo "" fi + args: + executable: /bin/bash changed_when: false register: __mssql_errorlog check_mode: false @@ -790,6 +792,8 @@ set -euo pipefail; grep '^forceencryption' {{ __mssql_conf_path }} | sed 's/forceencryption = //g' + args: + executable: /bin/bash changed_when: false failed_when: false register: __mssql_forceencryption_val From d7dee7d4346a787a9f49674c1bfc783e32b81dd0 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:04:51 +0200 Subject: [PATCH 08/11] address PR review feedback on Ubuntu GPG key handling --- tasks/main.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index 21859bd9..f351e8d9 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -288,10 +288,16 @@ retries: 3 delay: 5 + - name: Check if Microsoft GPG keyring already exists + stat: + path: "{{ __mssql_gpg_key_dest }}" + register: __mssql_gpg_key_stat + - name: Convert Microsoft GPG key to binary keyring format command: >- gpg --batch --no-tty --yes --dearmor -o {{ __mssql_gpg_key_dest }} /tmp/microsoft.asc - changed_when: __mssql_gpg_download is changed + when: __mssql_gpg_download is changed or not __mssql_gpg_key_stat.stat.exists + changed_when: __mssql_gpg_download is changed or not __mssql_gpg_key_stat.stat.exists - name: Ensure correct permissions on Microsoft GPG keyring file: @@ -300,6 +306,11 @@ group: root mode: '0644' + - name: Remove temporary Microsoft GPG key file + file: + path: /tmp/microsoft.asc + state: absent + - name: Prepare for the upgrade on RedHat when: - __mssql_current_version is defined @@ -680,6 +691,7 @@ - name: Update apt cache after configuring Microsoft SQL Server Tools repository apt: update_cache: true + cache_valid_time: 3600 when: ansible_facts["pkg_mgr"] == 'apt' - name: Ensure that SQL Server client tools are installed From f1b2514816653651b4b45ac0d0cc79d4262b90b1 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:24:17 +0200 Subject: [PATCH 09/11] fix: make Ubuntu SQL Server list file install idempotent via checksum --- tasks/main.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index f351e8d9..1ccfd5f1 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -435,17 +435,32 @@ apt: deb: /tmp/packages-microsoft-prod.deb -- name: Configure the Microsoft SQL Server repo on Ubuntu 22 using list file - get_url: - url: "{{ __mssql_server_repository_list_url }}" - dest: /etc/apt/sources.list.d/mssql-server-{{ mssql_version | int }}.list - mode: '0644' +- name: Configure the Microsoft SQL Server repo on Ubuntu using list file when: - ansible_facts["pkg_mgr"] == 'apt' - __mssql_server_repository_list_url is defined - >- (__mssql_server_packages not in ansible_facts.packages) or (mssql_upgrade | bool) + block: + - name: Download SQL Server repository list file to temp location + get_url: + url: "{{ __mssql_server_repository_list_url }}" + dest: /tmp/mssql-server-{{ mssql_version | int }}.list + mode: '0644' + force: true + + - name: Install SQL Server repository list file only if content changed + copy: + src: /tmp/mssql-server-{{ mssql_version | int }}.list + dest: /etc/apt/sources.list.d/mssql-server-{{ mssql_version | int }}.list + remote_src: true + mode: '0644' + + - name: Remove temporary SQL Server repository list file + file: + path: /tmp/mssql-server-{{ mssql_version | int }}.list + state: absent - name: Update apt cache after configuring Microsoft SQL Server repository apt: From 5bb5c121f76126e7cd5cbd9092aff2231c42642c Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:26:51 +0200 Subject: [PATCH 10/11] merge Ubuntu repo config blocks into one --- tasks/main.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 1ccfd5f1..3d075e3b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -417,10 +417,9 @@ path: /etc/apt/sources.list.d/mssql-server-{{ __mssql_current_version | int }}.list state: absent -- name: Configure the Microsoft SQL Server repo on Ubuntu using packages-microsoft-prod.deb +- name: Configure the Microsoft SQL Server repositories on Ubuntu when: - ansible_facts["pkg_mgr"] == 'apt' - - __mssql_prod_pkg_url is defined - >- (__mssql_server_packages not in ansible_facts.packages) or (mssql_upgrade | bool) @@ -430,25 +429,20 @@ url: "{{ __mssql_prod_pkg_url }}" dest: /tmp/packages-microsoft-prod.deb mode: '0644' + when: __mssql_prod_pkg_url is defined - name: Install packages-microsoft-prod.deb apt: deb: /tmp/packages-microsoft-prod.deb + when: __mssql_prod_pkg_url is defined -- name: Configure the Microsoft SQL Server repo on Ubuntu using list file - when: - - ansible_facts["pkg_mgr"] == 'apt' - - __mssql_server_repository_list_url is defined - - >- - (__mssql_server_packages not in ansible_facts.packages) or - (mssql_upgrade | bool) - block: - name: Download SQL Server repository list file to temp location get_url: url: "{{ __mssql_server_repository_list_url }}" dest: /tmp/mssql-server-{{ mssql_version | int }}.list mode: '0644' force: true + when: __mssql_server_repository_list_url is defined - name: Install SQL Server repository list file only if content changed copy: @@ -456,11 +450,13 @@ dest: /etc/apt/sources.list.d/mssql-server-{{ mssql_version | int }}.list remote_src: true mode: '0644' + when: __mssql_server_repository_list_url is defined - name: Remove temporary SQL Server repository list file file: path: /tmp/mssql-server-{{ mssql_version | int }}.list state: absent + when: __mssql_server_repository_list_url is defined - name: Update apt cache after configuring Microsoft SQL Server repository apt: From cc8e201fb1749060a7461b451d61509bbd5dbb56 Mon Sep 17 00:00:00 2001 From: Aman Maharjan <38400817+mhrznamn068@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:28:38 +0200 Subject: [PATCH 11/11] Update tasks/main.yml Co-authored-by: Sergei Petrosian <30409084+spetrosi@users.noreply.github.com> --- tasks/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 3d075e3b..70bc7542 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -722,8 +722,7 @@ owner: mssql group: mssql mode: "0700" - when: - - mssql_tls_enable | bool + when: mssql_tls_enable | bool - name: >- Create certificate and private_key files and set mssql_tls_cert