Ansible如何仅在未安装相同版本的情况下安装软件包

Ansible how to install a package only if same version not installed

我正在尝试检查软件包的现有版本和 运行 安装任务(如果尚未安装相同版本)。

下面是我正在尝试的代码。

- name: Check for existing mono installation
  command: "mono --version"
  register: current_mono
  ignore_errors: true

- name: Running "make install" for Mono
  command: make install
  args: 
    chdir: "{{ mono_install_dir }}"
  become: yes
  when: "mono_version|string not in current_mono.stdout"

第一次 运行ning 如何实现?

因为您正在使用 make install,所以您正在使用 shell 个模块。

  vars:
    software_version: "1.2.3"

  tasks:

First time this will fail ...

使用以下方法时,这不是绝对必要的

  - name: Check for existing version
    shell:
      cmd: software --version
      warn: false
    register: result
    changed_when: false
    failed_when: false

请注意some software packages like Java or Python are reporting his version to stderr

  - name: Show result
    debug:
      msg: "{{ result.stderr }}"

现在您可以运行您的安装程序。

  - name: Install latest version
    shell:
      cmd: "echo 'installing ...'"
      warn: false
    register: result
    when: "software_version | string not in result.stderr"

  - name: Show result
    debug:
      msg: "{{ result.stdout | default('was on latest version') }}"

您可以使用 javapython 作为软件来测试此示例剧本。