我如何优化Ansible的剧本

时间:2019-09-17 13:56:54

标签: loops variables ansible roles

这时我的剧本看起来像这样:

SELECT o.id 
FROM object o JOIN
     dimensions d 
     ON o.dimension_value_id = d.id
GROUP BY o.id 
HAVING MAX(CASE WHEN o.dimension = 'length' THEN d.value END)) < 350 AND
       MAX(CASE WHEN o.dimension = 'width' THEN s.value END)) < 350 AND
       MAX(CASE WHEN o.dimension = 'height' THEN d.value END)) < 350;

我可以迭代商品吗? Desiderata:

    - role: co_java
      vars:
        co_java_version: jdk1.6.0_45
    - role: co_java
      vars:
        co_java_version: jdk1.8.0_161

谢谢

1 个答案:

答案 0 :(得分:2)

参考:Roles doc page

您不能使用经典的角色调用方式来做到这一点(就像上面的示例一样)。但是,从ansible 2.4开始,p = subprocess.Popen(["code"], shell=True) import_role可用。

include_role

同时,修改角色以直接接受要安装的jdks列表可能会更容易甚至更有效,因此循环直接发生在相关任务中。然后,您可以使用类似以下内容的名称进行调用:

- name: playbook to install java
  hosts: my_hosts

  tasks:
    - name: Include role to install java versions
      include_role:
        name: co_java
      vars:
        co_java_version: "{{ item }}"
      loop:
        - jdk1.6.0_45
        - jdk1.8.0_161