Ansible:剧本和角色差异

Ansible: playbooks and roles difference

我有 4 个服务器:production webproduction dbstaging web+dbdevelopment web+db(实际上有很多开发服务器,但它们在本地主机上使用 vagrant).
这些剧本的配置变量不同。

实际上我可以使用 4 个剧本,其中包括其他 yml 文件(nginx.ymlphp.ymlmysql.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: