我需要执行以下命令集ansible
:
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
问题从第二行开始。通过ansible我这样做:
- name: curl curl
command: sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
作为回应,我收到一个错误:
[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather
than running sudo
fatal: [default]: FAILED! => {"changed": true, "cmd": ["sudo", "curl", "-s", "https://packages.cloud.google.com/apt/doc/apt-key.gpg", "|", "sudo", "apt-key", "add", "-"], "delta": "0:00:00.037295", "end": "2018-02-14 07:25:50.272885", "failed": true, "msg": "non-zero return code", "rc": 2, "start": "2018-02-14 07:25:50.235590", "stderr": "curl: option -: is unknown\ncurl: try 'curl --help' or 'curl --manual' for more information", "stderr_lines": ["curl: option -: is unknown", "curl: try 'curl --help' or 'curl --manual' for more information"], "stdout": "", "stdout_lines": []}
如何正确执行这样的命令?我试图在命令中添加一行sudo: true
并将其删除sudo
。错误不会消失。
让我们按顺序走吧。这只是一个警告,一个警告。Ansible 提示您重新制作 bash 命令,因为它会在其中看到单词 sudo 并告诉您“嘿,我也可以 sudo - 使用我的常规方式。”
可以忽略。
如果你想使用 ansible 的标准特性,那么你需要着眼于成为:
同时,在 ansible.cfg 中指定要连接到机器的用户(并非所有 playbook 都需要 become_user: root 对我来说),例如:
纯看历史:之前没有become命令,remote_user是和sudo结合使用的,所以如果你遇到很老的文章,可以在里面看到这个命令:
在我的实践中,有一种情况是我忽略了关于用 ansible rsync 模块替换 rsync shell 命令的 ansible 警告:我首先使用来自 ansible 的标准 rsync 命令准确地编写了一个任务,但结果证明它不支持一些支持线 rsync 命令的模式/键。因此,我在评论中单独描述了这种非标准脚本的原因,以便有人不会破坏脚本,试图“改进”它 - 但总的来说我尽量减少从命令行启动的使用。
在您的情况下,我建议在没有命令行游戏的情况下切换到apt_repository 。
好吧,我猜是这样的: