您可以使用 vars 定义变量吗:在 ansible 脚本的中途

Can you define a variable using vars: halfway through an ansible script

我正在尝试创建一个 ansible 脚本,它会询问用户那里的 address/domain NTP 服务器的名称,然后将它们保存到列表中。

---

- name: Chrony Service Setup
  hosts: localhost
  vars:
    ntpServers: []
  tasks:

    - name: "Ask user if they wish to add there own NTP servers"
      pause:
        prompt: "Do you want to add unique NTP server (y/n)?"
      register: result
    - set_fact:
        addNTP: "{{ result.user_input }}"

    - block:

      - name:
        debug:
          msg: "Hello"

      vars:
        ntpServer: "initVal"

      - block:

        - name:
          debug:
            msg: "Hello 2"

        when: ntpServer != ""


      when: addNTP == "y"

目前脚本应该不断地打印出“Hello 2”,因为永远不会满足该块中的 when。

我实际上得到了这个错误:

Syntax Error while loading YAML.
  did not find expected key
...

On line 25 -block:

我是 ansible 的新手,所以我想知道您是否不能在脚本中途定义变量。

感谢任何帮助。

你不能把它放在那样的列表中间;像 when: vars: 是整个字典的一部分,而不是 block:.

下列表的一部分

在样式说明中,我发现将 when 之类的键放在 block 之前而不是之后更易读;它需要更少的缩进级别的视觉匹配,并使逻辑更容易理解。

- name: Chrony Service Setup
  hosts: localhost
  vars:
    ntpServers: []
    addNTP: "{{ result.user_input }}"
  tasks:
    - name: Prompt for NTP server
      pause:
        prompt: "Do you want to add unique NTP server (y/n)?"
      register: result

    - when: addNTP == "y"
      vars:
        ntpServer: initVal
      block:
        - name:
          debug:
            msg: "Hello"

        - when: ntpServer != ""
          block:
            - name:
              debug:
                msg: "Hello 2"