打印 Ansible 中调用者角色的角色名称

问题描述 投票:0回答:1

如何从另一个角色中打印调用者角色名称?

剧本:

- name: print calling role name
  hosts: all
  tasks:
    - import_role:
        name: role2
        tasks_from: update

role2/tasks/update.yml:

- name: role 2
  import_role:
    name: role1
    tasks_from: update
  vars:
    role_scope: "{{ role_name }}"

role1/tasks/update.yml:

- name: role 1
  debug:
    msg: "Calling role: {{ role_name }}"

电流输出

Calling role: role1

预期产出

Calling role: role2
ansible roles ansible-2.x
1个回答
0
投票

正如 special variables 页面中所指出的,有一个变量

ansible_parent_role_names
包含所有祖先角色的列表。

当通过 include_roleimport_role 操作执行当前角色时,此变量包含所有父角色的列表,以及最新的角色(换句话说,包含/导入此角色的角色)作为列表中的第一项。当出现多个包含时,此列表会将最后一个角色(换句话说,包含此角色的角色)列为列表中的第一项。也有可能特定角色在此列表中存在不止一次。

例如:当角色A包括角色B,在角色B里面,

ansible_parent_role_names
等于
['A']
。如果角色 B 然后包含角色 C,则列表变为
['B', 'A']
.

所以,解决方案是在

role1
中使用它:

- name: role 1
  debug:
    msg: "Calling role: {{ ansible_parent_role_names[0] }}"

如果你想让它工作,不管它是否被另一个角色调用,你可以这样做:

- name: role 1
  debug:
    msg: >-
      Calling role: {{ ansible_parent_role_names[0] | default(role_name) }}

这样,它会回答

Calling role: role2

当通过

role2
调用时,但是

Calling role: role1

例如直接在剧本中调用

role1
时。

© www.soinside.com 2019 - 2024. All rights reserved.