How to Create and Use Custom Facts in Ansible

Channel: Linux
Abstract: we will cover how to create and use custom facts to install samba file server and starts its service on ansible managed host. Here we are using host1

Custom facts (local facts) are the variables which are declared on ansible managed host. Custom facts are declared in ini or json file in the /etc/ansible/facts.d directory on managed host. File names of custom facts must have .fact extension.

In this article, we will cover how to create and use custom  facts to install samba file server and starts its service on ansible managed host. Here we are using host1 and host2 as a part of fileservers group in the inventory.

To demonstrate custom facts, following is my lab setup

  • —
  •   —       // Ansible Managed Host
  •   —         // Ansible Managed Hosts

Note : devops user is configured on ansible control and managed hosts with sudo rights. Inventory and ansible.cfg file is defined under /home/develops/install directory. Content of my inventory are shown below:

[[email protected] install]$ cat inventory

[[email protected] install]$

Logical steps to declare and use custom local facts are

  • Create a facts file on ansible control host with .fact extension
  • Create one play in the playbook to create a folder ‘/etc/ansible/facts.d’ and copy the facts file on managed hosts on this folder.
  • Create 2nd play in the playbook which will use these custom facts using ansible_local.<facts-filename>.<fact-name>.<variable-name> to install samba server and start its service.

Let’s dive into the actual implementation of custom or local facts.

Step 1) Create custom facts file on control node

Let’s create customfacts.fact file with the following contents

[[email protected] install]$ cat customfacts.fact
pkgname = samba
srvc = smb
[[email protected] install]$

Here localfacts is factname and pkgname & srvc are variables.

Step 2) Create a playbook with two different plays

Create customfacts-install.yaml playbook with following contents

[[email protected] install]$ vi customfacts-install.yaml
- name: Install custom facts
  hosts: fileservers
    remote_dir: /etc/ansible/facts.d
    facts_file: customfacts.fact
  - name: Create Facts Dir on Managed Hosts
      path: "{{ remote_dir }}"
      state: directory
      recurse: yes
  - name: Copy Contents to Facts file
      src: "{{ facts_file }}"
      dest: "{{ remote_dir }}"

- name: Install Samba Server with Custom Facts
  hosts: fileservers
  - name: Install SMB
      name: "{{ ansible_local.customfacts.localfacts.pkgname }}"
      state: present
  - name: Start SMB Service
      name: "{{ ansible_local.customfacts.localfacts.srvc }}"
      state: started
      enabled: yes

save and exit the file.

Step 3) Run the playbook on fileservers

We will execute the playbook on fileservers, before running it, let’s verify the connectivity from control node towards these nodes.

[[email protected] install]$ ansible fileservers -m ping

Above confirms that ping pong is working fine, so let’s run the ansible playbook using beneath command,

[[email protected] install]$ ansible-playbook customfacts-install.yaml

Above output shows that playbook has been executed successfully. Let’s verify the installation of custom facts and samba service.

Step 5) Verify Custom local facts and Samba Service

Run below ansible ad-hoc  command to verify custom facts installation,

[[email protected] install]$ ansible fileservers -m setup -a "filter=ansible_local"

Verify samba server’s service status by executing below:

[[email protected] install]$ ansible fileservers -m command -a "systemctl status smb"

Perfect, above output confirms that Samba has been installed successfully and its service is up and running.

That’s all from this article, I hope you get the basic idea about custom facts installation and its usage.

Read Also : How to Use Handlers in Ansible Playbook

Ref From: linuxtechi

Related articles