【问题标题】:Ansible: read remote fileAnsible:读取远程文件
【发布时间】:2016-01-11 13:28:13
【问题描述】:

我在远程主机上使用 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}}"

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

【问题讨论】:

标签: ansible ansible-playbook


【解决方案1】:

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

ansible-playbook --diff server.yaml

slurp 起来..

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

- debug: msg="{{ slurpfile['content'] | b64decode }}"

【讨论】:

  • 我认为这有一天会成为最佳答案
  • 这是惯用的解决方案
  • 5 年后我没有错是我……我以为我错了一次但我错了
【解决方案2】:

请注意,当提出这个问题时,以下解决方案是可以接受的。 Ansible 的更高版本可能会提供更好的解决方案来解决此问题。

正如您所说,所有查找都在本地主机上。但是所有这些都可以通过使用shellregister 远程完成。你能说出你到底想做什么吗?只是一个例子。

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

  - shell: ......
    with_xxxx:

【讨论】:

  • 我试图这样做,但我做不到,因为我需要循环另一个对象。
  • 错误答案,尽可能避免使用 shell 和命令模块(它们不是自然幂等的),您应该使用 slurp 模块.. 有争议的是,因为这是一个只读操作,所以 shell 命令是可以接受的,但是最好养成在存在自然 ansible 解决方案的情况下避免使用 shell 命令的习惯。请参阅下面的答案以了解最佳方法
【解决方案3】:

您可以尝试'fetch' 模块,该模块会将密钥文件检索到localhost 上的目标路径:

fetch: 
  src: ".ssh/{{item.value.file}}" 
  dest:"/tmp/ssh_keys/{{item.value.file}}"
  flat: yes
with_dict: "{{sshConfiguration}}" 

【讨论】:

  • 好答案,但 slurp 更好,它可以避免在 localhost 上创建 tmp 文件 .. fetch 的文档说它在后台使用 slurp
  • @danday74 你是对的,因为使用 slurp 会避免临时文件。但是,如果您重新阅读 fetch 的说明,它会指出“使用 become 运行 fetch 时,还将使用 slurp 模块 [...]”。在这个例子中,他没有使用 become
【解决方案4】:

您可以使用 register 命令将文件的内容注册到变量中。这是我的建议,

- name: get contents of file
  command: cat /path/to/file
  register: filename
  become: true # use case specific option

- name: viewing the contents
  debug:
    msg: "{{filename.stdout}}"

这将显示文件的内容。

【讨论】:

【解决方案5】:

通过使用命令模块,您可以在远程节点的另一个任务中读取或使用该文件。

喜欢

-command: cp /tmp/xxx/example.sh /usr/local/yyy

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2020-07-06
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多