curl命令与管道在Ansible中不工作

7gcisfzg  于 2023-04-30  发布在  其他
关注(0)|答案(3)|浏览(252)

我试图执行下面的命令,这是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"
q3qa4bjr

q3qa4bjr1#

**一般Ansible建议:**如果你只是在Ansible中的shell任务中输入所有命令行,那么你做错了。

Ansible确实有现有的模块,其目的是服务于作为Ansible目标根源的幂等性思想,这将大大简化您将尝试实现的所有任务。
话虽如此,您现在必须了解Docker手册的特定行试图实现的目标。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ 
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg

它实际上是一行代码,将Docker的GPG密钥添加到节点上的可信密钥环,因此它可以验证您稍后将在package任务中使用的包的真实性。
因此,本例中的专用模块是apt_key模块。
您的任务最终是:

- name: add docker GPG key
  apt_key:
    url: https://download.docker.com/linux/ubuntu/gpg
tcbh2hod

tcbh2hod2#

apt示例

对于download files via HTTPS to your node,您可以使用get_url_module,然后使用apt_key _module任务来添加密钥。

- name: Download apt key
  get_url:
    url: https://download.docker.com/linux/ubuntu/gpg
    dest: /tmp # or /etc/pki/rpm-gpg depending on the infrastructure

- name: Add a key from a file
  ansible.builtin.apt_key:
    file: /tmp/gpg
    state: present

您也可以通过以下方式添加它

- name: Add an Apt signing key, uses whichever key is at the URL
  ansible.builtin.apt_key:
    url: https://download.docker.com/linux/ubuntu/gpg
    state: present

您可能需要为gpgkeyring使用其他模块或任务。

类似问答

7nbnzgx9

7nbnzgx93#

今天也遇到了同样的问题,因为我不想使用apt_key模块,因为apt-key命令,该模块在引擎盖下使用,被弃用。我跟你的方法一样。
正如@Zeitounator提到的,这个问题是因为gpg在交互模式下运行并等待确认,我敢肯定这是因为目标文件已经存在(可能是因为你之前运行过任务),所以它要求你覆盖该文件。因此,在这种情况下的解决方案是使用shell模块中的creates选项,指向存储gpg密钥的路径。这样,如果文件存在,任务将不会再次运行。Seewww.example. www.example.com

- name: add docker GPG key
  shell: |
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg |\
    gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  creates: /etc/apt/keyrings/docker.gpg

相关问题