我正在撰写我的第一个Ansible playbook,需要一些指导。我有一个简单的网络,由3个VM组成:
但是这里有几个问题:
ansible01
- 我的 Ansible 服务器 (Ubuntu)db01
- 一个 DB (同样是 Ubuntu)myapp01
- 一个托管 Java 应用的 Ubuntu VM
/etc/ansible/hosts
文件:[databases]
db01.example.com
[app_servers]
myapp01.example.com
myapp02.example.com
我已经正确地配置了SSH,我可以运行ansible all ping -m
,Ansible能够ping通DB和app服务器节点。目前为止一切顺利。
我正在尝试编写三个与Docker相关的playbooks,以完成以下操作:
- 确保所有的
[数据库]
节点和所有[应用服务器]
节点都在运行Docker;如果没有安装和运行,则安装Docker引擎并开始运行它;如果已经安装但未运行,则重新启动。 - 停止/启动/重启特定类型节点上运行的所有容器(“角色"?)。例如,我想告诉Ansible我要重新启动在所有
[应用服务器]
节点上运行的所有容器。 - 停止/启动/重启在任意节点上运行的任意容器。例如,也许
myapp01
上有2个容器在运行,fizz
和buzz
。我想能够告诉Ansible重新启动(具体地说)myapp01
的fizz
容器,但不包括其buzz
容器,也不包括任何myapp02
容器。
我认为这些应该放在三个单独的playbooks中(如果我错了或有更好的方法请纠正我)。我尝试着编写它们。第一个是setup_docker.yml
:
- name: ensure docker engine is installed and running
docker:
name: *
state: started
然后,在restart_app_servers.yml
中重启所有[databases]
:
- name: restart app servers
docker:
name: app_servers
state: restarted
对于在单个节点上重新启动任意容器(restart_container.yml
):
- name: restart a specific container
docker:
name: %name_of_container_and node%
state: restarted
但是这里有几个问题:
- 在
setup_docker.yml
中,我该如何指定所有节点类型 ([databases]
和[app_servers]
) 都应受影响?我知道星号 (“*”) 是不正确的。 - 在
restart_app_servers.yml
中,name
字段的正确值是什么?我该如何告诉 Ansible 重启所有app_server
节点? - 在
restart_container.yml
中,我该如何“注入”(作为参数/变量传递)节点和容器的名称?理想情况下,我希望运行此 playbook 对任何节点和任何容器进行操作。 - 还有其他错误吗?