在Ansible中,可以使用动态主机文件和组变量来根据提供的变量在不同的主机或一组主机上运行playbook。
下面是一个示例:
动态主机文件(dynamic_inventory.py):
#!/usr/bin/env python
import json
# 根据提供的变量生成主机清单
def generate_inventory(variable):
if variable == "dev":
inventory = {
"web_servers": {
"hosts": ["web1.example.com", "web2.example.com"],
"vars": {
"http_port": 80,
"max_connections": 100
}
},
"db_servers": {
"hosts": ["db1.example.com", "db2.example.com"],
"vars": {
"db_port": 3306,
"max_connections": 200
}
}
}
elif variable == "prod":
inventory = {
"web_servers": {
"hosts": ["web3.example.com", "web4.example.com"],
"vars": {
"http_port": 8080,
"max_connections": 200
}
},
"db_servers": {
"hosts": ["db3.example.com", "db4.example.com"],
"vars": {
"db_port": 5432,
"max_connections": 500
}
}
}
else:
inventory = {}
return json.dumps(inventory)
# 打印生成的主机清单
print(generate_inventory("dev"))
运行playbook(site.yml):
---
- name: Example playbook
hosts: all
gather_facts: false
tasks:
- name: Print variable
debug:
var: inventory_hostname
运行命令:
ansible-playbook -i dynamic_inventory.py site.yml --extra-vars "variable=dev"
在上述示例中,动态主机文件根据提供的变量生成不同的主机清单。然后,使用ansible-playbook
命令运行playbook,并通过--extra-vars
参数传递变量。根据提供的变量,Ansible会选择相应的主机组,并在每个主机上运行playbook中的任务。
请注意,上述示例仅用于演示目的,实际使用时需要根据实际情况进行调整。
领取专属 10元无门槛券
手把手带您无忧上云