Ansible Tutorials: Ansible Variables in Playbook

  1. Inventories: You can define variables in your inventory files, either globally for all hosts or specific to particular groups or hosts.
  2. Host or Group Variables: Create separate files for host or group variables inside the host_vars and group_vars directories within your Ansible project.
  3. Playbook-level Variables: Declare variables at the top level of your playbook using the vars keyword.

Ansible Variable in Playbook with following ways:

  • Use variables in playbook directly
  • Use variables using external var files in playbook
  • Use variables using include_vars into task in playbook
  • Use variables using User Prompt in playbook
  • Use variables using outout of task using register

List of Way to declare variables in Playbook

  1. Playbook-level Variables: Declare variables at the top level of your playbook using the vars keyword.
  2. Task-level Variables: You can also define variables within specific tasks.
  3. Register Variables: You can capture the output of a task into a variable using the register keyword.
  4. Environment Variables: You can use environment variables by accessing them using Ansible’s ansible_env dictionary.
  5. Using Facts: Ansible gathers facts about managed hosts, and you can use these facts as variables in your playbooks.
  6. Prompting for User Input: You can use the vars_prompt keyword to prompt the user for input during playbook execution.

Declare variables at the top level of your playbook using the vars keyword.


- name: Example playbook
  hosts: all
  vars:
    variable_name: value
  tasks:
    # Your tasks here

Task-level Variables:


- name: Example playbook
  hosts: all
  tasks:
    - name: Task with variables
      debug:
        msg: "My variable: {{ variable_name }}"
      vars:
        variable_name: value

Register Variables:


- name: Example playbook
  hosts: all
  tasks:
    - name: Task with register
      shell: echo "Hello, world!"
      register: output
    - name: Display registered variable
      debug:
        var: output.stdout

Environment Variables:


- name: Example playbook
  hosts: all
  tasks:
    - name: Display environment variable
      debug:
        var: ansible_env.VARIABLE_NAME

Using Facts:


- name: Example playbook
  hosts: all
  tasks:
    - name: Display fact
      debug:
        var: ansible_facts['ansible_os_family']

Prompting for User Input:


- name: Example playbook
  hosts: all
  vars_prompt:
    - name: variable_name
      prompt: "Enter a value for the variable:"
  tasks:
    - name: Display input variable
      debug:
        var: variable_name

Ansible Playbook with Variable for Centos/RHEL


---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajeshkumar"
    age: "18"
    packagename: "httpd"
    servicename: "httpd"
  vars_files:
    - "vars.yaml"
  vars_prompt:
    - name: "version"
      prompt: "Which version Do you want to install?"
      private: no

  tasks:
  - name: Install Apache in centos7
    ansible.builtin.yum:
      name: "{{ packagename }}"
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: "{{ servicename }}"
      state: started
  - name: Print return information from the previous task
    ansible.builtin.debug:
      var: myname
  - name: include default step variables
    include_vars: tasks_var.yaml
  - name: Print return information from the previous task
    ansible.builtin.debug:
      msg: "My Name is {{ myname }} and My age is {{ age }}"
  - name: Print return information from the previous task
    ansible.builtin.debug:
      var: version
  - name: Ansible register variable basic example
    shell: "find *.txt"
    args:
      chdir: "/home/azureuser/rajesh"
    register: find_output
  - debug:
      var: find_output
  - debug:
      var: find_output.stdout_lines
  - debug:
      var: find_output.stdout_lines[0]

Ansible Playbook with Variable for Ubuntu

---
- name: Update web servers
  hosts: web
  vars:
    myname: "Rajeshkumar"
    age: "18"
    packagename: "apache2"
    servicename: "apache2"
  vars_files:
    - "vars.yaml"
  vars_prompt:
    - name: "version"
      prompt: "Which version Do you want to install?"
      private: no

  tasks:
  - name: Install Apache in ubuntu
    ansible.builtin.apt:
      name: "{{ packagename }}"
      state: latest
  - name: Copy index.html
    ansible.builtin.copy:
      src: index.html
      dest: /var/www/html/index.html
  - name: Starting a Apache Server
    ansible.builtin.service:
      name: "{{ servicename }}"
      state: started
  - name: Print return information from the previous task
    ansible.builtin.debug:
      var: myname
  - name: include default step variables
    include_vars: tasks_var.yaml
  - name: Print return information from the previous task
    ansible.builtin.debug:
      msg: "My Name is {{ myname }} and My age is {{ age }}"
  - name: Print return information from the previous task
    ansible.builtin.debug:
      var: version
  - name: Ansible register variable basic example
    shell: "find *.txt"
    args:
      chdir: "/root/ansible"
    register: find_output
  - debug:
      var: find_output
  - debug:
      var: find_output.stdout_lines
  - debug:
      var: find_output.stdout_lines[0]

Ansible Varialble Precedence


Rajesh Kumar
Follow me