2014-02-27 58 views
3

所以我试图围绕Ansible围绕我的脑袋,并构建一个简单的LEMP堆栈。我决定与nested playbook合作,因为我想在学习的同时尽可能多地进行划分。我遇到了这个问题,我需要传递一些变量,比如mysql的root密码。现在我想知道是否有任何最佳做法将主要剧本的变奏曲传递给单独的剧本,或者是否应该在各个子剧本中设置变奏曲?我使用this repo作为我自己项目的基础。我还想知道,如果在子Playbook中设置了默认值,主Playbook中设置的变量是否会覆盖此值,那么覆盖如何与varible一起工作?Ansible将vars传递给嵌套的playbooks的最佳实践?

回答

9

我想最佳实践是,如果可能的话,重用现有的代码。如果您还没有听说过,Ansible有Galaxy网站https://galaxy.ansible.com/,人们可以在这里共享各种随时可以使用的角色。一个这样的角色是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}] } 
+0

好的,awsome。现有的代码=最佳实践是有道理的。但我仍然想知道变量重写是如何从主要剧本到副剧本的,你知道吗?我无法找到关于此问题的任何信息。 – StenW

+0

@StenW我提供的例子就是你的手册中的内容。在那个例子中,正在调用mysql的角色,并传入不同的变量。 – Mxx

2

一个好的解决办法是你必须具有可设置的变量的例子vars.yml.dist文件。这存在于你的仓库中,开发人员只需在此基础上创建一个vars.yml的本地副本。然后,简单地将以下内容添加到您的手册中: include: vars.yml 这允许您将变量传递给您的角色,嵌套或不嵌套。

相关问题