从空间中分解变量并在ansible playbook

时间:2016-02-17 15:31:01

标签: ansible ansible-playbook

在我的用例中,我正在从conf读取目录,源路径是空格分隔的。空间分隔源的数量可以增加或减少。我的product.conf如下所示

product.conf

{
    "directories": [{
        "source": "src/main/php/en/path1 src/main/php/en/path2 src/main/php/en/path3",
        "lang": "en"
    }, {
        "source": "src/main/php/jp/path1 src/main/php/jp/path2",
        "lang": "jp"
    }]
}

Playbook读取conf并将源分配到单独的变量中。

playbook.yml

---

 - hosts: 127.0.0.1
   connection: local

   vars:
     BASE_DIR: /home/roop

   tasks:
     - include_vars: product.conf

     - set_fact:
         en_source="{{ item.source }}"
       with_items: directories 
       when: item.lang == "en"

     - set_fact:
         jp_source="{{ item.source }}"
       with_items: directories 
       when: item.lang == "jp"

     - debug: var=en_source
     - debug: var=jp_source

我动态地获得 BASE_DIR 。我需要在每个来源中添加 BASE_DIR 。喜欢

"en_source" = "/home/roop/src/main/php/en/path1 /home/roop/src/main/php/en/path2"

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

有点hacky:

- set_fact:
    en_source="{{ BASE_DIR + '/' + item.source | regex_replace('(\s)', '\\1' + BASE_DIR + '/') }}"

regex_replacefilter from Ansible

要获得更清晰的解决方案,您可以创建custom filter plugin