templates - Ansible 模板:试图索引到一个两级列表
问题描述
在 Ansible 中,我正在尝试模板化 apache 虚拟主机配置,每个文件一个。
我有一个 jinja 模板,其中包含:
...
DocumentRoot {{ mydomain.DocumentRoot }}
...
我有一个调用模板的剧本,其中包含:
vars:
domain1:
DocumentRoot: /var/www/html/domain1
domain2:
DocumentRoot: /var/www/html/domain2
我希望能够推出此模板在 domain1 和 domain2 之间进行选择以选择 DocumentRoot(以及其他未显示的变量)
所以我需要以某种方式在我的模板中写下 mydomain 应该替换为“domain1”或“domain2”。
除其他外,我尝试了
ansible-playbook myplaybook.yml -e mydomain=domain1
没有运气。
我需要某种变量间接,但我不知道如何编写它,或者即使它是可能的。
我知道我应该能够遍历数组的内容,所以为什么我不能构造一个简单的间接。
有什么办法可以做到这一点?
解决方案
创建字典列表会更容易。例如
vars:
apache_vhost:
- ServerName: domain1
DocumentRoot: /var/www/html/domain1
- ServerName: domain2
DocumentRoot: /var/www/html/domain2
然后下面的任务
- template:
src: vhost.j2
dest: "{{ apache_conf_path }}/extra/{{ item.ServerName }}.conf"
loop: "{{ apache_vhost }}"
notify: reload apache
和模板
<VirtualHost *:80>
ServerName {{ item.ServerName }}
DocumentRoot {{ item.DocumentRoot }}
</VirtualHost>
将使用目录中的虚拟主机配置创建文件extra
。请参阅示例如何为虚拟主机创建文件、目录,并将额外文件包含在httpd.conf
.
推荐阅读
- python - geodataframe.to_file 无效的字段类型
- topshelf - 调试 topshelf 即服务
- swift - 旋转后未正确检测到 SCNNode 平面
- vb.net - VB判断一个数是否为素数的最快方法
- google-cloud-platform - 如何在 GCP 中登录/SSH 到 Dataflow VM 工作人员?
- c# - 非托管导出未显示在 DLL 中
- pytorch - 火炬张量的 sum 和 torch.sum 有什么区别?
- ruby-on-rails - 通过 Ruby Web 应用程序编写 VBS 脚本——多线程问题
- linux-device-driver - 可变大小的 i2c 读取 Raspberry
- c# - 一行或一列中没有 3 个相同的随机 2D 数组