-1

我有几个可用于设置多个配置目录的 ansible 角色任务。问题是我有一个配置列表,需要使用特定路径进行设置,但前提是它们不存在。

- name: Ensure core configuration directories exist.
  shell: "cp -r {{ service_install_path }}/conf/ {{ service_home }}/{{ item }}.conf.d"
  when: 
    - "item in conf_indexes_current.content"
    - "not {{ service_home }}/{{ item }}.conf.d.stat.exists"
  with_items: "{{ conf_dirs }}"

然而问题是你不能统计这样的路径:

    - "not {{ service_home }}/{{ item }}.conf.d.stat.exists"

我得到的错误是:

条件检查 'not {{ service_home }}/{{ item }}.conf.d.stat.exists' 失败。错误是:意外的“/”第 1 行

有没有办法设置一个动态变量完整路径然后测试它?看来我也不能在这里设定一个事实。

[更新]:刚刚阅读另一个问题,试图用一个非常相似的循环概念做一些事情。此时简单地使用 shell 脚本/模板是正确的方法吗?

4

1 回答 1

-2

好吧,我最终还是通过其他堆栈问题和随机站点的点点滴滴的提示弄清楚了这一点。我不经常使用 ansible,我们只使用了大约一年。我最终做了以下事情,将其分为两个任务:

- name: Check existence of config for each index.
  stat: 
    path: "{{ service_home }}/{{ item }}.conf.d"
  register: "{{ item }}_conf_true"
  with_items: "{{ conf_dirs }}"

- name: Ensure core configuration directories exist as full templates for modification.
  shell: "cp -r {{ service_install_path }}/conf/ {{ service_home }}/{{ item }}.conf.d"
  when: 
    - "item in conf_indexes_current.content"
    - "{{ item }}_conf_true is not defined"
  with_items: "{{ conf_dirs }}"

它有效吗?是的。合适吗?也许吧,但我可能还没有想到或看到更好的方法。

于 2017-10-04T23:29:24.973 回答