将变量传递给嵌套的剧本的最佳实践?

时间:2014-02-27 18:31:00

标签: ansible

所以我试图绕着Ansible包围并构建一个简单的LEMP堆栈。我决定使用nested playbook,因为我想在学习的同时尽可能地划分区域。我遇到了这个问题,我需要传递一些变量,比如mysql的root密码。现在我想知道是否有任何最佳实践从主要剧本中传递各种各样的剧本,或者是否应该在各个子剧本中设置变量?我使用this repo作为我自己项目的基础。我也想知道如何在varibles中使用overriding,如果在子playbook中设置了默认值,那么主playbook中设置的变量是否会覆盖这个值?

2 个答案:

答案 0 :(得分:9)

我认为,如果可能,最佳实践是重用现有代码。如果你还没有听说过,Ansible在https://galaxy.ansible.com/ Galaxy 网站,人们可以在这里分享各种即用型角色。其中一个角色是mysql(其相关的github仓库位于https://github.com/bennojoy/mysql。)

您不仅可以在剧本中使用该角色,而且该页面还有示例,说明如何将参数/变量传递给您的角色:

  

4)完全安装/配置的具有主从复制的MySQL服务器。

- hosts: master
  roles:
   - {role: mysql, mysql_db: [{name: benz}, {name: benz2}],
                   mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"},
                                 {name: ben2, pass: foo}],
                   mysql_db_id: 8 }

- hosts: slave
  roles:
   - {role: mysql, mysql_db: none, mysql_users: none,
            mysql_repl_role: slave, mysql_repl_master: vm2,
            mysql_db_id: 9, mysql_repl_user: [{name: repl, pass: foobar}] }

答案 1 :(得分:2)

一个好的解决方案是你有一个vars.yml.dist文件,其中包含可以设置的变量的示例。这存在于您的存储库中,开发人员只需基于此创建vars.yml的本地副本。然后只需将以下内容添加到您的剧本中: include: vars.yml 这允许您将变量传递给您的角色,嵌套与否。

相关问题