如何在Ansible块内执行角色

如何在Ansible块内执行角色,ansible,ansible-2.x,Ansible,Ansible 2.x,我写了一本ansible剧本,在远程机器上进行部署 - name: Deployment part of the script vars: hostName: build_num: hosts: "{{hostName}}" become: true serial: 1 tasks: this does deployment 在这之后,我想执行util,它位于本地主机上,这个剧本将从那里执行 现在我已经写了一个角色,如

我写了一本ansible剧本,在远程机器上进行部署

-   name: Deployment part of the script
    vars:
       hostName: 
       build_num: 
    hosts: "{{hostName}}"
    become: true
    serial: 1
    tasks: this does deployment
在这之后,我想执行util,它位于本地主机上,这个剧本将从那里执行

现在我已经写了一个角色,如果我把它们作为剧本单独执行的话,它会帮我做到这一点


  - name: Roles Demo
    hosts: 127.0.0.1
    connection: local
    vars: 
       var1: "sometextvalue"
       var2: "sometextvalue"
       var3: "someurl" 
    roles: 
    - demorole #role which I created

现在我想把这个角色整合到我的主要剧本中,上面提到过,但是我得到了更多

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

虽然它与单独运行时工作正常的代码片段相同

我还想使用“Ansible blocks”执行此操作,比如当某个条件匹配时,执行某个角色,但为此,我也得到了相同的上述错误,只是为了总结我想使用这些块实现的功能,如下所示

-   name: Deployment part of the script
    vars:
       hostName: 
       build_num: 
    hosts: "{{hostName}}"
    become: true
    serial: 1
    tasks: this does deployment complete
- name: Task for Doing some check
  hosts: 127.0.0.1
  connection: local
  vars:
      var1: "dakdkadadakdhkahdkahkdh
      var2: "jdjaldjlaj"
      var3: "djasjdlajdlajdljadljaldjlaj"
  block: 
  - name: Doing Check for some1
    roles: 
    - role1
  when: x == "somevalue1"
- block: 
  - name: Doing check for some2
    roles: 
    - role2
  when: x == "somevalue2"
.
.
.
assuming the vars value are same

因此,我不确定是否可以使用任务部分之外的块来实现这一点是无效的

但是,您可以从tasks部分中执行角色,这将允许您在条件选择时使用块和

例如:

- name: Task for Doing some check
  hosts: 127.0.0.1
  connection: local
  vars:
      var1: "dakdkadadakdhkahdkahkdh
      var2: "jdjaldjlaj"
      var3: "djasjdlajdlajdljadljaldjlaj"
  tasks:
    - name: Doing Check for some1
      import_role:
        name: role1
      when: x == "somevalue1"
您需要决定是使用
import\u role
还是
include\u role
。请看一看以了解差异的解释