Friday, July 21, 2017

Custom Facts - Ansible

Default custom fact directory on the target host is - /etc/ansible/facts.d
Custom facts file name extension should be ".fact"
facts file follows INI format.


# Example custom fact file:
[package]
web_package: httpd
db_package: mariadb-server

Playbook to transfer above custom fact file to target/remote host

# copy from here:
---
- name: Custom Facts
  hosts: node11
  vars:
    remote_directory: /etc/ansible/facts.d  ## default directory for Ansible facts
    facts_file: custom.fact  ## fact file must have .fact extention
  tasks:

  - name: Create remote direcotry to trasfer custorm facts file
    file:
      path: "{{ remote_directory }}"
      state: directory
      recurse: yes

  - name: copy custome fact file to remote server
    copy:
      src: "{{ facts_file }}"
      dest: "{{ remote_directory }}"
...


Playbook to use above custom facts

# Copy from here
---
- name: Use custom defined facts
  hosts: node11
  tasks:
  - name: Install web package using facts
    yum:
      name:
        - "{{ ansible_local.custom.package.web_package }}"
        - "{{ ansible_local.custom.package.db_package }}"
      state: latest
    register: result

  - name: Display the results on controller
    debug:
      var: result
...


Playbook outcome:

# ansible-playbook playbook.yml

PLAY [Use custom defined facts] ************************************************

TASK [setup] *******************************************************************
ok: [node11]

TASK [Install web package using facts] *****************************************
ok: [node11]

TASK [Display the results on controller] ***************************************
ok: [node11] => {
    "result": {
        "changed": false,
        "msg": "",
        "rc": 0,
        "results": [
            "All packages providing httpd are up to date",
            "All packages providing mariadb-server are up to date",
            ""
        ]
    }
}

PLAY RECAP *********************************************************************
node11                     : ok=3    changed=0    unreachable=0    failed=0