使用 ansible-playbook 安装 docker-compose 时出错
Error when installing docker-compose using ansible-playbook
我有一个非常简单的 Ansible 剧本,为 docker-compose 和 docker 安装了所有依赖项,但是在安装 docker-compose 时出现错误,这是任务我的剧本在 CentOS7 环境中安装 docker-compose。
#ensure docker-compose and chmod +x /usr/local/bin/docker-compose
- name: Ensure docker-compose is installed and available
command: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- name: Ensure permissions docker-compose
command: chmod +x /usr/local/bin/docker-compose
出现以下错误:
TASK: [Ensure docker-compose is installed and available] **********************
failed: [nutrilife-aws] => {"changed": true, "cmd": ["curl", "-L", "https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname", "-s`-`uname", "-m`", ">", "/usr/local/bin/docker-compose"], "delta": "0:00:00.004592", "end": "2016-03-26 14:19:41.852780", "rc": 2, "start": "2016-03-26 14:19:41.848188", "warnings": ["Consider using get_url module rather than running curl"]}
stderr: curl: option -s`-`uname: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/mmaia/playbook.retry
nutrilife-aws : ok=4 changed=0 unreachable=0 failed=1
我被这个简单的错误困扰了几个小时。我从标准 docker 站点获得命令并直接在 shell 中测试并且它有效。
我也尝试过使用双引号将命令括起来,例如 command: "curl ..." 但它并没有改变错误。
command
未通过 shell 处理。使用 shell
.
- name: Ensure docker-compose is installed and available
shell: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
作为 helloV
you need to use the shell
模块,如果你想利用 shell 扩展或 shell 的环境变量。
但是,在 Ansible 中,您通常最好使用更高级别的模块,并且只有在您无法使用其他模块执行所需操作时才求助于 shell
或 command
模块。这种方法免费为您提供了更好的执行控制,例如轻松的幂等性和更好的输出可见性。
在你的情况下,你可以使用 get_url
(我相信如果你试图 shell out with curl 你可能会更好地使用这个模块,我相信 Ansible 实际上会警告你)从中获取东西互联网。
在您的情况下,您的任务可能如下所示:
- name: Ensure docker-compose is installed and available
get_url:
url : https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }}
dest: /usr/local/bin/docker-compose
mode: 'u+x,g+x'
上述任务使用目标主机上 gathering facts 返回的特殊变量,因此您的任务在 Linux 系统或 OS X 上应该 运行 正常(你需要 .exe
的条件后缀才能使 Windows link 工作,显然需要不同的目标路径等)。
它还使用 file
模块中的 mode
参数为用户和组添加执行权限,这样您就可以避免 chmod
任务。
我有一个非常简单的 Ansible 剧本,为 docker-compose 和 docker 安装了所有依赖项,但是在安装 docker-compose 时出现错误,这是任务我的剧本在 CentOS7 环境中安装 docker-compose。
#ensure docker-compose and chmod +x /usr/local/bin/docker-compose
- name: Ensure docker-compose is installed and available
command: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- name: Ensure permissions docker-compose
command: chmod +x /usr/local/bin/docker-compose
出现以下错误:
TASK: [Ensure docker-compose is installed and available] **********************
failed: [nutrilife-aws] => {"changed": true, "cmd": ["curl", "-L", "https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname", "-s`-`uname", "-m`", ">", "/usr/local/bin/docker-compose"], "delta": "0:00:00.004592", "end": "2016-03-26 14:19:41.852780", "rc": 2, "start": "2016-03-26 14:19:41.848188", "warnings": ["Consider using get_url module rather than running curl"]}
stderr: curl: option -s`-`uname: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/mmaia/playbook.retry
nutrilife-aws : ok=4 changed=0 unreachable=0 failed=1
我被这个简单的错误困扰了几个小时。我从标准 docker 站点获得命令并直接在 shell 中测试并且它有效。 我也尝试过使用双引号将命令括起来,例如 command: "curl ..." 但它并没有改变错误。
command
未通过 shell 处理。使用 shell
.
- name: Ensure docker-compose is installed and available
shell: curl -L https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
作为 helloV
shell
模块,如果你想利用 shell 扩展或 shell 的环境变量。
但是,在 Ansible 中,您通常最好使用更高级别的模块,并且只有在您无法使用其他模块执行所需操作时才求助于 shell
或 command
模块。这种方法免费为您提供了更好的执行控制,例如轻松的幂等性和更好的输出可见性。
在你的情况下,你可以使用 get_url
(我相信如果你试图 shell out with curl 你可能会更好地使用这个模块,我相信 Ansible 实际上会警告你)从中获取东西互联网。
在您的情况下,您的任务可能如下所示:
- name: Ensure docker-compose is installed and available
get_url:
url : https://github.com/docker/compose/releases/download/1.7.0-rc1/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }}
dest: /usr/local/bin/docker-compose
mode: 'u+x,g+x'
上述任务使用目标主机上 gathering facts 返回的特殊变量,因此您的任务在 Linux 系统或 OS X 上应该 运行 正常(你需要 .exe
的条件后缀才能使 Windows link 工作,显然需要不同的目标路径等)。
它还使用 file
模块中的 mode
参数为用户和组添加执行权限,这样您就可以避免 chmod
任务。