我们希望在运行Docker 1.12的主机上做不同的事情,而不是在Ansible的Docker 1.10上。
我如何获得我的清单中指定的Docker版本,以便我可以稍后说…
我不知道它是否重要,但我们主要使用安装在虚拟机上的CoreOS或CentOS。
下面是一个例子,你可以做你想做的事情:
--- - hosts: localhost remote_user: test tasks: - name: get docker version shell: "docker -v | cut -d ' ' -f 3 | cut -d ',' -f 1" register: version - debug: var=version.stdout - name: do something if version is 1.13.0 shell: "echo it is 1.13.0" when: version.stdout == "1.13.0" - name: do nothing if version is 1.13.0 shell: "echo nothing" when: version.stdout != "1.13.0"
你得到docker版本,并将其存储在一个variables。 然后在正确设置的条件下,您可以执行您需要的任务。 testing剧本的输出是:
[me@mac]$ ansible-playbook test.yml [WARNING]: Host file not found: /etc/ansible/hosts [WARNING]: provided hosts list is empty, only localhost is available PLAY [localhost] *************************************************************** TASK [setup] ******************************************************************* ok: [localhost] TASK [get docker version] ****************************************************** changed: [localhost] TASK [debug] ******************************************************************* ok: [localhost] => { "version.stdout": "1.13.0" } TASK [do something if version is 1.13.0] *************************************** changed: [localhost] TASK [do nothing if version is 1.13.0] ***************************************** skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=4 changed=2 unreachable=0 failed=0
我有docker1.13.0。 剧本是在我的Mac上运行的,但它也可以在CentOS上运行。 根据权限,您可能需要使用sudo 。 示例中的Ansible版本是2.2.1.0,但它也可以在较低版本上运行。
您可以针对您的广告资源运行类似的操作手册,并对所有具有所需泊坞窗版本的主机执行echo $HOSTNAME – 这样您将收集所需的信息。 当然你可以用grep省略输出。
local_facts可能是这里的一个选项:
在目标系统/etc/ansible/facts.d/apps.fact使用以下内容创build文件:
[docker] version=1.13.0
variables应该在Ansible中以{{ ansible_local.apps.docker.version }}
您可能需要使用用于安装docker的angular色来更新事实文件。