gpt4 book ai didi

loops - Ansible 从列表中创建目录

转载 作者:行者123 更新时间:2023-12-01 05:04:46 27 4
gpt4 key购买 nike

我想从我的 vars/main.yml 中的列表中创建一些目录.

- app_root:
network_prod: "/var/www/prod/network/app"
database_prod: "/var/www/prod/db/app"

我的 tasks/main.yml到目前为止有这个:
- name: Create application directory structure
file:
path: "{{ item }}"
state: directory
mode: 755
with_items:
- app_root

但不起作用。我认为这可以使用 with_dict 来实现我也试过:
- name: Create application directory structure
file:
path: "{{ item.value }}"
state: directory
mode: 755
with_dict:
- app_root

但我得到了: fatal: [vagrant.dev] => with_dict expects a dict .

我已经阅读了所有关于 looping-over-hashes 的信息,但这似乎不起作用。

我使用这个符号的原因是因为我也在其他地方使用了这些变量,我需要知道如何调用它们。

最佳答案

我个人发现将 yaml 转换为 json 以确保我正确理解它更容易一些。举个例子:

- app_root:
network_prod: "/var/www/prod/network/app"
database_prod: "/var/www/prod/db/app"

你在这里拥有的不是一个列表,而是一个嵌套的字典。如果将其转换为 json,它将如下所示:
[
{
"app_root": {
"network_prod": "/var/www/prod/network/app",
"database_prod": "/var/www/prod/db/app"
}
}
]

为了在 Ansible 中循环,您需要取消引用字典的两个级别,第一个是 app_root第二个是路径元素。不幸的是,我认为 Ansible 不支持遍历嵌套字典,只支持嵌套循环。

最好的办法可能是重做定义路径的方式,这样就不会创建复杂的数据结构。如果您在这种情况下所做的只是遍历路径列表以确保目录存在,那么我会在您的 vars/main.yml 中建议类似的内容。文件:
network_prod:   "/var/www/prod/network/app"
database_prod: "/var/www/prod/db/app"

app_root:
- network_prod
- database_prod

然后你可以有这样的任务:
file: path={{ item }}
state=directory
with_items: app_root

关于loops - Ansible 从列表中创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com