带管道的curl命令在Ansible中不起作用

Vam*_*ker 2 curl ansible docker ansible-2.x gpg-signature

我正在尝试执行以下命令,这是 Docker 安装的一部分,但它被卡住了。

gpg命令的部分被卡住了,如果我在管道之后删除,gpg它就可以工作。

---
- hosts: all
  become: yes

  tasks:

    - name: add docker GPG key
      shell: "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg"
Run Code Online (Sandbox Code Playgroud)

β.ε*_*.βε 5

一般 Ansible 建议:如果您只是在 Ansible 的任务中提供所有命令行shell,那么您就做错了。
\nAnsible 确实有现有的模块,旨在服务于 Ansible 目标根源的幂等性思想,这将大大简化您将尝试实现的所有任务。

\n
\n

话虽如此,您现在必须了解 Docker 手册中的特定行试图实现的目标。

\n
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \\ \n| gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

此命令会将 Docker 的 GPG 密钥添加到节点上的受信任密钥环中,以便它可以验证您稍后将在任务中使用的包的真实性package

\n

在 Debian 和 Ubuntu 的最新版本中,密钥可以按 \xe2\x80\x94 的意思传递,无需将其删除 \xe2\x80\x94,只要它在格式中使用并在选项中定义asc即可signed-by存储库的。

\n

所以,这两个任务将

\n
    \n
  1. 下载存储库密钥,asc格式为
  2. \n
  3. 定义存储库以及signed-by选项
  4. \n
\n

请注意,这两项任务要求您从节点收集最少的事实集才能解析变量ansible_distribution_release

\n
- get_url:\n    url:  https://download.docker.com/linux/ubuntu/gpg\n    dest: /etc/apt/keyrings/docker.asc\n    mode: \'0644\'\n\n- apt_repository:\n    repo: >-\n      deb\n      [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc]\n      https://download.docker.com/linux/ubuntu\n      {{ ansible_distribution_release }}\n      stable\n
Run Code Online (Sandbox Code Playgroud)\n
\n

从版本 2.15 开始,有一个新模块deb822_repository允许一次性完成所有操作 \xe2\x80\x94 添加 GPG 密钥,该密钥将与存储库本身一起对存储库进行签名。

\n

请注意,这需要python3-debian在目标主机上安装软件包

\n

上述两项任务现在总结为:

\n
- deb822_repository:\n    name: docker\n    types: deb\n    uris: https://download.docker.com/linux/ubuntu\n    suites: "{{ ansible_distribution_release }}"\n    components: stable\n    architectures: amd64\n    signed_by: https://download.docker.com/linux/ubuntu/gpg\n
Run Code Online (Sandbox Code Playgroud)\n
\n

以前,这是模块的目的apt_key,该模块仍然存在,但由于底层apt-key命令已被弃用,因此仅保留用于向后兼容的目的。

\n

使用该模块添加 apt 密钥的任务将是:

\n
- name: add docker GPG key\n  apt_key:\n    url: https://download.docker.com/linux/ubuntu/gpg\n
Run Code Online (Sandbox Code Playgroud)\n