我刚刚阅读了一些Ansible最佳实践,但所有这些最佳实践都只适用于开发,测试和生产阶段。对我来说,这有点复杂。我有这样的服务器:
当我尝试定义库存时我很挣扎。因为可能会发生多种情况:
在这种情况下,目录布局如何?以及在何处定义特定于主机和环境的变量?以及如何执行我的剧本(不带--limit
?)
答案 0 :(得分:1)
最佳实践并非总是适用于每个用例。对于您的特定用途,应按照以下说明进行操作:
以统一的方式创建多个清单,并根据基于服务器的功能进行分类。例如,每种环境都有单独的清单:
application dev server inventory
application test server inventory
application prod server inventory
jira test server inventory
jira prod server inventory
solr prod server inventory
jenkins build slave inventory
而每个库存将具有经典结构,如:
一旦有了所有这些清单,就可以收集可以组成多个剧本的简单shell脚本,例如,应用服务器的shell脚本为:
echo "***********************************"
echo "****INFO:- Performing deployment: on app servers"
echo "***********************************"
ansible-playbook $deploy_component_playbook1 -i $INVENTORY_PATH/application-dev-server/hosts --extra-vars " " # define env varaibles inside " "
ansible-playbook $deploy_component_playbook2 -i $INVENTORY_PATH/application-test-server/hosts --extra-vars " " # define env varaibles inside " "
ansible-playbook $deploy_component_playbook3 -i $INVENTORY_PATH/application-prod-server/hosts --extra-vars " " # define env varaibles inside " "
使用各自的剧本名称和绝对/相对路径定义这些变量deploy_component_playbook1, deploy_component_playbook2, deploy_component_playbook3
。
变量INVENTORY_PATH
应该是存放所有不同库存的库存主管的绝对路径。
环境变量可以按照我在“”中--extra-vars
之后提到的定义。
类似地,您可以为其他组合的剧本提供一个shell脚本。最后,您需要启动所需的Shell脚本。
答案 1 :(得分:0)
我们的库存并不复杂,因此可以按以下方式管理组和子组。
[app_prod]
appserverslist.xyz.com
[jira_prod]
jiraserverslist.xyz.com
[application:children]
app_prod
app_stage
app_test
[jira:children]
jira_prod
jira_test
jira_stage
[application:vars] # variables to all groups
xyz=10
[app_prod:vars] # variables to individual group
http_port=88
[all:vars] # variables to all hosts
ansible_ssh_user=xyz
但是,我们广泛使用动态清单文件(查询数据库并获取主机列表)。