user63898
user63898

Reputation: 30915

How can I print all extra-vars before playbook is started

I have wired problem with running ansible

I'd like to print to log or anywhere else the extra-vars I'm executing the playbook with.

I am running the following command:

ansible-playbook /foo/main.yml --extra-vars "main_playbook=app_install  start_path=work" --extra-vars  {"db_config":{"db_multi_config":["value1","value2"]}}' 

with the following main.yml playbook

- name: start playbook
  import_playbook: "{{ playbook_dir }}/{{ main_playbook}}/{{ start_path}}.yml"

I'd like to print the values of all extra-vars passed on the command line before it gets to main.yml. Is there any way to do this?

Upvotes: 0

Views: 2050

Answers (2)

Zeitounator
Zeitounator

Reputation: 44760

You can get this information in the output running ansible in full debug mode:

Given the following test.yml playbook:

- hosts: localhost
  gather_facts: false

and running it with the command:

ansible-playbook test.yml -vvvv -e toto=bla -e '{"test1":2}'

I get the following result (see the debug lines for playbook before play starts)

ansible-playbook [core 2.11.3] 
  config file = None
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]
  jinja version = 2.11.3
  libyaml = True
No config file found; using defaults
The vault password file /home/user/bin/vault-keyring-client is a client script.
Executing vault password client script: /home/user/bin/vault-keyring-client --vault-id avaultid1
The vault password file /home/user/bin/vault-keyring-client is a client script.
Executing vault password client script: /home/user/bin/vault-keyring-client --vault-id avaultid2
The vault password file /home/user/bin/vault-keyring-client is a client script.
Executing vault password client script: /home/user/bin/vault-keyring-client --vault-id avaultid3
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading callback plugin default of type stdout, v2.0 from /usr/local/lib/python3.8/dist-packages/ansible/plugins/callback/default.py
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: test.yml **********************************************************************************************************************
Positional arguments: test.yml
verbosity: 4
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/hosts',)
extra_vars: ('toto=bla', '{"test1":2}')
forks: 5
1 plays in test.yml

PLAY [all] ******************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP ******************************************************************************************************************************


Upvotes: 1

George Shuklin
George Shuklin

Reputation: 7907

You can't separate extra vars from all other vars, because they are merged. But you can see all variables for the host. (except for setup facts, which you can browse separately with -m setup).

The trick is to print all variables from hostvars group for 'itself', ansible_host:

ansible -i inventory -e extra_vars_here -m debug -a 'msg={{hostvars[inventory_hostname]}}' all

(replace all with specific hostname if you wish).

If you are overwhelmed, you can filter it with .keys(): hostvars[inventory_hostname].keys().

Upvotes: 0

Related Questions