Ansible:剧本和角色差异
Ansible: playbooks and roles difference
我有 4 个服务器:production web
、production db
、staging web+db
、development web+db
(实际上有很多开发服务器,但它们在本地主机上使用 vagrant
).
这些剧本的配置变量不同。
实际上我可以使用 4 个剧本,其中包括其他 yml 文件(nginx.yml
、php.yml
、mysql.yml
),而且我不必使用角色。
正确吗?
我应该如何组织我的 ansible 文件?
Ansible 足够灵活,可以以任何一种方式工作。
您可以继续进行两种方法
- 定义角色(即生产网络、生产数据库、暂存网络+数据库、开发网络+数据库),角色下有任务(nginx、php、mysql)
- 将每个模块定义为角色(即 nginx 角色、php 角色、mysql 角色),然后指定哪些角色包含在哪个剧本中。
第一种方法更适用于每个 php 设置因环境而异的情况。
对于所有 php 设置都相同的情况,第二种方法更好,并且维护 4 个相似的 setup/config 会很麻烦;你会写一次,然后通过它们的局部变量调用它们。
第二个例子
./ansible-playbook roles/role1/tasks/production-web.yml -i hosts.yml
- name: playbook name
hosts: host1
sudo: yes
vars:
- php_version: 5.6.16
vars_files:
- "vars/local_vars"
pre_tasks:
- include: system-preparation.yml
- include: user-setup.yml
tasks:
- debug: msg="Installing and configuring PHP"
- include: php-setup.yml
- include: php-configuration.yml
post_tasks:
- include: health-check.yml
handlers:
我有 4 个服务器:production web
、production db
、staging web+db
、development web+db
(实际上有很多开发服务器,但它们在本地主机上使用 vagrant
).
这些剧本的配置变量不同。
实际上我可以使用 4 个剧本,其中包括其他 yml 文件(nginx.yml
、php.yml
、mysql.yml
),而且我不必使用角色。
正确吗?
我应该如何组织我的 ansible 文件?
Ansible 足够灵活,可以以任何一种方式工作。 您可以继续进行两种方法
- 定义角色(即生产网络、生产数据库、暂存网络+数据库、开发网络+数据库),角色下有任务(nginx、php、mysql)
- 将每个模块定义为角色(即 nginx 角色、php 角色、mysql 角色),然后指定哪些角色包含在哪个剧本中。
第一种方法更适用于每个 php 设置因环境而异的情况。 对于所有 php 设置都相同的情况,第二种方法更好,并且维护 4 个相似的 setup/config 会很麻烦;你会写一次,然后通过它们的局部变量调用它们。
第二个例子
./ansible-playbook roles/role1/tasks/production-web.yml -i hosts.yml
- name: playbook name
hosts: host1
sudo: yes
vars:
- php_version: 5.6.16
vars_files:
- "vars/local_vars"
pre_tasks:
- include: system-preparation.yml
- include: user-setup.yml
tasks:
- debug: msg="Installing and configuring PHP"
- include: php-setup.yml
- include: php-configuration.yml
post_tasks:
- include: health-check.yml
handlers: