我有下面的伪代码要在 ansible 中实现。
changed = true
if (changed)
{
print("The first block executes")
}
else
{
print("The second block executes.")
changed = false
}
现在我需要将上述逻辑转换为ansible playbook,这样当我第一次运行playbook时,它会打印第一个块,并且所有后续调用都必须打印第二个块。我在下面尝试过,但没有成功。
hosts: localhost
become: true
vars:
changed: "true"
tasks:
- name: First block
debug:
msg: "The first block is printed"
when: changed == "true"
- name: Second block
debug:
msg: "The second block is printed"
- set_fact:
changed: "false"
如果这个用例可以在 ansible 中实现,有人可以指导我吗?主要的问题是,剧本是否可以设计成在第一次运行后改变其行为。如果我第一次运行剧本,它应该打印第一个块,但在该剧本的所有后续执行中,它应该只执行第二个块消息。
删除变量周围的引号。
Ansible 基于 python,并且该语言本身就是“真实的”。
这应该按预期工作。
changed
另请注意,当它已经是 false 时,您尝试设置为 false。所以你不需要改变它。- 编辑 -
所以,你告诉我:
我添加一个设备,然后检查
lsblk
该设备是否已添加。如果添加了它,Ansible 将在第二次运行时失败。
再次强调,Ansible 是理想的状态。您不应该使用
lsblk
命令,而应该使用官方模块。如果您确实想执行 shell 命令,然后根据第一个命令的输出运行第二个命令: