【问题标题】:Ansible condition when string not matching字符串不匹配时的 Ansible 条件
【发布时间】:2015-12-23 12:27:10
【问题描述】:

我正在尝试编写一个仅在 Nginx 尚不存在且当前版本不存在时才编译 Nginx 的 Ansible 剧本。但是它每次都编译,这是不可取的。

这就是我所拥有的:

- shell: /usr/local/nginx/sbin/nginx -v 2>&1
  register: nginxVersion
- debug:
  var=nginxVersion

- name: install nginx
  shell: /var/local/ansible/nginx/makenginx.sh
  when: "not nginxVersion == 'nginx version: nginx/1.8.0'"
  become: yes

除了每次运行 shell 脚本来编译 Nginx 之外,该脚本都可以正常工作。 nginxVersion 的调试输出是:

ok: [server] => {
    "var": {
        "nginxVersion": {
            "changed": true,
            "cmd": "/usr/local/nginx/sbin/nginx -v 2>&1",
            "delta": "0:00:00.003752",
            "end": "2015-09-25 16:45:26.500409",
            "invocation": {
                "module_args": "/usr/local/nginx/sbin/nginx -v 2>&1",
                "module_name": "shell"
            },
            "rc": 0,
            "start": "2015-09-25 16:45:26.496657",
            "stderr": "",
            "stdout": "nginx version: nginx/1.8.0",
            "stdout_lines": [
                "nginx version: nginx/1.8.0"
            ],
            "warnings": []
        }
    }
}

根据我在正确的路线上的文档,我缺少什么简单的技巧?

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    试试:

    when: nginxVersion.stdout != 'nginx version: nginx/1.8.0'
    

    when: '"nginx version: nginx/1.8.0" not in nginxVersion.stdout'
    

    【讨论】:

      【解决方案2】:

      由于 var 是一个 json 字符串,您可以将其解析为 json 并访问它的键。

      set_fact:
        var_json: "{{ var.stdout|from_json }}"
      

      然后访问json,得到你想要的值。

      when: var_json.nginxVersion.stdout == 'nginx version: nginx/1.8.0'
      

      查看此链接:https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多