当在Ansible中使用set_fact和if语句组合时,有时可能会发现if语句没有按预期工作。这个问题通常出现在循环(如with_items)中。
例如,下面的代码块中尝试检查列表中的元素是否以特定字符串开头:
无论如何,item_starts_with_string将始终是最后一个列表元素baz。这是因为循环中的每个项目都会覆盖上一个设置的事实。为了避免这个问题,我们需要在set_fact内部使用条件。
下面是一个修复的代码示例:
现在,它应该按预期工作了。 item_starts_with_string将被设置为第一个以“foo”开头的项目“foo”。