gpt4 book ai didi

sorting - 如何在 Ansible 中对版本号进行排序

转载 作者:行者123 更新时间:2023-12-04 01:16:23 37 4
gpt4 key购买 nike

我正在构建一个 Ansible 剧本,我想在其中备份数据库,以防我需要升级软件。为此,我想将可用的最高版本号与已安装的版本号进行比较。如果最新版本高于安装的版本,我将备份数据库。

然而,问题是我找不到在 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 中对版本号进行排序的好方法吗?

最佳答案

现在用另一种方式解决了。我没有对版本进行排序,而是将当前版本与所有可用版本进行了比较。

  • 我首先将更新变量设置为 false
  • 接下来我将已安装的版本与每个可用版本进行比较
  • 如果安装版本 > 当前版本,将更新变量设置为 true

  • 执行备份的任务只会在更新变量为真时执行。
    - name: Get package version
    yum:
    list: package
    register: software_version

    - name: Read which version is installed and available
    set_fact:
    software_update: false
    software_version_installed: "{{ software_version | json_query(\"results[?yumstate=='installed'].version\") | last }}"
    software_version_available: "{{ software_version | json_query(\"results[?yumstate=='available'].version\") }}"

    - name: Check if upgrade is needed
    set_fact:
    software_update: true
    when: software_version_installed is version(item, "<")
    with_items: "{{ software_version_available }}"

    - 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_update

    关于sorting - 如何在 Ansible 中对版本号进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54025894/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com