Я создаю Ansible playbook, в котором я хочу сделать резервную копию базы данных на случай, если мне потребуется обновить программное обеспечение.Для этого я хочу сравнить самый высокий номер версии с номером версии, которая установлена.Если последняя версия выше установленной, я создам резервную копию базы данных.
Однако проблема в том, что я не могу найти хороший способ сортировки номеров версий в Ansible.Стандартный фильтр сортировки сортирует по строкам, а не по номерам / версиям.
Вот что я сейчас делаю:
- name: Get package version
yum:
list: package
register: software_version
- name: Read which version is installed and available
set_fact:
software_version_installed: "{{ software_version | json_query(\"results[?yumstate=='installed'].version\") | sort | last }}"
software_version_available: "{{ software_version | json_query(\"results[?yumstate=='available'].version\") | sort | last }}"
- name: Backup old database file on remote host
copy:
src: "{{ software.database_path }}"
dest: "{{ software.database_path }}_{{ ansible_date_time.date }}_v{{ software_version_installed }}"
remote_src: yes
when: software_version_installed is version(software_version_available, "<")
Книга воспроизведения выше работает, пока номера версий остаются под ней.число 10 (например, 1.2.3, но не 1.10.1), поскольку сортировка выполняется как строка.Когда номер версии должен быть отсортирован, например, 1.2.3 и 1.10.1, он будет использовать 1.2.3 в качестве последней версии.
Чтобы показать проблему:
- name: Read which version is installed and available
set_fact:
software_versions: [ "2.5.0", "2.9.0", "2.10.0", "2.11.0" ]
- name: Debug
debug:
var: software_versions | sort
TASK [grafana : Debug]**********************************
ok: [localhost] => {
"software_versions | sort": [
"2.10.0",
"2.11.0",
"2.5.0",
"2.9.0"
]
}
Кто-нибудь знаетхороший способ сортировки номеров версий в Ansible?