我正在尝试在我的ansible剧本中使用变量。 ENV
将作为命令行的输入传递。
---
- hosts: development
sudo: yes
sudo_user: root
vars:
env: "{{ ENV|default('DEV') }}"
roles:
# Copy conf files
- { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7000/data/ }
- { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7200/data/ }
- { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7004/data/ }
我通过命令
运行这个剧本ansible-playbook -e 'ENV=DEV' --ask-sudo-pass install-ems-plybook.yml
我得到了
# Copy conf files
- { role: copy, src: ./conf/ems/7000/" {{env}} "/*.conf , dest: /apps/tibco/config/ems/7000/data/ }
^
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
因为我还是Ansible的小孩,所以请明确回答。
答案 0 :(得分:0)
主要问题:
你不应该在字符串中间加上引号(./conf/ems/7000/"{{ env }}"/*.conf
) - 这是你得到的错误信息 - 它应该是"./conf/ems/7000/{{ env }}/*.conf"
其他问题:
你似乎真的想要定义任务而不是角色;我假设这是从参数的命名。
你没有指定(用文字表示)你想要实现的目标,我假设你想将文件从本地目录复制到目标节点上的目录。
一个主要问题是您无法在copy
模块中使用通配符;复制您应使用with_fileglob
的多个文件,请参阅Looping over Fileglobs
另一个小问题是sudo
和sudo_user
已被弃用并替换为become
和become_user
,它们仍然是产生警告消息的别名,但无法保证消失有一天。
一个工作示例剧本可能如下所示:
---
- hosts: development
become: yes
become_user: root
vars:
env: "{{ ENV|default('DEV') }}"
tasks:
- copy:
src: "{{ item }}"
dest: /apps/tibco/config/ems/7000/data/
with_fileglob:
- "./conf/ems/7000/{{ env }}/*.conf"
最后,在您的示例中,您将同一组文件从包含7000
的目录复制到包含7000
,7200
和7004
的目录。我不确定这是不是你想要的,但我把它留给你的定制。您可以按照上面的示例添加任务。