我们在几乎所有的剧本中使用serial
,但有时候我们需要快速更改,而Ansible必须遵守serial
限制。< / p>
有没有办法从命令行覆盖serial
并带有作为ansible-playbook
命令一部分的标志?
代码示例:
- hosts: database
serial: 1
become: yes
非常感谢提前!
答案 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
。