Ansible条件列表

我想根据标志部署到不同的目录。

我看到有 – --extra-vars允许传入一个variables,

所以我们可以说,– --extra-vars "flag=test"--extra-vars "flag=prod"

现在我想要使用test_ *或prod_ *variables,这取决于这个标志。

  vars: test_dirs: ["/dataVolumes/dev/deployments/", "/dataVolumes/qa/deployments/"] prod_dirs: ["/dataVolumes/preprod/deployments/", "/dataVolumes/prod/deployments/"] 

假设有两个步骤,删除旧文件,并复制新文件。

有没有办法做下面的事情?

 - name: delete old files file: state:absent path:"{{item}}" with_items: "{{ test_dirs if flag == 'test' else prod_dirs }}" - name: copy new files copy: src: /opt/ansible/ dest:"{{item}}" with_items: "{{ test_dirs if flag == 'test' else prod_dirs }}" 

就像一个条件操作符一样,要在两个列表中进行select

你可以通过在游戏开始时添加一个include_vars任务来实现。 由于include_vars设置的variables具有较高的优先级,所以它们应该排除其他地方设置的variables。

所以你所要做的就是在你的游戏开始时添加这样的内容:

 - name: Include test vars. include_vars: file: test.yml when: test == True 

variablestesting的价值将比需要是一个布尔值。

不过正如已经指出的,使用group_vars可能会是一个更干净的解决scheme。