Ansible:读取远程文件

Kiv*_*iva 32 ansible ansible-playbook

我在远程主机上生成带有ansible的文件,在这一代之后,我想在另一个任务中读取这些文件.

我找不到任何模块用ansible读取远程文件(查找似乎只在本地主机上).

你知道这样的模块吗?

谢谢

编辑:

这是我的用例:

我生成ssh密钥,然后将其添加到github.这些键是由var文件中的对象设置的,所以我像这样循环生成它:

    tasks:
  - name: Create ssh key
    user:
      name: "{{sshConfigFile.user}}"
      generate_ssh_key: yes
      ssh_key_file: ".ssh/{{item.value.file}}"
      state: present
    with_dict: "{{sshConfiguration}}"
Run Code Online (Sandbox Code Playgroud)

它工作得很好但是如何读取这些键通过API将其发送到github?

dan*_*y74 64

使用--diff标志运行(在目标文件更改时输出diff).

ansible-playbook --diff server.yaml
Run Code Online (Sandbox Code Playgroud)

或啜饮它..

- name: Slurp hosts file
  slurp:
    src: /etc/hosts
  register: slurpfile

- debug: msg="{{ slurpfile['content'] | b64decode }}"
Run Code Online (Sandbox Code Playgroud)

  • 这是个人的解决方案 (3认同)
  • 我认为这有一天会成为最佳答案 (2认同)
  • 5年后我没有错,只是……我曾经以为我错了,但我错了 (2认同)

hel*_*loV 14

正如您所说,所有查找都在localhost上.但是所有这些都可以通过使用shell和远程完成register.你能告诉你到底想要做什么吗?只是一个例子.

  - shell: cat "{{remote_file}}"
    register: data

  - shell: ......
    with_xxxx:
Run Code Online (Sandbox Code Playgroud)

  • 错误的答案,尽可能避免使用shell和command模块(它们自然不是幂等的),您应该使用slurp模块..争论的是,因为这是只读操作,所以shell命令是可以接受的,但是最好养成避免使用的习惯存在自然的ansible解决方案的shell命令..请参见下面的最佳方法回答 (5认同)

小智 6

您可以尝试"获取"模块,该模块将密钥文件检索到目标路径localhost:

fetch: 
  src: ".ssh/{{item.value.file}}" 
  dest:"/tmp/ssh_keys/{{item.value.file}}"
  flat: yes
with_dict: "{{sshConfiguration}}" 
Run Code Online (Sandbox Code Playgroud)

  • @danday74 你是正确的,使用 slurp 将避免临时文件。但是,如果您重新阅读 fetch 的注释,它会指出“*当使用 `become` 运行 fetch 时,slurp 模块也将被使用 [...]*”。在这个例子中,他没有使用become (2认同)