loading...

Redis can make Ansible only a bit faster

koh_sh profile image koh-sh Originally published at koh-sh.hatenablog.com 惻12 min read

Ansible has a function called "Gather Facts" which retrieves variables from target hosts.
By default, the facts are cached in memory and gathered every time you run Playbook.
Usually, it takes only a few seconds but I know some people get annoyed by it.

So in this post, I will try to avoid the struggles with Redis instead of memory.

Environment

Local Machine: MacOS Mojave 10.14.5
Target Host: CentOS 7.5 on Vagrant
Ansible: 2.8.1
Redis: 5.0.5

Redis

It is only a test so I am using docker.

[koh@kohs-MBP] ~/vag_test
% docker run -d -p 6379:6379 --name ansibleredis redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
f5d23c7fed46: Pull complete
a4a5c04dafc1: Pull complete
605bafc84bc9: Pull complete
f07a4e35cd96: Pull complete
17944e5e3eb7: Pull complete
6f875a8605e0: Pull complete
Digest: sha256:8888f6cd2509062a377e903e17777b4a6d59c92769f6807f034fa345da9eebcf
Status: Downloaded newer image for redis:latest
cbb0b15a703b2044b8a3d0d7b5b58f6dbd8d0b09d7b16bb5560cec57a221c39e
[koh@kohs-MBP] ~/vag_test
% docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
cbb0b15a703b        redis               "docker-entrypoint.sā€¦"   8 seconds ago       Up 7 seconds        0.0.0.0:6379->6379/tcp   ansibleredis
[koh@kohs-MBP] ~/vag_test
%

Done. Docker is awesome as you know.

Ansible

Using the official document as a reference, I added the below entries to ansible.cfg.
https://docs.ansible.com/ansible/latest/plugins/cache.html

[koh@kohs-MBP] ~/vag_test
% cat ansible.cfg
[defaults]

# Specify cache plugin
fact_caching = redis
# Prefix of key name
fact_caching_prefix = ansible_facts_
# Connection info of Redis(host:port)
fact_caching_connection = localhost:6379
# timeout until cache expire(s)
fact_caching_timeout = 60
# Policy of using cache. smart: if valid cache exists, Ansible would use.
gathering = smart
[koh@kohs-MBP] ~/vag_test
%

I set timeout short for testing. Please set it as you like.

Playbook

I prepared the below simple Playbook.
After gather_facts, prints ansible_hostname.

[koh@kohs-MBP] ~/vag_test
% cat test.yml
---
- hosts: Vag1
  gather_facts: True
  tasks:
    - name: debug
      debug:
        var: ansible_hostname
[koh@kohs-MBP] ~/vag_test
%

Test

Default(memory)

First, I commented out all fact_caching_foobar lines. Then check the time with time command.

[koh@kohs-MBP] ~/vag_test
% time ansible-playbook test.yml

PLAY [Vag1] *****************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [Vag1]

TASK [debug] ****************************************************************************************
ok: [Vag1] => {
    "ansible_hostname": "Vag1"
}

PLAY RECAP ******************************************************************************************
Vag1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ansible-playbook test.yml  1.02s user 0.30s system 67% cpu 1.955 total
[koh@kohs-MBP] ~/vag_test
%

It took about 2 seconds.
I tested multiple times but it takes about 1.8 to 2.0 seconds.

Redis

Now enabled fact_caching_foobar lines in ansible.cfg and check time.

[koh@kohs-MBP] ~/vag_test
% cat ansible.cfg
[defaults]

# Specify cache plugin
fact_caching = redis
# Prefix of key name
fact_caching_prefix = ansible_facts_
# Connection info of Redis(host:port)
fact_caching_connection = localhost:6379
# timeout until cache expire(s)
fact_caching_timeout = 60
# Policy of using cache. smart: if valid cache exists, Ansible would use.
gathering = smart
[koh@kohs-MBP] ~/vag_test
% time ansible-playbook test.yml

PLAY [Vag1] *****************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [Vag1]

TASK [debug] ****************************************************************************************
ok: [Vag1] => {
    "ansible_hostname": "Vag1"
}

PLAY RECAP ******************************************************************************************
Vag1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ansible-playbook test.yml  1.02s user 0.30s system 77% cpu 1.713 total
[koh@kohs-MBP] ~/vag_test
% time ansible-playbook test.yml

PLAY [Vag1] *****************************************************************************************

TASK [debug] ****************************************************************************************
ok: [Vag1] => {
    "ansible_hostname": "Vag1"
}

PLAY RECAP ******************************************************************************************
Vag1                       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ansible-playbook test.yml  0.69s user 0.20s system 97% cpu 0.901 total
[koh@kohs-MBP] ~/vag_test
%

The first run after enabling was pretty much the same as the default since it retrieved the facts, but the second run took only 0.9 second which was 0.8-second faster.

How Redis works

Let's check what kind of values are in Redis DB.

