更复杂的服务器范围的目录结构

时间:2018-07-31 11:12:12

标签: ansible ansible-inventory

我刚刚阅读了一些Ansible最佳实践,但所有这些最佳实践都只适用于开发,测试和生产阶段。对我来说,这有点复杂。我有这样的服务器:

  • 应用开发服务器
  • 应用程序测试服务器
  • 应用程序产品服务器
  • jira测试服务器
  • jira产品服务器
  • sold产品服务器
  • jenkins构建奴隶

当我尝试定义库存时我很挣扎。因为可能会发生多种情况:

  • 在所有应用服务器上执行剧本(开发+测试+生产)
  • 在所有 app产品服务器
  • 上执行剧本
  • 在所有产品服务器(应用程序+ jira + solr)上执行剧本

在这种情况下,目录布局如何?以及在何处定义特定于主机和环境的变量?以及如何执行我的剧本(不带--limit?)

2 个答案:

答案 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

而每个库存将具有经典结构,如:

enter image description here

一旦有了所有这些清单,就可以收集可以组成多个剧本的简单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

但是,我们广泛使用动态清单文件(查询数据库并获取主机列表)。