我是 Ansible 的新手。最近,我需要 ansible 来做到这一点——
- 在客户端上执行命令以获取该客户端的角色名称
- 通过该客户端的角色名称将文件复制到该客户端 - 例如。客户端的名称可以是 - “web1”,“db1”,“cache2”...这可以通过运行应用程序来获取 - “/opt/userlib/getrolename” 文件名将是“web1.conf”, “db1.conf”,“cache2.conf”...
所以我正在尝试这个——
- name: conf_files
hosts: all
tasks:
- name: tracing
shell: |
date +%F_%T >> /tmp/ansible_record.log
- name: get host role
shell: |
/opt/userlib/getrolename|sed "s/rolename://"
register: host_output
- name: check output
debug:
msg: "{{host_output.stdout}}"
- name: copy file with number
copy:
src: {{ host_output.stdout }}.txt
dest: /tmp/reg_role.txt
从调试输出来看,它看起来不错——我可以通过寄存器的标准输出来获取角色。但它因动态文件源名称失败 - {{ host_output.stdout }}.txt
The offending line appears to be:
copy:
src: {{ host_output.stdout }}.txt
^ here
您能告诉我是否可以在ansible中使用带有变量的动态文件源名称?如果是的话,如何使用它?预先感谢您的任何帮助。
解决您问题的方法是使用“双引号”,即
"{{ host_output.stdout }}.txt"
另请参阅YAML 语法(陷阱)