Ansible角色模板或文件文件夹中是否可以有目录结构?

时间:2017-01-15 11:38:13

标签: ansible ansible-2.x ansible-role

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

这不起作用:(

如何在模板文件夹中引用文件?

重要事项我不希望模板文件夹中有平面结构,因为我想模仿文件系统,所以只要查看模板文件夹结构就知道文件将被复制到哪里。

仅供参考当我使用扁平结构时,它可以工作。

1 个答案:

答案 0 :(得分:2)

您的问题中包含的语法正常。

证明:

#!/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