提问人:Red Cricket 提问时间:11/17/2023 最后编辑:β.εηοιτ.βεRed Cricket 更新时间:11/17/2023 访问量:47
如果设置了一个变量,为什么还要“结束剧本”?
Why would one want to "end a playbook" if a variable is set?
问:
我正在阅读一些看起来像这样的 Ansible 代码:
---
- meta: end_play
when: centos is defined
- name: Set centos variable
set_fact:
centos: "{{ hostvars[item]['ansible_distribution_version'][0:1] }}"
with_inventory_hostnames: all
delegate_to: "{{ item }}"
delegate_facts: true
run_once: true
我没有人可以问,因为开发人员早已不在了。这是常见的 Ansible 模式吗?
如果是这样,有人可以解释为什么需要这样做吗?他们是试图阻止递归,还是只是看起来很酷?
答:
3赞
β.εηοιτ.βε
11/17/2023
#1
注意不要混淆剧本和游戏。
您可以在一个剧本中包含多个重头戏。
下面是一个示例 playbook:
- hosts: localhost
gather_facts: false
tasks:
- meta: end_play
- debug:
msg: I am not played
- hosts: localhost
gather_facts: false
tasks:
- debug:
msg: I am still played
由于任务的原因,这仍然会打印第二部剧的任务,尽管不会打印第一部剧的任务:debug
meta
实际输出:
PLAY [localhost] *********************************************************
TASK [meta] **************************************************************
PLAY [localhost] *********************************************************
TASK [debug] *************************************************************
ok: [localhost] =>
msg: I am still played
所以,是的,最有可能的是,你提供的 YAML 片段是为了确保变量被定义,如果已经定义了,请跳过整个游戏,在进一步的游戏中对变量进行操作。centos
给定剧本:
- hosts: localhost
gather_facts: false
tasks:
- meta: end_play
when: centos is defined
- set_fact:
centos: defined in play 1
- hosts: localhost
gather_facts: false
tasks:
- debug:
var: centos
- 第二部戏会让步
debug
ok: [localhost] => centos: defined in play 1
- 但是,当您使用 运行 playbook 时,它会产生
--extra-vars "centos='from extra-vars'"
ok: [localhost] => centos: from extra-vars
2赞
Vladimir Botka
11/17/2023
#2
让我谈谈第二项任务
- name: Set centos variable
set_fact:
centos: "{{ hostvars[item]['ansible_distribution_version'][0:1] }}"
with_inventory_hostnames: all
delegate_to: "{{ item }}"
delegate_facts: true
run_once: true
此任务运行一次,并迭代所有主机的set_fact。循环
with_inventory_hostnames: all
等于
loop: "{{ ansible_play_hosts_all }}"
每次迭代都委托给主机,事实也被委托。所有这些设置都与下面的简单任务完全相同
- name: Set centos variable
set_fact:
centos: "{{ ansible_distribution_version[0:1] }}"
评论
0赞
Red Cricket
11/19/2023
谢谢弗拉德。是的,关于他们为什么要这样做,这真是一个令人头疼的问题。
评论