Today let’s look at how you can generate host overview from ansible fact gathering output using Ansible-cmdb. This tool takes the output of Ansible’s fact-gathering as its input and converts it into a static HTML overview page with all gathered system configuration information.
Ansible-cmd supports multiple types of output (HTML, csv, sql, etc) and extending information gathered by Ansible with custom data. It shows the groups, host variables, custom variable, and machine-local facts for each host.
Features of Ansible-cmdb
Below are the features of Ansible-cmdb as outlined on the Project Github page.
- Support for multiple output formats/templates:
- Fancy HTML using the option (
--template html_fancy
) - Fancy HTML Split (
--template html_fancy_split
), with each host’s details in a separate file (for a large number of hosts). - CSV (
--template csv
), the trustworthy and flexible comma-separated format. - JSON (
--template json
), a dump of all facts in JSON format. - Markdown (
--template markdown
), useful for copy-pasting into Wiki’s and such. - Markdown Split (‘–template markdown_split’), with each host’s details in a separate file (for a large number of hosts).
- SQL (
--template sql
), for importing host facts into a (My)SQL database. - Plain Text table (
--template txt_table
), for the console gurus. - and of course, any custom template you’re willing to make.
- Fancy HTML using the option (
- Host overview and detailed host information.
- Host and group variables.
- Gathered host facts and manual custom facts.
- Adding and extending facts of existing hosts and manually adding entirely new hosts.
How to Install Ansible-cmdb
You can either install from Ansible-cmdb from source release package or using Python pip package manager
Method 1: Install Ansible-cmdb using pip
You need to have pip
installed on your server before you can install Ansible-cmdb using this method.
Install pip on CentOS
Run the commands below on your terminal of choice to install pip
sudo yum -y install epel-release
# CentOS 7
sudo yum install python-pip
# CentOS 8
sudo yum install python3-pip
Install pip on Fedora
Add epel repository and install pip
sudo dnf install python3-pip
Install pip on Ubuntu
Use the command
sudo apt install python3-pip
Install pip on Arch Linux / Manjaro
Use pacman
package manager
sudo pacman -S python-pip
Once pip is installed, download and install ansible-cmdb
# Python 3
sudo pip3 install ansible-cmdb
# Python 2
sudo pip install ansible-cmdb
You can also upgrade Ansible-cmdb through Pip:
# Python 3
sudo pip3 install --upgrade ansible-cmdb
# Python 2
sudo pip install --upgrade ansible-cmdb
For macOS users, you can use brew
brew install ansible-cmdb
Method 2: Install Ansible-cmdb from source
Clone source code from Github
git clone https://github.com/fboender/ansible-cmdb.git
Change to ansible-cmdb
directory and run make install
cd ansible-cmdb
sudo make install
Sample output
umask 0022 && mkdir -p /usr/local/lib/ansible-cmdb
umask 0022 && mkdir -p /usr/local/man/man1
umask 0022 && cp -a src/* /usr/local/lib/ansible-cmdb
umask 0022 && cp -r lib/* /usr/local/lib/ansible-cmdb
umask 0022 && cp LICENSE /usr/local/lib/ansible-cmdb
umask 0022 && cp README.md /usr/local/lib/ansible-cmdb
umask 0022 && gzip -9 -c contrib/ansible-cmdb.man.1 > /usr/local/man/man1/ansible-cmdb.man.1.gz
umask 0022 && ln -s /usr/local/lib/ansible-cmdb/ansible-cmdb /usr/local/bin/ansible-cmdb
How to use Ansible-cmdb
To view help usage for ansible-cmdb
command, pass --help
option
# ansible-cmdb --help
Usage: ansible-cmdb.py [option] <dir> > output.html
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-t TEMPLATE, --template=TEMPLATE
Template to use. Default is 'html_fancy'
-i INVENTORY, --inventory=INVENTORY
Inventory to read extra info from
-f, --fact-cache <dir> contains fact-cache files
-p PARAMS, --params=PARAMS
Params to send to template
-d, --debug Show debug output
-q, --quiet Don't report warnings
-c COLUMNS, --columns=COLUMNS
Show only given columns
--exclude-cols=EXCLUDE_COLUMNS
Exclude cols from output
Start by generating Ansible output for your hosts:
mkdir cmdb-output
ansible -m setup --tree cmdb-output/ all
You can as well specify a user to run as and password
ansible -m setup --user=root --tree cmdb-output/ all --ask-pass
Or specific host group
ansible -m setup --user=root --tree cmdb-output/ db-servers --ask-pass
Next, call ansible-cmdb on the resulting cmdb-output/
directory to generate the CMDB overview page:
ansible-cmdb cmdb-output/ > ansible-cmdb-overview.html
By default, the html_fancy template is used, which generates output containing an overview of all your hosts, with a section of detailed information for each host.
To explicitly specify the use of a fancy template for output generation, use
ansible-cmdb --template html_fancy cmdb-output/ > ansible-cmdb-overview.html
You can now open overview.html in your browser to view the results.
To use a custom inventory file, specify its path with -i
$ ansible-cmdb -i ./hosts cmdb-output/ > overview.html
If host_vars
and group_vars
directories exist at that location, they will be included automatically.
Available templates
Ansible-cmdb currently provides the following templates out of the box:
html_fancy
: A dynamic, modern HTML page containing all hosts.html_fancy_split
: A dynamic, modern HTML page with each host’s details in a separate file.txt_table
: A quick text table summary of the available hosts with some minimal information.json
: Dumps all hosts including groups, variable, custom info in JSON format.csv
: The CSV template outputs a CSV file of your hosts.markdown
: The Markdown template generates host information in the Markdown format.sql
: The SQL template generates a .sql file that can be loaded into an SQLite or MySQL database.
Use the txt_table
template and print columns
$ ansible-cmdb -t txt_table --columns name,os,ip,mem,cpus cmdb-output/
Name OS IP Mem CPUs
-------------- --------------- -------------- --- ----
10.200.3.205 CentOS 7.5.1804 10.200.3.205 2g 1
10.200.3.204 CentOS 7.5.1804 10.200.3.204 2g 1
10.200.3.206 CentOS 7.5.1804 10.200.3.206 2g 1
10.200.200.250 CentOS 7.5.1804 10.200.200.250 4g 1
10.200.200.251 CentOS 7.5.1804 10.200.200.250 2g 1
Get json output
ansible-cmdb -t json cmdb-output/ > cmdb.json
For more examples, visit Ansible-cmdb documentation page.