从命令行覆盖Ansible playbook`serial`

时间:2018-04-25 16:08:01

标签: ansible

我们在几乎所有的剧本中使用serial,但有时候我们需要快速更改,而Ansible必须遵守serial限制。< / p>

有没有办法从命令行覆盖serial并带有作为ansible-playbook命令一部分的标志?

代码示例:

- hosts: database
  serial: 1
  become: yes

非常感谢提前!

2 个答案:

答案 0 :(得分:3)

您可以使用-e标志从cli传递变量,并将其用于serial属性。例如:

- hosts: ping_test
  serial: "{{ serial_number }}"
  gather_facts: true
  vars:

  tasks:
    - name: task 1
      debug:
        var: serial_number

以:

运行

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

示例输出(2次执行):

[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]# 

答案 1 :(得分:0)

我今天遇到了这个问题。我一直希望剧本与serial: 1一起运行,但是我想对所有其他剧本使用--check来审核与剧本的一致性。为了解决这个问题,仅与--check一起使用,我做了以下工作:

ansible-playbook -i inventory/hosts <(sed '/serial: 1/d' myserialplaybook.yml) --check

这里发生了一些事情:

  • <( ... )被视为包含内部命令中STDOUT内容的文件
  • sed '/serial: 1/d' file.txt删除其中包含字符串serial: 1的任何行。

因此,所生成的剧本文件完全丢失了serial: 1行,并且能够根据需要完全并行运行--check