从命令行覆盖Ansible剧本“ serial”

jmv*_*bxx 4 ansible

我们serial几乎在所有手册中都使用了该手册,但在某些情况下,我们需要进行快速更改,并且Ansible不必遵守该serial限制。

有没有一种方法可以serial从命令行中将标志作为ansible-playbook命令的一部分覆盖?

代码示例:

- hosts: database
  serial: 1
  become: yes
Run Code Online (Sandbox Code Playgroud)

提前谢谢了!

ili*_*-sp 6

您可以使用-e标志从cli传递变量,并将其用于serial属性。示例(如果未在cli中传递变量值,则添加默认值3):

- hosts: ping_test
  serial: "{{ serial_number|default(1) }}"
  gather_facts: true
  vars:

  tasks:
    - name: task 1
      debug:
        var: serial_number
Run Code Online (Sandbox Code Playgroud)

运行为:

ansible-playbook <playbook file> -e serial_number=1

样本输出(两次执行):

[root@optima-ansible ILIAS]# ansible-playbook -i hosts serial.yml -e serial_number=1

PLAY [ping_test] ****************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [task 1] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "serial_number": "1"
}

PLAY [ping_test] ****************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************
ok: [greenhat]

TASK [task 1] *******************************************************************************************************************************************************************************************************
ok: [greenhat] => {
    "serial_number": "1"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************
greenhat                   : ok=2    changed=0    unreachable=0    failed=0   
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

[root@optima-ansible ILIAS]# ansible-playbook -i hosts serial.yml -e serial_number=2

PLAY [ping_test] ****************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************
ok: [greenhat]
ok: [localhost]

TASK [task 1] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "serial_number": "2"
}
ok: [greenhat] => {
    "serial_number": "2"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************
greenhat                   : ok=2    changed=0    unreachable=0    failed=0   
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

[root@optima-ansible ILIAS]# 
Run Code Online (Sandbox Code Playgroud)

  • 为了改进这一点,请将其默认为您通常希望运行的任何序列值,这样您只需要针对特殊情况进行覆盖:````serial: {{serial_val|default(3) }}```。这样,如果您想“正常”运行,则根本不必指定 ```-e``` 开关,但在您的情况下,您可以 ```ansible-playbook -i Hosts playbook .yml -e serial_val=8```。 (2认同)