include global variables for all Roles
sample playbook
splunk/
setup_splunk_playbook.yaml
roles/base
/tasks/main.yaml
/tasks/install.yaml
search_head
/tasks/configure.yaml
indexer
/tasks/configure.yaml
some_other_role
/tasks/some_task.yaml
hosts
config.yaml
Place your vars into config.yaml
cat splunk/config.yaml
---
# global Splunk variables
splunk_version: 7.0.0
in your playbook, include the Roles
cat setup_splunk_playbook.yaml
- hosts: "search_heads"
become_user: root
become: true
gather_facts: true
roles:
- base
- search_head
in your Role, include the Global Vars inside a Task
cat roles/base/tasks/main.yaml
---
# install Splunk Base
- name: include vars
include_vars: "{{ playbook_dir }}/config.yaml"
- include: install.yaml
vars are accessible in tasks now,
cat roles/base/tasks/install.yaml
- name: echo version
debug: splunk version is {{ splunk_version }}
Loop through a Dict variable inside a playbook
cluster:
members:
splunk01: 10.123.1.0
splunk02: 10.123.1.1
splunk03: 10.123.1.2
in the playbook,
- debug: msg="{{ cluster.members.values() | map('regex_replace', '(.*)', 'https://\\1:8089') | join(',') }}"
>> https://10.123,1.0:8089, https://10.123.1.1:8089, etc etc
Use Inventory file variables inside a playbook
cat hosts
[apache]
nycweb01
playbook
debug: msg="IP: {{ hostvars[groups['apache'][0]]['ansible_default_ipv4']['address'] }}"
debug: msg="Hostname: {{ hostvars[groups['apache'][0]]['inventory_hostname'] }}"
register a List/Array to be used for later,
- name: parse all hostnames in group WebServer and get their IPs, place them in a list
command: echo {{ hostvars[item]['ansible_ssh_host'] }}"
with_items: "{{ groups['webserver'] }}"
register: ip_list
- name: show the IPs
debug: msg={{ ip_list.results | map(attribute='item') | list }}"
export an Environment variable
- name: yum install
yum: name=somepkg state=present
environment:
SOME_VAR: abc