【问题标题】:Get Absolute Path of File on Local Host获取本地主机上文件的绝对路径
【发布时间】:2018-11-26 21:37:49
【问题描述】:

One of my Ansible roles 允许用户对目标主机执行一组测试,将影响降至最低,并删除测试的所有痕迹。

其中一个令人惊讶的难以确定的事情是运行 playbook 的主机上的绝对路径。为copy 解析文件似乎真的很复杂,Ansible 有一个尝试解析文件的优先级列表。

作为测试失败时发出的调试信息的一部分,我想指定文件在本地主机上的绝对路径和文件在远程主机上的绝对路径。远程主机很容易查询,但我似乎无法找到一种方法来确定本地主机上源文件的来源。

这是我的任务:

- copy: src={{ goss_file }} dest=/tmp/goss/ mode=0644

goss_file 由用户指定为角色变量。我想做的是在针对远程主机运行 Ansible 的本地计算机上确定 goss_file 的完整绝对路径。

有没有办法做到这一点?这将显着帮助我进行调试。

【问题讨论】:

  • 用户是否从 playbook 目录运行 playbook,以便可以针对 {{ playbook_dir }} 解析任何相对路径?
  • 如果用户像../../../../myfiletocopy 一样输入你想输出绝对路径?您可以在localhost 上运行readlink 命令并使用调试模块输出

标签: ansible


【解决方案1】:

这是我用来在我们的 goss 测试解决方案中查找模板文件(在本例中)的 sn-p

    - 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 2016-11-19
    • 1970-01-01
    • 2012-04-24
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多