Ansible 条件列表

Ansible 条件列表

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

我看到有--extra-vars一个允许传递变量的

也就是说,--extra-vars "flag=test"或者--extra-vars "flag=prod"

现在我想根据这个标志使用 test_* 或 prod_* 变量。

  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 }}"

就像条件运算符一样,在两个列表之间进行选择?

答案1

您可以通过添加包含变量任务在游戏开始时。由于设置的变量include_vars具有很高的优先权他们应该排除在其他地方设置的变量。

因此,您需要做的就是在游戏开始时添加如下内容:

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

那么变量测试的值就需要是布尔值。

然而正如已经指出的那样,使用group_vars可能是一个更清洁的解决方案。

相关内容