我试图执行下面的命令,这是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"
3条答案
按热度按时间q3qa4bjr1#
**一般Ansible建议:**如果你只是在Ansible中的
shell
任务中输入所有命令行,那么你做错了。Ansible确实有现有的模块,其目的是服务于作为Ansible目标根源的幂等性思想,这将大大简化您将尝试实现的所有任务。
话虽如此,您现在必须了解Docker手册的特定行试图实现的目标。
它实际上是一行代码,将Docker的GPG密钥添加到节点上的可信密钥环,因此它可以验证您稍后将在
package
任务中使用的包的真实性。因此,本例中的专用模块是
apt_key
模块。您的任务最终是:
tcbh2hod2#
apt
示例对于download files via HTTPS to your node,您可以使用
get_url
_module,然后使用apt_key
_module任务来添加密钥。您也可以通过以下方式添加它
您可能需要为
gpg
或keyring
使用其他模块或任务。类似问答
7nbnzgx93#
今天也遇到了同样的问题,因为我不想使用
apt_key
模块,因为apt-key
命令,该模块在引擎盖下使用,被弃用。我跟你的方法一样。正如@Zeitounator提到的,这个问题是因为gpg在交互模式下运行并等待确认,我敢肯定这是因为目标文件已经存在(可能是因为你之前运行过任务),所以它要求你覆盖该文件。因此,在这种情况下的解决方案是使用
shell
模块中的creates
选项,指向存储gpg密钥的路径。这样,如果文件存在,任务将不会再次运行。Seewww.example. www.example.com