使用ansible-playbook安装docker-compose时出错
我有一个非常简单的Ansible操作手册,为docker-compose和docker安装了所有依赖项,但是在安装docker-compose时出现错误,这是我的操作手册中将Docker-compose安装在CentOS7环境中的任务。
#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中testing,它的工作原理。 我也尝试使用双引号环绕命令,如命令:“curl …”,但它并没有改变错误。
正如helloV
指出的,如果你想利用shell扩展或者shell的环境variables,你需要使用shell
模块。
但是,在Ansible中,通常情况下,使用更高级别的模块会更好,如果不能使用另一个模块执行所需的操作,则只需使用shell
或command
模块。 这种方法可以让您更好地控制免费的执行,如简单的幂等性和更好的输出可视性。
在你的情况下,你可以使用get_url
(我相信Ansible实际上会警告你,如果你尝试用curl来解决这个问题,那么你可以用这个模块来更好)来从网上获取东西。
在你的情况下,你的任务可能看起来像这样:
- 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'
上面的任务使用通过在目标主机上收集事实返回的特殊variables,以便您的任务应该在Linux系统或OS X上正常运行(您需要Windows链接的条件后缀.exe
才能工作,显然是不同的目的地path等)。
它还使用file
模块中的mode
参数来为用户和组添加执行权限,以便您可以避免执行chmod
任务。
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