Ansible 角色模板或文件夹中是否可以有目录结构?
Can there be a directory structure within the Ansible role templates or files folders?
Ansible角色的基本目录结构是:
rolename
files
templates
tasks
...
现在我的问题是文件或模板文件夹可以有这样的目录结构:
rolename
files
templates
etc
hosts
tasks
...
所以我的任务可能是这样的:
- name: Approve hosts file
template:
src: ./etc/hosts (I WANT TO REFERENCE THE FILE INSIDE THE TEMPLATES FOLDER)
dest: /etc/hosts
这行不通:(
如何引用模板文件夹中的文件?
重要提示我不希望模板文件夹内有一个平面结构,因为我想模仿文件系统,所以我只需查看模板文件夹结构就知道文件将复制到哪里。
仅供参考,当我使用平面结构时它会起作用。
问题中包含的语法没有问题。
证明:
#!/bin/bash
mkdir -p ./roles/role1
mkdir -p ./roles/role1/files
mkdir -p ./roles/role1/templates/etc
mkdir -p ./roles/role1/tasks
cat >./roles/role1/tasks/main.yml <<TASKS_END
---
- template:
src: ./etc/hosts
dest: /tmp/hosts
TASKS_END
cat >./roles/role1/templates/etc/hosts <<TEMPLATE_END
{{ ansible_managed }}
TEMPLATE_END
cat >./playbook.yml <<PLAYBOOK_END
---
- hosts: localhost
gather_facts: no
connection: local
roles:
- role1
PLAYBOOK_END
ansible-playbook ./playbook.yml
cat /tmp/hosts
结果:
PLAY [localhost] ***************************************************************
TASK [role1 : template] ********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
Ansible managed
Ansible角色的基本目录结构是:
rolename
files
templates
tasks
...
现在我的问题是文件或模板文件夹可以有这样的目录结构:
rolename
files
templates
etc
hosts
tasks
...
所以我的任务可能是这样的:
- name: Approve hosts file
template:
src: ./etc/hosts (I WANT TO REFERENCE THE FILE INSIDE THE TEMPLATES FOLDER)
dest: /etc/hosts
这行不通:(
如何引用模板文件夹中的文件?
重要提示我不希望模板文件夹内有一个平面结构,因为我想模仿文件系统,所以我只需查看模板文件夹结构就知道文件将复制到哪里。
仅供参考,当我使用平面结构时它会起作用。
问题中包含的语法没有问题。
证明:
#!/bin/bash
mkdir -p ./roles/role1
mkdir -p ./roles/role1/files
mkdir -p ./roles/role1/templates/etc
mkdir -p ./roles/role1/tasks
cat >./roles/role1/tasks/main.yml <<TASKS_END
---
- template:
src: ./etc/hosts
dest: /tmp/hosts
TASKS_END
cat >./roles/role1/templates/etc/hosts <<TEMPLATE_END
{{ ansible_managed }}
TEMPLATE_END
cat >./playbook.yml <<PLAYBOOK_END
---
- hosts: localhost
gather_facts: no
connection: local
roles:
- role1
PLAYBOOK_END
ansible-playbook ./playbook.yml
cat /tmp/hosts
结果:
PLAY [localhost] ***************************************************************
TASK [role1 : template] ********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
Ansible managed