[koh@kohs-MBP] ~/vag_test
% docker exec -it ansibleredis redis-cli
127.0.0.1:6379> keys *
1) "ansible_facts_Vag1"
2) "ansible_cache_keys"
127.0.0.1:6379>

There are 2 keys. ansible_cache_keys and { fact_cache_prefix } { hostname }


[koh@kohs-MBP] ~/vag_test
% docker exec -it ansibleredis redis-cli
127.0.0.1:6379> ZRANGE ansible_cache_keys 0 -1
1) "Vag1"
127.0.0.1:6379>

ansible_cache_keys has a list of cached hosts.

I have only one target so the number of value should be one too.

[koh@kohs-MBP] ~/vag_test
% docker exec -it ansibleredis redis-cli
127.0.0.1:6379> get ansible_facts_Vag1
"{\n    \"_ansible_facts_gathered\": true,\n    \"ansible_all_ipv4_addresses\": [\n        \"10.0.2.15\",\n        \"192.168.33.11\"\n    ],\n    \"ansible_all_ipv6_addresses\": [\n        \"fe80::590e:8e97:c90c:cc33\",\n        \"fe80::a00:27ff:fe71:612b\"\n    ],\n    \"ansible_apparmor\": {\n        \"status\": \"disabled\"\n    },\n    \"ansible_architecture\": \"x86_64\",\n    \"ansible_bios_date\": \"12/01/2006\",\n    \"ansible_bios_version\": \"VirtualBox\",\n    \"ansible_cmdline\": {\n        \"BOOT_IMAGE\": \"/vmlinuz-3.10.0-862.11.6.el7.x86_64\",\n        \"LANG\": \"en_US.UTF-8\",\n        \"biosdevname\": \"0\",\n        \"crashkernel\": \"auto\",\n        \"net.ifnames\": \"0\",\n        \"quiet\": true,\n        \"rd.lvm.lv\": \"centos/swap\",\n        \"rhgb\": true,\n        \"ro\": true,\n        \"root\": \"/dev/mapper/centos-root\"\n    },\n    \"ansible_date_time\": {\n        \"date\": \"2019-07-17\",\n        \"day\": \"17\",\n        \"epoch\": \"1563371875\",\n        \"hour\": \"22\",\n        \"iso8601\": \"2019-07-17T13:57:55Z\",\n        \"iso8601_basic\": \"20190717T225755697435\",\n        \"iso8601_basic_short\": \"20190717T225755\",\n        \"iso8601_micro\": \"2019-07-17T13:57:55.697505Z\",\n        \"minute\": \"57\",\n        \"month\": \"07\",\n        \"second\": \"55\",\n        \"time\": \"22:57:55\",\n        \"tz\": \"JST\",\n        \"tz_offset\": \"+0900\",\n        \"weekday\": \"Wednesday\",\n        \"weekday_number\": \"3\",\n        \"weeknumber\": \"28\",\n        \"year\": \"2019\"\n    },\n    \"ansible_default_ipv4\": {\n        \"address\": \"10.0.2.15\",\n        \"alias\": \"eth0\",\n        \"broadcast\": \"10.0.2.255\",\n        \"gateway\": \"10.0.2.2\",\n        \"interface\": \"eth0\",\n        \"macaddress\": \"08:00:27:8b:c9:3f\",\n        \"mtu\": 1500,\n        \"netmask\": \"255.255.255.0\",\n        \"network\": \"10.0.2.0\",\n        \"type\": \"ether\"\n    },\n    \"ansible_default_ipv6\": {},\n    \"ansible_device_links\": {\n        \"ids\": {\n            \"dm-0\": [\n                \"dm-name-centos-root\",\n                \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3rbL1yYbzzPZGdVlveHAelfn7TdiL4PPMK\"\n            ],\n            \"dm-1\": [\n                \"dm-name-centos-swap\",\n                \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3r5Se12VYk5F7OofGC3mzqUxBtHLOc6f0i\"\n            ],\n            \"dm-2\": [\n                \"dm-name-centos-home\",\n                \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3rBnDGTj2yA0ImV13Ife64zvRL20DXAcBp\"\n            ],\n            \"sda\": [\n                \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af\"\n            ],\n            \"sda1\": [\n                \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af-part1\"\n            ],\n            \"sda2\": [\n                \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af-part2\",\n                \"lvm-pv-uuid-xkveE6-q5bs-AFQm-GG2X-lWDs-nZNn-v1DuLs\"\n            ]\n        },\n        \"labels\": {},\n        \"masters\": {\n            \"sda2\": [\n                \"dm-0\",\n                \"dm-1\",\n                \"dm-2\"\n            ]\n        },\n        \"uuids\": {\n            \"dm-0\": [\n                \"214cf212-d7f8-41fe-89a4-6b5e1f1d469c\"\n            ],\n            \"dm-1\": [\n                \"0f5a6474-6d09-4220-8eb4-f97e79b41ea0\"\n            ],\n            \"dm-2\": [\n                \"0fb2cf77-ad36-4728-a3f5-b53dc134e3fd\"\n            ],\n            \"sda1\": [\n                \"ec9d8bfa-8da0-43ce-b469-f0178aa904b5\"\n            ]\n        }\n    },\n    \"ansible_devices\": {\n        \"dm-0\": {\n            \"holders\": [],\n            \"host\": \"\",\n            \"links\": {\n                \"ids\": [\n                    \"dm-name-centos-root\",\n                    \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3rbL1yYbzzPZGdVlveHAelfn7TdiL4PPMK\"\n                ],\n                \"labels\": [],\n                \"masters\": [],\n                \"uuids\": [\n                    \"214cf212-d7f8-41fe-89a4-6b5e1f1d469c\"\n                ]\n            },\n            \"model\": null,\n            \"partitions\": {},\n            \"removable\": \"0\",\n            \"rotational\": \"1\",\n            \"sas_address\": null,\n            \"sas_device_handle\": null,\n            \"scheduler_mode\": \"\",\n            \"sectors\": \"85950464\",\n            \"sectorsize\": \"512\",\n            \"size\": \"40.98 GB\",\n            \"support_discard\": \"0\",\n            \"vendor\": null,\n            \"virtual\": 1\n        },\n        \"dm-1\": {\n            \"holders\": [],\n            \"host\": \"\",\n            \"links\": {\n                \"ids\": [\n                    \"dm-name-centos-swap\",\n                    \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3r5Se12VYk5F7OofGC3mzqUxBtHLOc6f0i\"\n                ],\n                \"labels\": [],\n                \"masters\": [],\n                \"uuids\": [\n                    \"0f5a6474-6d09-4220-8eb4-f97e79b41ea0\"\n                ]\n            },\n            \"model\": null,\n            \"partitions\": {},\n            \"removable\": \"0\",\n            \"rotational\": \"1\",\n            \"sas_address\": null,\n            \"sas_device_handle\": null,\n            \"scheduler_mode\": \"\",\n            \"sectors\": \"4194304\",\n            \"sectorsize\": \"512\",\n            \"size\": \"2.00 GB\",\n            \"support_discard\": \"0\",\n            \"vendor\": null,\n            \"virtual\": 1\n        },\n        \"dm-2\": {\n            \"holders\": [],\n            \"host\": \"\",\n            \"links\": {\n                \"ids\": [\n                    \"dm-name-centos-home\",\n                    \"dm-uuid-LVM-cXud4zK75fureDdfCQfo5enloeKDIc3rBnDGTj2yA0ImV13Ife64zvRL20DXAcBp\"\n                ],\n                \"labels\": [],\n                \"masters\": [],\n                \"uuids\": [\n                    \"0fb2cf77-ad36-4728-a3f5-b53dc134e3fd\"\n                ]\n            },\n            \"model\": null,\n            \"partitions\": {},\n            \"removable\": \"0\",\n            \"rotational\": \"1\",\n            \"sas_address\": null,\n            \"sas_device_handle\": null,\n            \"scheduler_mode\": \"\",\n            \"sectors\": \"41959424\",\n            \"sectorsize\": \"512\",\n            \"size\": \"20.01 GB\",\n            \"support_discard\": \"0\",\n            \"vendor\": null,\n            \"virtual\": 1\n        },\n        \"sda\": {\n            \"holders\": [],\n            \"host\": \"\",\n            \"links\": {\n                \"ids\": [\n                    \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af\"\n                ],\n                \"labels\": [],\n                \"masters\": [],\n                \"uuids\": []\n            },\n            \"model\": \"VBOX HARDDISK\",\n            \"partitions\": {\n                \"sda1\": {\n                    \"holders\": [],\n                    \"links\": {\n                        \"ids\": [\n                            \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af-part1\"\n                        ],\n                        \"labels\": [],\n                        \"masters\": [],\n                        \"uuids\": [\n                            \"ec9d8bfa-8da0-43ce-b469-f0178aa904b5\"\n                        ]\n                    },\n                    \"sectors\": \"2097152\",\n                    \"sectorsize\": 512,\n                    \"size\": \"1.00 GB\",\n                    \"start\": \"2048\",\n                    \"uuid\": \"ec9d8bfa-8da0-43ce-b469-f0178aa904b5\"\n                },\n                \"sda2\": {\n                    \"holders\": [\n                        \"centos-root\",\n                        \"centos-swap\",\n                        \"centos-home\"\n                    ],\n                    \"links\": {\n                        \"ids\": [\n                            \"ata-VBOX_HARDDISK_VB1c9995b6-54c424af-part2\",\n                            \"lvm-pv-uuid-xkveE6-q5bs-AFQm-GG2X-lWDs-nZNn-v1DuLs\"\n                        ],\n                        \"labels\": [],\n                        \"masters\": [\n                            \"dm-0\",\n                            \"dm-1\",\n                            \"dm-2\"\n                        ],\n                        \"uuids\": []\n                    },\n                    \"sectors\": \"132118528\",\n                    \"sectorsize\": 512,\n                    \"size\": \"63.00 GB\",\n                    \"start\": \"2099200\",\n                    \"uuid\": null\n                }\n            },\n            \"removable\": \"0\",\n            \"rotational\": \"1\",\n            \"sas_address\": null,\n            \"sas_device_handle\": null,\n            \"scheduler_mode\": \"deadline\",\n            \"sectors\": \"134217728\",\n            \"sectorsize\": \"512\",\n            \"size\": \"64.00 GB\",\n            \"support_discard\": \"0\",\n            \"vendor\": \"ATA\",\n            \"virtual\": 1\n        }\n    },\n    \"ansible_distribution\": \"CentOS\",\n    \"ansible_distribution_file_parsed\": true,\n    \"ansible_distribution_file_path\": \"/etc/redhat-release\",\n    \"ansible_distribution_file_variety\": \"RedHat\",\n    \"ansible_distribution_major_version\": \"7\",\n    \"ansible_distribution_release\": \"Core\",\n    \"ansible_distribution_version\": \"7\",\n    \"ansible_dns\": {},\n    \"ansible_domain\": \"\",\n    \"ansible_effective_group_id\": 1000,\n    \"ansible_effective_user_id\": 1000,\n    \"ansible_env\": {\n        \"HOME\": \"/home/vagrant\",\n        \"LANG\": \"C\",\n        \"LC_ALL\": \"C\",\n        \"LC_CTYPE\": \"UTF-8\",\n        \"LC_MESSAGES\": \"C\",\n        \"LOGNAME\": \"vagrant\",\n        \"MAIL\": \"/var/mail/vagrant\",\n        \"PATH\": \"/usr/local/bin:/usr/bin\",\n        \"PWD\": \"/home/vagrant\",\n        \"SELINUX_LEVEL_REQUESTED\": \"\",\n        \"SELINUX_ROLE_REQUESTED\": \"\",\n        \"SELINUX_USE_CURRENT_RANGE\": \"\",\n        \"SHELL\": \"/usr/bin/zsh\",\n        \"SHLVL\": \"1\",\n        \"SSH_CLIENT\": \"192.168.33.1 57299 22\",\n        \"SSH_CONNECTION\": \"192.168.33.1 57299 192.168.33.11 22\",\n        \"SSH_TTY\": \"/dev/pts/0\",\n        \"TERM\": \"xterm-256color\",\n        \"USER\": \"vagrant\",\n        \"XDG_RUNTIME_DIR\": \"/run/user/1000\",\n        \"XDG_SESSION_ID\": \"17\",\n        \"_\": \"/usr/bin/python\"\n    },\n    \"ansible_eth0\": {\n        \"active\": true,\n        \"device\": \"eth0\",\n        \"features\": {\n            \"busy_poll\": \"off [fixed]\",\n            \"fcoe_mtu\": \"off [fixed]\",\n            \"generic_receive_offload\": \"on\",\n            \"generic_segmentation_offload\": \"on\",\n            \"highdma\": \"off [fixed]\",\n            \"hw_tc_offload\": \"off [fixed]\",\n            \"l2_fwd_offload\": \"off [fixed]\",\n            \"large_receive_offload\": \"off [fixed]\",\n            \"loopback\": \"off [fixed]\",\n            \"netns_local\": \"off [fixed]\",\n            \"ntuple_filters\": \"off [fixed]\",\n            \"receive_hashing\": \"off [fixed]\",\n            \"rx_all\": \"off\",\n            \"rx_checksumming\": \"off\",\n            \"rx_fcs\": \"off\",\n            \"rx_udp_tunnel_port_offload\": \"off [fixed]\",\n            \"rx_vlan_filter\": \"on [fixed]\",\n            \"rx_vlan_offload\": \"on\",\n            \"rx_vlan_stag_filter\": \"off [fixed]\",\n            \"rx_vlan_stag_hw_parse\": \"off [fixed]\",\n            \"scatter_gather\": \"on\",\n            \"tcp_segmentation_offload\": \"on\",\n            \"tx_checksum_fcoe_crc\": \"off [fixed]\",\n            \"tx_checksum_ip_generic\": \"on\",\n            \"tx_checksum_ipv4\": \"off [fixed]\",\n            \"tx_checksum_ipv6\": \"off [fixed]\",\n            \"tx_checksum_sctp\": \"off [fixed]\",\n            \"tx_checksumming\": \"on\",\n            \"tx_fcoe_segmentation\": \"off [fixed]\",\n            \"tx_gre_csum_segmentation\": \"off [fixed]\",\n            \"tx_gre_segmentation\": \"off [fixed]\",\n            \"tx_gso_partial\": \"off [fixed]\",\n            \"tx_gso_robust\": \"off [fixed]\",\n            \"tx_ipip_segmentation\": \"off [fixed]\",\n            \"tx_lockless\": \"off [fixed]\",\n            \"tx_nocache_copy\": \"off\",\n            \"tx_scatter_gather\": \"on\",\n            \"tx_scatter_gather_fraglist\": \"off [fixed]\",\n            \"tx_sctp_segmentation\": \"off [fixed]\",\n            \"tx_sit_segmentation\": \"off [fixed]\",\n            \"tx_tcp6_segmentation\": \"off [fixed]\",\n            \"tx_tcp_ecn_segmentation\": \"off [fixed]\",\n            \"tx_tcp_mangleid_segmentation\": \"off\",\n            \"tx_tcp_segmentation\": \"on\",\n            \"tx_udp_tnl_csum_segmentation\": \"off [fixed]\",\n            \"tx_udp_tnl_segmentation\": \"off [fixed]\",\n            \"tx_vlan_offload\": \"on [fixed]\",\n            \"tx_vlan_stag_hw_insert\": \"off [fixed]\",\n            \"udp_fragmentation_offload\": \"off [fixed]\",\n            \"vlan_challenged\": \"off [fixed]\"\n        },\n        \"hw_timestamp_filters\": [],\n        \"ipv4\": {\n            \"address\": \"10.0.2.15\",\n            \"broadcast\": \"10.0.2.255\",\n            \"netmask\": \"255.255.255.0\",\n            \"network\": \"10.0.2.0\"\n        },\n        \"ipv6\": [\n            {\n                \"address\": \"fe80::590e:8e97:c90c:cc33\",\n                \"prefix\": \"64\",\n                \"scope\": \"link\"\n            }\n        ],\n        \"macaddress\": \"08:00:27:8b:c9:3f\",\n        \"module\": \"e1000\",\n        \"mtu\": 1500,\n        \"pciid\": \"0000:00:03.0\",\n        \"promisc\": false,\n        \"speed\": 1000,\n        \"timestamping\": [\n            \"tx_software\",\n            \"rx_software\",\n            \"software\"\n        ],\n        \"type\": \"ether\"\n    },\n    \"ansible_eth1\": {\n        \"active\": true,\n        \"device\": \"eth1\",\n        \"features\": {\n            \"busy_poll\": \"off [fixed]\",\n            \"fcoe_mtu\": \"off [fixed]\",\n            \"generic_receive_offload\": \"on\",\n            \"generic_segmentation_offload\": \"on\",\n            \"highdma\": \"off [fixed]\",\n            \"hw_tc_offload\": \"off [fixed]\",\n            \"l2_fwd_offload\": \"off [fixed]\",\n            \"large_receive_offload\": \"off [fixed]\",\n            \"loopback\": \"off [fixed]\",\n            \"netns_local\": \"off [fixed]\",\n            \"ntuple_filters\": \"off [fixed]\",\n            \"receive_hashing\": \"off [fixed]\",\n            \"rx_all\": \"off\",\n            \"rx_checksumming\": \"off\",\n            \"rx_fcs\": \"off\",\n            \"rx_udp_tunnel_port_offload\": \"off [fixed]\",\n            \"rx_vlan_filter\": \"on [fixed]\",\n            \"rx_vlan_offload\": \"on\",\n            \"rx_vlan_stag_filter\": \"off [fixed]\",\n            \"rx_vlan_stag_hw_parse\": \"off [fixed]\",\n            \"scatter_gather\": \"on\",\n            \"tcp_segmentation_offload\": \"on\",\n            \"tx_checksum_fcoe_crc\": \"off [fixed]\",\n            \"tx_checksum_ip_generic\": \"on\",\n            \"tx_checksum_ipv4\": \"off [fixed]\",\n            \"tx_checksum_ipv6\": \"off [fixed]\",\n            \"tx_checksum_sctp\": \"off [fixed]\",\n            \"tx_checksumming\": \"on\",\n            \"tx_fcoe_segmentation\": \"off [fixed]\",\n            \"tx_gre_csum_segmentation\": \"off [fixed]\",\n            \"tx_gre_segmentation\": \"off [fixed]\",\n            \"tx_gso_partial\": \"off [fixed]\",\n            \"tx_gso_robust\": \"off [fixed]\",\n            \"tx_ipip_segmentation\": \"off [fixed]\",\n            \"tx_lockless\": \"off [fixed]\",\n            \"tx_nocache_copy\": \"off\",\n            \"tx_scatter_gather\": \"on\",\n            \"tx_scatter_gather_fraglist\": \"off [fixed]\",\n            \"tx_sctp_segmentation\": \"off [fixed]\",\n            \"tx_sit_segmentation\": \"off [fixed]\",\n            \"tx_tcp6_segmentation\": \"off [fixed]\",\n            \"tx_tcp_ecn_segmentation\": \"off [fixed]\",\n            \"tx_tcp_mangleid_segmentation\": \"off\",\n            \"tx_tcp_segmentation\": \"on\",\n            \"tx_udp_tnl_csum_segmentation\": \"off [fixed]\",\n            \"tx_udp_tnl_segmentation\": \"off [fixed]\",\n            \"tx_vlan_offload\": \"on [fixed]\",\n            \"tx_vlan_stag_hw_insert\": \"off [fixed]\",\n            \"udp_fragmentation_offload\": \"off [fixed]\",\n            \"vlan_challenged\": \"off [fixed]\"\n        },\n        \"hw_timestamp_filters\": [],\n        \"ipv4\": {\n            \"address\": \"192.168.33.11\",\n            \"broadcast\": \"192.168.33.255\",\n            \"netmask\": \"255.255.255.0\",\n            \"network\": \"192.168.33.0\"\n        },\n        \"ipv6\": [\n            {\n                \"address\": \"fe80::a00:27ff:fe71:612b\",\n                \"prefix\": \"64\",\n                \"scope\": \"link\"\n            }\n        ],\n        \"macaddress\": \"08:00:27:71:61:2b\",\n        \"module\": \"e1000\",\n        \"mtu\": 1500,\n        \"pciid\": \"0000:00:08.0\",\n        \"promisc\": false,\n        \"speed\": 1000,\n        \"timestamping\": [\n            \"tx_software\",\n            \"rx_software\",\n            \"software\"\n        ],\n        \"type\": \"ether\"\n    },\n    \"ansible_fibre_channel_wwn\": [],\n    \"ansible_fips\": false,\n    \"ansible_form_factor\": \"Other\",\n    \"ansible_fqdn\": \"Vag1\",\n    \"ansible_hostname\": \"Vag1\",\n    \"ansible_hostnqn\": \"\",\n    \"ansible_interfaces\": [\n        \"lo\",\n        \"eth1\",\n        \"eth0\"\n    ],\n    \"ansible_is_chroot\": true,\n    \"ansible_iscsi_iqn\": \"\",\n    \"ansible_kernel\": \"3.10.0-862.11.6.el7.x86_64\",\n    \"ansible_lo\": {\n        \"active\": true,\n        \"device\": \"lo\",\n        \"features\": {\n            \"busy_poll\": \"off [fixed]\",\n            \"fcoe_mtu\": \"off [fixed]\",\n            \"generic_receive_offload\": \"on\",\n            \"generic_segmentation_offload\": \"on\",\n            \"highdma\": \"on [fixed]\",\n            \"hw_tc_offload\": \"off [fixed]\",\n            \"l2_fwd_offload\": \"off [fixed]\",\n            \"large_receive_offload\": \"off [fixed]\",\n            \"loopback\": \"on [fixed]\",\n            \"netns_local\": \"on [fixed]\",\n            \"ntuple_filters\": \"off [fixed]\",\n            \"receive_hashing\": \"off [fixed]\",\n            \"rx_all\": \"off [fixed]\",\n            \"rx_checksumming\": \"on [fixed]\",\n            \"rx_fcs\": \"off [fixed]\",\n            \"rx_udp_tunnel_port_offload\": \"off [fixed]\",\n            \"rx_vlan_filter\": \"off [fixed]\",\n            \"rx_vlan_offload\": \"off [fixed]\",\n            \"rx_vlan_stag_filter\": \"off [fixed]\",\n            \"rx_vlan_stag_hw_parse\": \"off [fixed]\",\n            \"scatter_gather\": \"on\",\n            \"tcp_segmentation_offload\": \"on\",\n            \"tx_checksum_fcoe_crc\": \"off [fixed]\",\n            \"tx_checksum_ip_generic\": \"on [fixed]\",\n            \"tx_checksum_ipv4\": \"off [fixed]\",\n            \"tx_checksum_ipv6\": \"off [fixed]\",\n            \"tx_checksum_sctp\": \"on [fixed]\",\n            \"tx_checksumming\": \"on\",\n            \"tx_fcoe_segmentation\": \"off [fixed]\",\n            \"tx_gre_csum_segmentation\": \"off [fixed]\",\n            \"tx_gre_segmentation\": \"off [fixed]\",\n            \"tx_gso_partial\": \"off [fixed]\",\n            \"tx_gso_robust\": \"off [fixed]\",\n            \"tx_ipip_segmentation\": \"off [fixed]\",\n            \"tx_lockless\": \"on [fixed]\",\n            \"tx_nocache_copy\": \"off [fixed]\",\n            \"tx_scatter_gather\": \"on [fixed]\",\n            \"tx_scatter_gather_fraglist\": \"on [fixed]\",\n            \"tx_sctp_segmentation\": \"on\",\n            \"tx_sit_segmentation\": \"off [fixed]\",\n            \"tx_tcp6_segmentation\": \"on\",\n            \"tx_tcp_ecn_segmentation\": \"on\",\n            \"tx_tcp_mangleid_segmentation\": \"on\",\n            \"tx_tcp_segmentation\": \"on\",\n            \"tx_udp_tnl_csum_segmentation\": \"off [fixed]\",\n            \"tx_udp_tnl_segmentation\": \"off [fixed]\",\n            \"tx_vlan_offload\": \"off [fixed]\",\n            \"tx_vlan_stag_hw_insert\": \"off [fixed]\",\n            \"udp_fragmentation_offload\": \"on\",\n            \"vlan_challenged\": \"on [fixed]\"\n        },\n        \"hw_timestamp_filters\": [],\n        \"ipv4\": {\n            \"address\": \"127.0.0.1\",\n            \"broadcast\": \"host\",\n            \"netmask\": \"255.0.0.0\",\n            \"network\": \"127.0.0.0\"\n        },\n        \"ipv6\": [\n            {\n                \"address\": \"::1\",\n                \"prefix\": \"128\",\n                \"scope\": \"host\"\n            }\n        ],\n        \"mtu\": 65536,\n        \"promisc\": false,\n        \"timestamping\": [\n            \"rx_software\",\n            \"software\"\n        ],\n        \"type\": \"loopback\"\n    },\n    \"ansible_local\": {},\n    \"ansible_lsb\": {},\n    \"ansible_machine\": \"x86_64\",\n    \"ansible_machine_id\": \"b8ae4e7c6e42490b801633d8d903c9a0\",\n    \"ansible_memfree_mb\": 769,\n    \"ansible_memory_mb\": {\n        \"nocache\": {\n            \"free\": 874,\n            \"used\": 117\n        },\n        \"real\": {\n            \"free\": 769,\n            \"total\": 991,\n            \"used\": 222\n        },\n        \"swap\": {\n            \"cached\": 0,\n            \"free\": 2047,\n            \"total\": 2047,\n            \"used\": 0\n        }\n    },\n    \"ansible_memtotal_mb\": 991,\n    \"ansible_mounts\": [\n        {\n            \"block_available\": 226495,\n            \"block_size\": 4096,\n            \"block_total\": 259584,\n            \"block_used\": 33089,\n            \"device\": \"/dev/sda1\",\n            \"fstype\": \"xfs\",\n            \"inode_available\": 523962,\n            \"inode_total\": 524288,\n            \"inode_used\": 326,\n            \"mount\": \"/boot\",\n            \"options\": \"rw,seclabel,relatime,attr2,inode64,noquota\",\n            \"size_available\": 927723520,\n            \"size_total\": 1063256064,\n            \"uuid\": \"ec9d8bfa-8da0-43ce-b469-f0178aa904b5\"\n        },\n        {\n            \"block_available\": 10398487,\n            \"block_size\": 4096,\n            \"block_total\": 10738562,\n            \"block_used\": 340075,\n            \"device\": \"/dev/mapper/centos-root\",\n            \"fstype\": \"xfs\",\n            \"inode_available\": 21453369,\n            \"inode_total\": 21487616,\n            \"inode_used\": 34247,\n            \"mount\": \"/\",\n            \"options\": \"rw,seclabel,relatime,attr2,inode64,noquota\",\n            \"size_available\": 42592202752,\n            \"size_total\": 43985149952,\n            \"uuid\": \"214cf212-d7f8-41fe-89a4-6b5e1f1d469c\"\n        },\n        {\n            \"block_available\": 5233400,\n            \"block_size\": 4096,\n            \"block_total\": 5242367,\n            \"block_used\": 8967,\n            \"device\": \"/dev/mapper/centos-home\",\n            \"fstype\": \"xfs\",\n            \"inode_available\": 10489816,\n            \"inode_total\": 10489856,\n            \"inode_used\": 40,\n            \"mount\": \"/home\",\n            \"options\": \"rw,seclabel,relatime,attr2,inode64,noquota\",\n            \"size_available\": 21436006400,\n            \"size_total\": 21472735232,\n            \"uuid\": \"0fb2cf77-ad36-4728-a3f5-b53dc134e3fd\"\n        }\n    ],\n    \"ansible_nodename\": \"Vag1\",\n    \"ansible_os_family\": \"RedHat\",\n    \"ansible_pkg_mgr\": \"yum\",\n    \"ansible_proc_cmdline\": {\n        \"BOOT_IMAGE\": \"/vmlinuz-3.10.0-862.11.6.el7.x86_64\",\n        \"LANG\": \"en_US.UTF-8\",\n        \"biosdevname\": \"0\",\n        \"crashkernel\": \"auto\",\n        \"net.ifnames\": \"0\",\n        \"quiet\": true,\n        \"rd.lvm.lv\": [\n            \"centos/root\",\n            \"centos/swap\"\n        ],\n        \"rhgb\": true,\n        \"ro\": true,\n        \"root\": \"/dev/mapper/centos-root\"\n    },\n    \"ansible_processor\": [\n        \"0\",\n        \"GenuineIntel\",\n        \"Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz\"\n    ],\n    \"ansible_processor_cores\": 1,\n    \"ansible_processor_count\": 1,\n    \"ansible_processor_threads_per_core\": 1,\n    \"ansible_processor_vcpus\": 1,\n    \"ansible_product_name\": \"VirtualBox\",\n    \"ansible_product_serial\": \"NA\",\n    \"ansible_product_uuid\": \"NA\",\n    \"ansible_product_version\": \"1.2\",\n    \"ansible_python\": {\n        \"executable\": \"/usr/bin/python\",\n        \"has_sslcontext\": true,\n        \"type\": \"CPython\",\n        \"version\": {\n            \"major\": 2,\n            \"micro\": 5,\n            \"minor\": 7,\n            \"releaselevel\": \"final\",\n            \"serial\": 0\n        },\n        \"version_info\": [\n            2,\n            7,\n            5,\n            \"final\",\n            0\n        ]\n    },\n    \"ansible_python_version\": \"2.7.5\",\n    \"ansible_real_group_id\": 1000,\n    \"ansible_real_user_id\": 1000,\n    \"ansible_selinux\": {\n        \"config_mode\": \"enforcing\",\n        \"mode\": \"enforcing\",\n        \"policyvers\": 31,\n        \"status\": \"enabled\",\n        \"type\": \"targeted\"\n    },\n    \"ansible_selinux_python_present\": true,\n    \"ansible_service_mgr\": \"systemd\",\n    \"ansible_ssh_host_key_ecdsa_public\": \"AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA5XlGiLVt6/NnCPwaH89VKPo+cvKjyzwnje1z9LkaiFXRNhWTsxYsMYPjx5cf5HQbJs4VCKIaPxK20QFYSabLc=\",\n    \"ansible_ssh_host_key_ed25519_public\": \"AAAAC3NzaC1lZDI1NTE5AAAAIGhrt2KMmJ0a2QdNNsFElTnHSdhufURJmAIo39+5R1hP\",\n    \"ansible_ssh_host_key_rsa_public\": \"AAAAB3NzaC1yc2EAAAADAQABAAABAQC99JJpb04/QLprQKr1Duz7dBfAHvbwuaouvVkMPKVoxQ7u2xUiTqKMWwckPBw3GfRC+soM6KXj+WnaIFsIFmYBYOwN1dl4ldpJxvp/+rz4VUvOsjqiAK6Ju7Hi2zlvN/Cz8n8NMC7+BT295s1jGYJU7SGVVJ/uLDVoiDa/dcptk17V4bgN8Wqe3hiEDbtbRMgZdwQ01o8b1uM6GQAAbz1S6kwnZ3fOXHU7Z29lZu2g5/xIYX48yhV8YnqwWmI2+i0zd06b+HoXwQH2+OVlZEMfv2Gc+xp4E0Pqu6VDyOPJGIkRuV0aBX6qT/6FDBUWvcGXs7gVdUL2wdvi5V8uf/rV\",\n    \"ansible_swapfree_mb\": 2047,\n    \"ansible_swaptotal_mb\": 2047,\n    \"ansible_system\": \"Linux\",\n    \"ansible_system_capabilities\": [\n        \"\"\n    ],\n    \"ansible_system_capabilities_enforced\": \"True\",\n    \"ansible_system_vendor\": \"innotek GmbH\",\n    \"ansible_uptime_seconds\": 3839,\n    \"ansible_user_dir\": \"/home/vagrant\",\n    \"ansible_user_gecos\": \"vagrant\",\n    \"ansible_user_gid\": 1000,\n    \"ansible_user_id\": \"vagrant\",\n    \"ansible_user_shell\": \"/usr/bin/zsh\",\n    \"ansible_user_uid\": 1000,\n    \"ansible_userspace_architecture\": \"x86_64\",\n    \"ansible_userspace_bits\": \"64\",\n    \"ansible_virtualization_role\": \"guest\",\n    \"ansible_virtualization_type\": \"virtualbox\",\n    \"discovered_interpreter_python\": \"/usr/bin/python\",\n    \"gather_subset\": [\n        \"all\"\n    ],\n    \"module_setup\": true\n}"
127.0.0.1:6379>

As you see that is how facts are registered to Redis.

Right after running Playbook, I checked TTL of the key and the value was the same as fact_caching_timeout.

[koh@kohs-MBP] ~/vag_test
% docker exec -it ansibleredis redis-cli
127.0.0.1:6379> ttl ansible_facts_Vag1
(integer) 57
127.0.0.1:6379>

Conclusion

Now we know how to make Ansible only a bit faster.
It is only a few seconds but might be useful when you have to run Playbook many times.
Also please be noted that if Redis is down, Ansible cannot be run.
So if you are interested in using this for production CI/CD, you have to ensure the availability of Redis.

Posted on by:

koh_sh profile

koh-sh

@koh_sh

Sys Admin who loves automation

Discussion

pic
Editor guide