Ansible角色检查任务中动态变量的路径

时间:2017-10-03 22:47:58

标签: loops ansible ansible-role ansible-galaxy

我有几个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"

我得到的错误是:

  

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

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

[更新]:只是阅读另一个试图用非常模糊的循环概念做某事的问题。这是简单使用shell脚本/模板的正确方法吗?

1 个答案:

答案 0 :(得分:-2)

好吧,我最终用其他Stack问题和随机网站的点点滴滴来解决这个问题。我不经常使用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 }}"

有用吗?是。这是对的吗?也许但是我可能还有一种更好的方式没有想到或者看过。