czerasz
czerasz

Reputation: 14280

How to get current role name in an ansible task

How can I get the current role name in an ansible task yaml file?

I would like to do something like this

---
# role/some-role-name/tasks/main.yml

- name: Create a directory which is called like the current role name
  action: file
          path=/tmp/"{{ role_name }}"
          mode=0755
          state=directory

The result of this task should be a directory /tmp/some-role-name on the server

Upvotes: 32

Views: 23471

Answers (4)

fnkr
fnkr

Reputation: 10075

As of Ansible 2.8 there is ansible_play_name which contains the name of the currently executed play.

Upvotes: 2

jarv
jarv

Reputation: 5596

As of Ansible 2.2:

{{role_name}}

As of Ansible 2.1:

{{role_path|basename}}

Older versions:

There is no way to do this in the current version of Ansible, here are a couple options that might work for you instead:

1) Use set_fact to set a role_name var to the name the of role as the first task in your tasks/main.yml file

- set_fact: role_name=some-role-name

2) Pass a parameter to your role that has the name

- roles:
  - role: some-role-name
    role_name: some-role-name

Upvotes: 26

krad
krad

Reputation: 1419

The simplest way is to just use the following

{{role_path|basename}}

Upvotes: 30

tersmitten
tersmitten

Reputation: 1330

See this post:

To get the role directory:

role_dir: "{{ lookup('pipe', 'pwd') | dirname }}"

To get the role name:

role_name: "{{ lookup('pipe', 'pwd') | dirname | basename }}"

Upvotes: 5

Related Questions