One of my Ansible roles允许用户对目标主机执行一组测试,从而将影响降至最低,消除了测试的所有痕迹。
要确定的令人惊讶的困难之一是运行剧本的主机上的绝对路径。为copy
解析文件似乎非常复杂,Ansible具有尝试解析文件的优先级列表。
作为测试失败时发出的调试信息的一部分,我想指定本地主机上文件的绝对路径和远程主机上文件的绝对路径。远程主机很容易查询,但是我似乎找不到找到确定源文件来自本地主机的位置的方法。
这是我的任务:
- copy: src={{ goss_file }} dest=/tmp/goss/ mode=0644
goss_file
由用户指定为角色变量。我想做的是确定针对远程主机运行Ansible的本地计算机上goss_file
的完整绝对路径。
有没有办法做到这一点? 可以帮助我进行调试。
答案 0 :(得分:0)
这是我用来在goss测试解决方案中查找模板文件的代码段
- name: save goss files list
set_fact:
goss_files : "{{ lookup('fileglob', '../roles/{{role_name}}/templates/*.j2', wantlist=True) | sort }}"
- name: print
debug:
msg:
- "{{ goss_files }}"
- name: Copy goss test from template to remote
template:
src: "{{ item }}"
dest: /tmp/{{ item | basename | regex_replace('\.j2','.yml') }}
mode: '0644'
with_items:
- "{{ goss_files }}"
我还必须在ansible的“根目录”中创建一个空文件文件夹。 您可以在Using goss and Ansible templates for System Testing
上查看完整的解决方案