简体   繁体   中英

Ansible 2.6: Is there a way to reference the playbook's name in a role task?

Given a playbook like this:

- name: "Tasks for service XYZ"
  hosts: apiservers
  roles:
    - { role: common }

Is there a way to reference the playbook's name ("Tasks for service XYZ")? (ie a variable)


EDIT:

My intention is to be able to reference the playbook's name in a role task, ie sending a msg via slack like

- name: "Send Slack notification indicating deploy has started"
  slack:
    channel: '#project-deploy'
    token: '{{ slack_token }}'
    msg: '*Deploy started* to _{{ inventory_hostname }}_ of `{{ PLAYBOOK_NAME }}` version *{{ service_version }}*'
  delegate_to: localhost
  tags: deploy

It was added in 2.8 :

ansible_play_name
The name of the currently executed play. Added in 2.8 .

No, the special variables for Ansible are documented here , and you can see that there is no variable to return the playbook name.

As mentioned in the comments, however, you can always do this:

---
- name: "{{ task_name }}"
  hosts: localhost
  vars:
    task_name: "Tasks for service XYZ"
  tasks:
    - debug:
        msg: "{{ task_name }}"

From your circumstances, it looks like you only want this for audit/notification purposes? In that case (and assuming unixy clients), using

lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')

will give you the entire command line that ansible-playbook was called with, parameters and all, which would include the playbook name. Depending on your circumstances, that might be a useful enough tradeoff.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM