feat(delivery): complete MySQL version-to-package mapping
- 8.0 from Ubuntu archive, 8.4 from MySQL official APT repo - 5.6/5.7 not supported for now; enforce one MySQL series per host - Sync Go version whitelist with the playbook package map
This commit is contained in:
@@ -8,9 +8,18 @@
|
||||
# --- identity ---
|
||||
mysql_instance: "{{ instance_name }}"
|
||||
mysql_version_value: "{{ mysql_version | default('8.0') }}"
|
||||
# 版本包映射:8.0 用 Ubuntu 24.04 自带源(精确锁版);8.4 用 MySQL 官方 APT 源的 LTS 组件
|
||||
# (noble 自带源无 8.4,官方源组件内即为该系列,不再锁小版本)。
|
||||
# 5.6/5.7 已官方 EOL 且 Ubuntu 24.04 无可用 apt 包,明确不纳入白名单。
|
||||
mysql_package_map:
|
||||
"8.0": "mysql-server=8.0.46-0ubuntu0.24.04.3"
|
||||
mysql_package_name: "{{ mysql_package_map[mysql_version_value] }}"
|
||||
"8.0":
|
||||
package: "mysql-server=8.0.46-0ubuntu0.24.04.3"
|
||||
repo_component: ""
|
||||
"8.4":
|
||||
package: "mysql-community-server"
|
||||
repo_component: "mysql-8.4-lts"
|
||||
mysql_package_name: "{{ (mysql_package_map[mysql_version_value] | default({})).package | default('') }}"
|
||||
mysql_repo_component: "{{ (mysql_package_map[mysql_version_value] | default({})).repo_component | default('') }}"
|
||||
|
||||
# --- platform-allocated inputs (safe fallbacks when not passed in) ---
|
||||
# 端口池 13306–13999:平台从池分配并传入;未传时兜底池首端口,占用探测在目标机执行。
|
||||
@@ -132,13 +141,46 @@
|
||||
host-wide Σ-quota budgeting is the platform's responsibility, this is a last-resort guard.
|
||||
|
||||
tasks:
|
||||
- name: Detect an existing Ubuntu MySQL package
|
||||
ansible.builtin.command: dpkg-query -W mysql-server
|
||||
- name: Detect an existing MySQL server package
|
||||
ansible.builtin.command: dpkg-query -W -f '${Package}=${Version}\n' mysql-server mysql-community-server
|
||||
register: mysql_package_before
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Install Ubuntu MySQL package
|
||||
- name: Resolve the installed MySQL server version
|
||||
ansible.builtin.set_fact:
|
||||
mysql_installed_version: >-
|
||||
{{ (mysql_package_before.stdout_lines | select('search', '=') | list
|
||||
| first | default('')).split('=') | last }}
|
||||
|
||||
# /usr 下的 mysqld/mysql 二进制全机共享,一台主机只能承载一个 MySQL 版本系列。
|
||||
- name: Enforce host-level MySQL series consistency
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- mysql_installed_version == '' or mysql_installed_version.startswith(mysql_version_value ~ '.')
|
||||
fail_msg: >-
|
||||
Host already runs MySQL {{ mysql_installed_version }} but {{ mysql_version_value }} was requested;
|
||||
native binaries under /usr are shared host-wide, so one host serves exactly one MySQL series.
|
||||
|
||||
- name: Install the MySQL APT repository signing key
|
||||
ansible.builtin.get_url:
|
||||
url: https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
|
||||
dest: /etc/apt/keyrings/mysql.asc
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
when: mysql_repo_component != ''
|
||||
|
||||
- name: Configure the MySQL APT repository component
|
||||
ansible.builtin.apt_repository:
|
||||
repo: >-
|
||||
deb [signed-by=/etc/apt/keyrings/mysql.asc]
|
||||
http://repo.mysql.com/apt/ubuntu {{ ansible_distribution_release }} {{ mysql_repo_component }}
|
||||
filename: xinfra-mysql-delivery
|
||||
state: present
|
||||
when: mysql_repo_component != ''
|
||||
|
||||
- name: Install the MySQL server package
|
||||
ansible.builtin.apt:
|
||||
name: "{{ mysql_package_name }}"
|
||||
state: present
|
||||
@@ -150,7 +192,7 @@
|
||||
name: mysql.service
|
||||
state: stopped
|
||||
enabled: false
|
||||
when: mysql_package_before.rc != 0
|
||||
when: mysql_installed_version == ''
|
||||
|
||||
- name: Check for the bundled MySQL AppArmor profile
|
||||
ansible.builtin.stat:
|
||||
|
||||
Reference in New Issue
Block a user