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

Ansible 将变量传递到嵌套剧本的最佳实践?,ansible,Ansible,所以我试着围绕Ansible,构建一个简单的LEMP堆栈。我决定和a一起工作,因为我想在学习的同时尽可能地划分。我遇到了这个问题,需要传递一些变量,比如mysql的根密码。现在我想知道是否有任何最佳实践将变量从主剧本向下传递到各个剧本,或者应该在各个子剧本中设置变量?我用它作为我自己项目的基础。我还想知道重写是如何处理变量的,如果子剧本中设置了默认值,那么主剧本中设置的变量是否会重写该值?我认为最佳实践是,如果可能,重用现有代码。若你们还并没有听说过的话,Ansible有一个Galaxy网站,在

所以我试着围绕Ansible,构建一个简单的LEMP堆栈。我决定和a一起工作,因为我想在学习的同时尽可能地划分。我遇到了这个问题,需要传递一些变量,比如mysql的根密码。现在我想知道是否有任何最佳实践将变量从主剧本向下传递到各个剧本,或者应该在各个子剧本中设置变量?我用它作为我自己项目的基础。我还想知道重写是如何处理变量的,如果子剧本中设置了默认值,那么主剧本中设置的变量是否会重写该值?

我认为最佳实践是,如果可能,重用现有代码。若你们还并没有听说过的话,Ansible有一个Galaxy网站,在那个里人们可以共享各种随时可用的角色。其中一个角色是(其相关github回购协议位于。)

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

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


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

包括:vars.yml

这允许您将变量传递给角色,无论是否嵌套。

Ok,awsome。现有代码=最佳实践是有道理的。但是我仍然想知道变量重写是如何从主剧本一直到子剧本的,你知道吗?我找不到关于这个问题的任何信息。@StenW我提供的例子是你在剧本中应该有的。在该示例中,调用了
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}] }