Maintenant que vous en savez assez sur le fichier d’inventaire et les variables de groupe et d’hôte, nous allons écrire notre premier livre de jeu.
---hosts qui désigne soit :alllocalhostconnection : network_clifacts est générée par le module ios_facts.---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:ansible-playbook gather_ios_data.ymlPLAY [GATHER INFORMATION FROM ROUTERS] ******************************************************************
TASK [GATHER ROUTER FACTS] ******************************************************************************
ok: [rtr1]
ok: [rtr4]
ok: [rtr3]
ok: [rtr2]
PLAY RECAP **********************************************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0Les données sont collectées mais n’apparaissent pas sur la sortie.
On peut activer la verbosité avec le flag -v avec l’exécution.
ansible-playbook gather_ios_data.yml -vPLAY [GATHER INFORMATION FROM ROUTERS] ***********************************************************
TASK [GATHER ROUTER FACTS] ***********************************************************************
ok: [rtr3] => {"ansible_facts": {"ansible_net_all_ipv4_addresses": ["192.168.122.180"], "ansible_net_all_ipv6_addresses": [], "ansible_net_filesystems": ["flash0:"], "ansible_net_gather_subset": ["hardware", "default", "interfaces"], "ansible_net_hostname": "rtr3", "ansible_net_image": "flash0:/vios-adventerprisek9-m", "ansible_net_interfaces": {"GigabitEthernet0/0": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4": [], "lineprotocol": "down ", "macaddress": "0c2c.013f.da00", "mediatype": "RJ45", "mtu": 1500, "operstatus": "administratively down", "type": "iGbE"}, "GigabitEthernet0/1": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4": [], "lineprotocol": "down ", "macaddress": "0c2c.013f.da01", "mediatype": "RJ45", "mtu": 1500, "operstatus": "administratively down", "type": "iGbE"}, "GigabitEthernet0/2": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4":
.
.
<output truncated for readability>Augmentez le niveau de verbosité en ajoutant plusieurs “v” -vvv
L’exécution du livre de jeu peut être limité à un ensemble d’hôte de l’inventaire avec le drapeau –limit.
ansible-playbook gather_ios_data.yml -v --limit rtr1Enfin des variables définies par les utilisateurs, Ansible supporte des magic inbuilt variables.
| Variable | Explanation |
|---|---|
ansible_* | Variables venant du fact gathering |
inventory_hostname | Nom du périphérique dans l’inventaire |
hostvars | Un dictionnaire variable où inventory_hostname est une des clés |
Le module debug permet d’afficher les sorties.
Les variables sont placées entre doubles accolades ({{ }}) et encadrées par des guillemets ("{{ variable }}") avec l’option msg:
Démonstration :
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:
- name: DEBUG MODULE DEMO
debug:
msg: "{{ inventory_hostname }} serial {{ ansible_net_serialnum }}"ansible-playbook debug-demo.ymlPLAY [GATHER INFORMATION FROM ROUTERS] ***********************************************************
TASK [GATHER ROUTER FACTS] ***********************************************************************
ok: [rtr2]
ok: [rtr3]
ok: [rtr1]
ok: [rtr4]
TASK [DEBUG MODULE DEMO] *************************************************************************
ok: [rtr2] => {
"msg": "rtr2 serial 92CY5AR6CZG9XCOPUMY7L"
}
ok: [rtr3] => {
"msg": "rtr3 serial 9FFT4CW16AQ2XMZP8DAWR"
}
ok: [rtr4] => {
"msg": "rtr4 serial 9HFRMZNWS2JVU4AJO4THG"
}
ok: [rtr1] => {
"msg": "rtr1 serial 9X1SIJ0FS0CFUA56J3XHI"
}
PLAY RECAP ***************************************************************************************
rtr1 : ok=2 changed=0 unreachable=0 failed=0
rtr2 : ok=2 changed=0 unreachable=0 failed=0
rtr3 : ok=2 changed=0 unreachable=0 failed=0
rtr4 : ok=2 changed=0 unreachable=0 failed=0Avec votre éditeur de texte favori (vim ou nano ou encore atom), créer un fichier gather_ios_data.yml.
Les livres de jeu sont écrits en langage YAML.
vim gather_ios_data.ymlVeuillez entrer la définition du jeu gather_ios_data.yml.
Pressez la touche “i” pour entrer en mode insertion (vi) et puis ESC et puis “:x” pour enregistrer et sortir.
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no---hosts qui désigne soit :alllocalhostconnection : network_clifacts est générée par le module ios_facts.Ensuite, veuillez ajouter la première tâche. Cette tâche utilise le module ios_facts pour récupérer les métadonnées (“facts”) des périphériques du groupe cisco.
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:Un livre de jeu est une liste de jeux.
Un jeu est une liste de tâches (ou semblables).
Un module est du code pré-écrit qui exécute une tâche.
Veuillez sortir de l’édition du texte (:x) et exécutez le livre de jeu :
ansible-playbook gather_ios_data.ymlLa sortie devrait ressembler à ceci :
PLAY [GATHER INFORMATION FROM ROUTERS] ******************************************************************
TASK [GATHER ROUTER FACTS] ******************************************************************************
ok: [rtr1]
ok: [rtr4]
ok: [rtr3]
ok: [rtr2]
PLAY RECAP **********************************************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0Le jeu a été bien été exécuté mais rien n’apparait sur la sortie. On active la verbosité activée en ajoutant l’option -v :
On peut augmenter la verbosité avec plusieur “v” -vvvv.
ansible-playbook gather_ios_data.yml -vPLAY [GATHER INFORMATION FROM ROUTERS] ***********************************************************
TASK [GATHER ROUTER FACTS] ***********************************************************************
ok: [rtr3] => {"ansible_facts": {"ansible_net_all_ipv4_addresses": ["192.168.122.180"], "ansible_net_all_ipv6_addresses": [], "ansible_net_filesystems": ["flash0:"], "ansible_net_gather_subset": ["hardware", "default", "interfaces"], "ansible_net_hostname": "rtr3", "ansible_net_image": "flash0:/vios-adventerprisek9-m", "ansible_net_interfaces": {"GigabitEthernet0/0": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4": [], "lineprotocol": "down ", "macaddress": "0c2c.013f.da00", "mediatype": "RJ45", "mtu": 1500, "operstatus": "administratively down", "type": "iGbE"}, "GigabitEthernet0/1": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4": [], "lineprotocol": "down ", "macaddress": "0c2c.013f.da01", "mediatype": "RJ45", "mtu": 1500, "operstatus": "administratively down", "type": "iGbE"}, "GigabitEthernet0/2": {"bandwidth": 1000000, "description": null, "duplex": "Auto", "ipv4":
.
.
<output truncated for readability>Note : La sortie retourne des paires de clé/valeurs qui peuvent être appelées dans les tâches suivantes du livre de jeu. Aussi, notez que toutes les variables qui commencent par ansible_ sont directement disponibles dans la suite.
Par exemple, une sortie complète :
{
"ansible_facts": {
"ansible_net_all_ipv4_addresses": [
"192.168.226.1",
"192.168.225.1",
"11.11.11.159",
"192.168.1.1",
"11.12.13.145"
],
"ansible_net_all_ipv6_addresses": [
"FD00:0:0:1::1"
],
"ansible_net_filesystems": [
"flash0:"
],
"ansible_net_filesystems_info": {
"flash0:": {
"spacefree_kb": 1947660,
"spacetotal_kb": 2092496
}
},
"ansible_net_gather_subset": [
"hardware",
"default",
"interfaces"
],
"ansible_net_hostname": "R1",
"ansible_net_image": "flash0:/vios-adventerprisek9-m",
"ansible_net_interfaces": {
"GigabitEthernet0/0": {
"bandwidth": 1000000,
"description": "TODO",
"duplex": null,
"ipv4": [
{
"address": "192.168.1.1",
"subnet": "24"
}
],
"ipv6": [
{
"address": "FD00:0:0:1::1",
"subnet": "FD00:0:0:1::/64"
}
],
"lineprotocol": "up ",
"macaddress": "0c3b.6204.1b00",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "up",
"type": "iGbE"
},
"GigabitEthernet0/1": {
"bandwidth": 1000000,
"description": "TODO",
"duplex": null,
"ipv4": [
{
"address": "11.11.11.159",
"subnet": "24"
}
],
"lineprotocol": "up ",
"macaddress": "0c3b.6204.1b01",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "up",
"type": "iGbE"
},
"GigabitEthernet0/2": {
"bandwidth": 1000000,
"description": "TODO",
"duplex": null,
"ipv4": [
{
"address": "192.168.225.1",
"subnet": "24"
}
],
"ipv6": [],
"lineprotocol": "up ",
"macaddress": "0c3b.6204.1b02",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "up",
"type": "iGbE"
},
"GigabitEthernet0/3": {
"bandwidth": 1000000,
"description": "TODO",
"duplex": null,
"ipv4": [
{
"address": "192.168.226.1",
"subnet": "24"
}
],
"ipv6": [],
"lineprotocol": "up ",
"macaddress": "0c3b.6204.1b03",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "up",
"type": "iGbE"
},
"GigabitEthernet0/4": {
"bandwidth": 1000000,
"description": null,
"duplex": "Auto",
"ipv4": [],
"lineprotocol": "down ",
"macaddress": "0c3b.6204.1b04",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "administratively down",
"type": "iGbE"
},
"GigabitEthernet0/5": {
"bandwidth": 1000000,
"description": null,
"duplex": "Auto",
"ipv4": [],
"lineprotocol": "down ",
"macaddress": "0c3b.6204.1b05",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "administratively down",
"type": "iGbE"
},
"GigabitEthernet0/6": {
"bandwidth": 1000000,
"description": null,
"duplex": "Auto",
"ipv4": [],
"lineprotocol": "down ",
"macaddress": "0c3b.6204.1b06",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "administratively down",
"type": "iGbE"
},
"GigabitEthernet0/7": {
"bandwidth": 1000000,
"description": null,
"duplex": null,
"ipv4": [
{
"address": "11.12.13.145",
"subnet": "24"
}
],
"lineprotocol": "up ",
"macaddress": "0c3b.6204.1b07",
"mediatype": "RJ45",
"mtu": 1500,
"operstatus": "up",
"type": "iGbE"
},
"NVI0": {
"bandwidth": 56,
"description": null,
"duplex": null,
"ipv4": [],
"lineprotocol": "up ",
"macaddress": null,
"mediatype": null,
"mtu": 1514,
"operstatus": "up",
"type": null
}
},
"ansible_net_memfree_mb": 170619,
"ansible_net_memtotal_mb": 265782,
"ansible_net_model": "IOSv",
"ansible_net_serialnum": "90I6G7VWM6FBM875LG6WJ",
"ansible_net_version": "15.6(2)T"
},
"changed": false
}Ansible permet de limiter l’exécution du livre de jeu contre certains hôtes de l’inventaire avec l’option --limit ou -l. Par exemple les commandes suivantes lancent le livre de jeu d’abord seulement sur rtr1 et puis sur rtr1 et rtr3.
ansible-playbook gather_ios_data.yml -v --limit rtr1Ou encore :
ansible-playbook gather_ios_data.yml -v --limit rtr1,rtr3Excécuter un livre de jeu en mode verbeux est une bonne option pour valider la sortie d’une tâche. Pour travailler avec les variables au sein d’un livre de jeu, on peut utiliser le module debug.
Veuillez ajouter une seconde tâche qui affiche l’OS du routeur et son numéro de série.
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:
- name: DISPLAY VERSION
debug:
msg: "The IOS version is: {{ ansible_net_version }}"
- name: DISPLAY SERIAL NUMBER
debug:
msg: "The serial number is:{{ ansible_net_serialnum }}"Maintenant, veuillez relancer le livre de jeu mais sans aucune option de verbosité contre tous les hôtes.
ansible-playbook gather_ios_data.ymlPLAY [GATHER INFORMATION FROM ROUTERS] ******************************************************************
TASK [GATHER ROUTER FACTS] ******************************************************************************
ok: [rtr4]
ok: [rtr1]
ok: [rtr2]
ok: [rtr3]
TASK [DISPLAY VERSION] **********************************************************************************
ok: [rtr4] => {
"msg": "The IOS version is: 16.08.01a"
}
ok: [rtr1] => {
"msg": "The IOS version is: 16.08.01a"
}
ok: [rtr2] => {
"msg": "The IOS version is: 16.08.01a"
}
ok: [rtr3] => {
"msg": "The IOS version is: 16.08.01a"
}
TASK [DISPLAY SERIAL NUMBER] ****************************************************************************
ok: [rtr1] => {
"msg": "The serial number is:96F0LYYKYUZ"
}
ok: [rtr4] => {
"msg": "The serial number is:94KZZ28ZT1Y"
}
ok: [rtr2] => {
"msg": "The serial number is:9VBX7BSSLGS"
}
ok: [rtr3] => {
"msg": "The serial number is:9OLKU6JWXRP"
}
PLAY RECAP **********************************************************************************************
rtr1 : ok=3 changed=0 unreachable=0 failed=0
rtr2 : ok=3 changed=0 unreachable=0 failed=0
rtr3 : ok=3 changed=0 unreachable=0 failed=0
rtr4 : ok=3 changed=0 unreachable=0 failed=0En utilisant moins de 20 lignes de “code”, vous avez automatisé la collection des versions et des numéros de série. Imaginez que vous faites fonctionner cette procédure sur un réseau de production !
La documentation des variables se situe dans la page de documentation du module ios_facts.
Note : Le module setup permet de prendre connaissance d’autres variables.
ansible rtr1 -m setup -c network_cliOffrant par exemple :
{
"ansible_all_ipv4_addresses": [
"11.12.13.1",
"192.168.122.141"
],
"ansible_all_ipv6_addresses": [
"fe80::e3b:62ff:fec4:8400",
"fe80::650f:9efe:7bf7:e320"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "04/01/2014",
"ansible_bios_version": "1.10.2-1ubuntu1",
"ansible_cmdline": {
"BOOT_IMAGE": "/vmlinuz-3.10.0-862.14.4.el7.x86_64",
"LANG": "en_US.UTF-8",
"console": "ttyS0",
"crashkernel": "auto",
"rd.lvm.lv": "centos_c7/swap",
"ro": true,
"root": "/dev/mapper/centos_c7-root"
},
"ansible_date_time": {
"date": "2019-05-24",
"day": "24",
"epoch": "1558701055",
"hour": "14",
"iso8601": "2019-05-24T12:30:55Z",
"iso8601_basic": "20190524T143055431529",
"iso8601_basic_short": "20190524T143055",
"iso8601_micro": "2019-05-24T12:30:55.431950Z",
"minute": "30",
"month": "05",
"second": "55",
"time": "14:30:55",
"tz": "CEST",
"tz_offset": "+0200",
"weekday": "Friday",
"weekday_number": "5",
"weeknumber": "20",
"year": "2019"
},
"ansible_default_ipv4": {
"address": "192.168.122.141",
"alias": "eth1",
"broadcast": "192.168.122.255",
"gateway": "192.168.122.1",
"interface": "eth1",
"macaddress": "0c:3b:62:c4:84:01",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "192.168.122.0",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_device_links": {
"ids": {
"dm-0": [
"dm-name-centos_c7-root",
"dm-uuid-LVM-4qzwGtk5i77k15HQQm1rs8BOLW0zW86xQ4xbpBrfHB9bcgeCPcVMNtx1MpjiyVx0"
],
"dm-1": [
"dm-name-centos_c7-swap",
"dm-uuid-LVM-4qzwGtk5i77k15HQQm1rs8BOLW0zW86xH3jeO5MDHHKoImmOR3n5lncw438lOPJK"
],
"sr0": [
"ata-QEMU_DVD-ROM_QM00003"
],
"vda2": [
"lvm-pv-uuid-lWn6Dc-024p-fhIv-38AU-D3OV-1alQ-qzRSXD"
]
},
"labels": {},
"masters": {
"vda2": [
"dm-0",
"dm-1"
]
},
"uuids": {
"dm-0": [
"0adc1746-d1d1-4b39-855e-4facda93f74e"
],
"dm-1": [
"ab6df0a2-e298-4f87-aca9-d17fc8bf8a9c"
],
"vda1": [
"f35879c5-512c-4a33-94d1-31eee186890e"
]
}
},
"ansible_devices": {
"dm-0": {
"holders": [],
"host": "",
"links": {
"ids": [
"dm-name-centos_c7-root",
"dm-uuid-LVM-4qzwGtk5i77k15HQQm1rs8BOLW0zW86xQ4xbpBrfHB9bcgeCPcVMNtx1MpjiyVx0"
],
"labels": [],
"masters": [],
"uuids": [
"0adc1746-d1d1-4b39-855e-4facda93f74e"
]
},
"model": null,
"partitions": {},
"removable": "0",
"rotational": "1",
"sas_address": null,
"sas_device_handle": null,
"scheduler_mode": "",
"sectors": "12992512",
"sectorsize": "512",
"size": "6.20 GB",
"support_discard": "0",
"vendor": null,
"virtual": 1
},
"dm-1": {
"holders": [],
"host": "",
"links": {
"ids": [
"dm-name-centos_c7-swap",
"dm-uuid-LVM-4qzwGtk5i77k15HQQm1rs8BOLW0zW86xH3jeO5MDHHKoImmOR3n5lncw438lOPJK"
],
"labels": [],
"masters": [],
"uuids": [
"ab6df0a2-e298-4f87-aca9-d17fc8bf8a9c"
]
},
"model": null,
"partitions": {},
"removable": "0",
"rotational": "1",
"sas_address": null,
"sas_device_handle": null,
"scheduler_mode": "",
"sectors": "1679360",
"sectorsize": "512",
"size": "820.00 MB",
"support_discard": "0",
"vendor": null,
"virtual": 1
},
"fd0": {
"holders": [],
"host": "",
"links": {
"ids": [],
"labels": [],
"masters": [],
"uuids": []
},
"model": null,
"partitions": {},
"removable": "1",
"rotational": "1",
"sas_address": null,
"sas_device_handle": null,
"scheduler_mode": "deadline",
"sectors": "8",
"sectorsize": "512",
"size": "4.00 KB",
"support_discard": "0",
"vendor": null,
"virtual": 1
},
"sr0": {
"holders": [],
"host": "",
"links": {
"ids": [
"ata-QEMU_DVD-ROM_QM00003"
],
"labels": [],
"masters": [],
"uuids": []
},
"model": "QEMU DVD-ROM",
"partitions": {},
"removable": "1",
"rotational": "1",
"sas_address": null,
"sas_device_handle": null,
"scheduler_mode": "deadline",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "QEMU",
"virtual": 1
},
"vda": {
"holders": [],
"host": "",
"links": {
"ids": [],
"labels": [],
"masters": [],
"uuids": []
},
"model": null,
"partitions": {
"vda1": {
"holders": [],
"links": {
"ids": [],
"labels": [],
"masters": [],
"uuids": [
"f35879c5-512c-4a33-94d1-31eee186890e"
]
},
"sectors": "2097152",
"sectorsize": 512,
"size": "1.00 GB",
"start": "2048",
"uuid": "f35879c5-512c-4a33-94d1-31eee186890e"
},
"vda2": {
"holders": [
"centos_c7-root",
"centos_c7-swap"
],
"links": {
"ids": [
"lvm-pv-uuid-lWn6Dc-024p-fhIv-38AU-D3OV-1alQ-qzRSXD"
],
"labels": [],
"masters": [
"dm-0",
"dm-1"
],
"uuids": []
},
"sectors": "14678016",
"sectorsize": 512,
"size": "7.00 GB",
"start": "2099200",
"uuid": null
}
},
"removable": "0",
"rotational": "1",
"sas_address": null,
"sas_device_handle": null,
"scheduler_mode": "mq-deadline",
"sectors": "16777216",
"sectorsize": "512",
"size": "8.00 GB",
"support_discard": "0",
"vendor": "0x1af4",
"virtual": 1
}
},
"ansible_distribution": "CentOS",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/redhat-release",
"ansible_distribution_file_variety": "RedHat",
"ansible_distribution_major_version": "7",
"ansible_distribution_release": "Core",
"ansible_distribution_version": "7.5.1804",
"ansible_dns": {
"nameservers": [
"192.168.122.1",
"127.0.0.1"
]
},
"ansible_domain": "",
"ansible_effective_group_id": 0,
"ansible_effective_user_id": 0,
"ansible_env": {
"HISTCONTROL": "ignoredups",
"HISTSIZE": "1000",
"HOME": "/root",
"HOSTNAME": "controller",
"LANG": "en_US.UTF-8",
"LESSOPEN": "||/usr/bin/lesspipe.sh %s",
"LOGNAME": "root",
"LS_COLORS": "rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:",
"MAIL": "/var/spool/mail/root",
"PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin",
"PWD": "/root/networking-workshop",
"SHELL": "/bin/bash",
"SHLVL": "3",
"SSH_CLIENT": "172.16.253.6 63448 22",
"SSH_CONNECTION": "172.16.253.6 63448 192.168.122.141 22",
"SSH_TTY": "/dev/pts/0",
"TERM": "xterm-256color",
"USER": "root",
"XDG_RUNTIME_DIR": "/run/user/0",
"XDG_SESSION_ID": "3",
"_": "/usr/bin/python"
},
"ansible_eth0": {
"active": true,
"device": "eth0",
"features": {
"busy_poll": "off [fixed]",
"fcoe_mtu": "off [fixed]",
"generic_receive_offload": "on",
"generic_segmentation_offload": "off [requested on]",
"highdma": "on [fixed]",
"hw_tc_offload": "off [fixed]",
"l2_fwd_offload": "off [fixed]",
"large_receive_offload": "off [fixed]",
"loopback": "off [fixed]",
"netns_local": "off [fixed]",
"ntuple_filters": "off [fixed]",
"receive_hashing": "off [fixed]",
"rx_all": "off [fixed]",
"rx_checksumming": "off [fixed]",
"rx_fcs": "off [fixed]",
"rx_udp_tunnel_port_offload": "off [fixed]",
"rx_vlan_filter": "on [fixed]",
"rx_vlan_offload": "off [fixed]",
"rx_vlan_stag_filter": "off [fixed]",
"rx_vlan_stag_hw_parse": "off [fixed]",
"scatter_gather": "off",
"tcp_segmentation_offload": "off",
"tx_checksum_fcoe_crc": "off [fixed]",
"tx_checksum_ip_generic": "off [fixed]",
"tx_checksum_ipv4": "off [fixed]",
"tx_checksum_ipv6": "off [fixed]",
"tx_checksum_sctp": "off [fixed]",
"tx_checksumming": "off",
"tx_fcoe_segmentation": "off [fixed]",
"tx_gre_csum_segmentation": "off [fixed]",
"tx_gre_segmentation": "off [fixed]",
"tx_gso_partial": "off [fixed]",
"tx_gso_robust": "off [fixed]",
"tx_ipip_segmentation": "off [fixed]",
"tx_lockless": "off [fixed]",
"tx_nocache_copy": "off",
"tx_scatter_gather": "off [fixed]",
"tx_scatter_gather_fraglist": "off [fixed]",
"tx_sctp_segmentation": "off [fixed]",
"tx_sit_segmentation": "off [fixed]",
"tx_tcp6_segmentation": "off [fixed]",
"tx_tcp_ecn_segmentation": "off [fixed]",
"tx_tcp_mangleid_segmentation": "off [fixed]",
"tx_tcp_segmentation": "off [fixed]",
"tx_udp_tnl_csum_segmentation": "off [fixed]",
"tx_udp_tnl_segmentation": "off [fixed]",
"tx_vlan_offload": "off [fixed]",
"tx_vlan_stag_hw_insert": "off [fixed]",
"udp_fragmentation_offload": "off [fixed]",
"vlan_challenged": "off [fixed]"
},
"hw_timestamp_filters": [],
"ipv4": {
"address": "11.12.13.1",
"broadcast": "11.12.13.255",
"netmask": "255.255.255.0",
"network": "11.12.13.0"
},
"ipv6": [
{
"address": "fe80::e3b:62ff:fec4:8400",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "0c:3b:62:c4:84:00",
"module": "virtio_net",
"mtu": 1500,
"pciid": "virtio0",
"promisc": false,
"timestamping": [
"rx_software",
"software"
],
"type": "ether"
},
"ansible_eth1": {
"active": true,
"device": "eth1",
"features": {
"busy_poll": "off [fixed]",
"fcoe_mtu": "off [fixed]",
"generic_receive_offload": "on",
"generic_segmentation_offload": "off [requested on]",
"highdma": "on [fixed]",
"hw_tc_offload": "off [fixed]",
"l2_fwd_offload": "off [fixed]",
"large_receive_offload": "off [fixed]",
"loopback": "off [fixed]",
"netns_local": "off [fixed]",
"ntuple_filters": "off [fixed]",
"receive_hashing": "off [fixed]",
"rx_all": "off [fixed]",
"rx_checksumming": "off [fixed]",
"rx_fcs": "off [fixed]",
"rx_udp_tunnel_port_offload": "off [fixed]",
"rx_vlan_filter": "on [fixed]",
"rx_vlan_offload": "off [fixed]",
"rx_vlan_stag_filter": "off [fixed]",
"rx_vlan_stag_hw_parse": "off [fixed]",
"scatter_gather": "off",
"tcp_segmentation_offload": "off",
"tx_checksum_fcoe_crc": "off [fixed]",
"tx_checksum_ip_generic": "off [fixed]",
"tx_checksum_ipv4": "off [fixed]",
"tx_checksum_ipv6": "off [fixed]",
"tx_checksum_sctp": "off [fixed]",
"tx_checksumming": "off",
"tx_fcoe_segmentation": "off [fixed]",
"tx_gre_csum_segmentation": "off [fixed]",
"tx_gre_segmentation": "off [fixed]",
"tx_gso_partial": "off [fixed]",
"tx_gso_robust": "off [fixed]",
"tx_ipip_segmentation": "off [fixed]",
"tx_lockless": "off [fixed]",
"tx_nocache_copy": "off",
"tx_scatter_gather": "off [fixed]",
"tx_scatter_gather_fraglist": "off [fixed]",
"tx_sctp_segmentation": "off [fixed]",
"tx_sit_segmentation": "off [fixed]",
"tx_tcp6_segmentation": "off [fixed]",
"tx_tcp_ecn_segmentation": "off [fixed]",
"tx_tcp_mangleid_segmentation": "off [fixed]",
"tx_tcp_segmentation": "off [fixed]",
"tx_udp_tnl_csum_segmentation": "off [fixed]",
"tx_udp_tnl_segmentation": "off [fixed]",
"tx_vlan_offload": "off [fixed]",
"tx_vlan_stag_hw_insert": "off [fixed]",
"udp_fragmentation_offload": "off [fixed]",
"vlan_challenged": "off [fixed]"
},
"hw_timestamp_filters": [],
"ipv4": {
"address": "192.168.122.141",
"broadcast": "192.168.122.255",
"netmask": "255.255.255.0",
"network": "192.168.122.0"
},
"ipv6": [
{
"address": "fe80::650f:9efe:7bf7:e320",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "0c:3b:62:c4:84:01",
"module": "virtio_net",
"mtu": 1500,
"pciid": "virtio1",
"promisc": false,
"timestamping": [
"rx_software",
"software"
],
"type": "ether"
},
"ansible_fips": false,
"ansible_form_factor": "Other",
"ansible_fqdn": "controller",
"ansible_hostname": "controller",
"ansible_interfaces": [
"lo",
"eth1",
"eth0"
],
"ansible_is_chroot": false,
"ansible_iscsi_iqn": "",
"ansible_kernel": "3.10.0-862.14.4.el7.x86_64",
"ansible_lo": {
"active": true,
"device": "lo",
"features": {
"busy_poll": "off [fixed]",
"fcoe_mtu": "off [fixed]",
"generic_receive_offload": "on",
"generic_segmentation_offload": "on",
"highdma": "on [fixed]",
"hw_tc_offload": "off [fixed]",
"l2_fwd_offload": "off [fixed]",
"large_receive_offload": "off [fixed]",
"loopback": "on [fixed]",
"netns_local": "on [fixed]",
"ntuple_filters": "off [fixed]",
"receive_hashing": "off [fixed]",
"rx_all": "off [fixed]",
"rx_checksumming": "on [fixed]",
"rx_fcs": "off [fixed]",
"rx_udp_tunnel_port_offload": "off [fixed]",
"rx_vlan_filter": "off [fixed]",
"rx_vlan_offload": "off [fixed]",
"rx_vlan_stag_filter": "off [fixed]",
"rx_vlan_stag_hw_parse": "off [fixed]",
"scatter_gather": "on",
"tcp_segmentation_offload": "on",
"tx_checksum_fcoe_crc": "off [fixed]",
"tx_checksum_ip_generic": "on [fixed]",
"tx_checksum_ipv4": "off [fixed]",
"tx_checksum_ipv6": "off [fixed]",
"tx_checksum_sctp": "on [fixed]",
"tx_checksumming": "on",
"tx_fcoe_segmentation": "off [fixed]",
"tx_gre_csum_segmentation": "off [fixed]",
"tx_gre_segmentation": "off [fixed]",
"tx_gso_partial": "off [fixed]",
"tx_gso_robust": "off [fixed]",
"tx_ipip_segmentation": "off [fixed]",
"tx_lockless": "on [fixed]",
"tx_nocache_copy": "off [fixed]",
"tx_scatter_gather": "on [fixed]",
"tx_scatter_gather_fraglist": "on [fixed]",
"tx_sctp_segmentation": "on",
"tx_sit_segmentation": "off [fixed]",
"tx_tcp6_segmentation": "on",
"tx_tcp_ecn_segmentation": "on",
"tx_tcp_mangleid_segmentation": "on",
"tx_tcp_segmentation": "on",
"tx_udp_tnl_csum_segmentation": "off [fixed]",
"tx_udp_tnl_segmentation": "off [fixed]",
"tx_vlan_offload": "off [fixed]",
"tx_vlan_stag_hw_insert": "off [fixed]",
"udp_fragmentation_offload": "on",
"vlan_challenged": "on [fixed]"
},
"hw_timestamp_filters": [],
"ipv4": {
"address": "127.0.0.1",
"broadcast": "host",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"mtu": 65536,
"promisc": false,
"timestamping": [
"rx_software",
"software"
],
"type": "loopback"
},
"ansible_local": {},
"ansible_lsb": {},
"ansible_lvm": {
"lvs": {
"root": {
"size_g": "6.20",
"vg": "centos_c7"
},
"swap": {
"size_g": "0.80",
"vg": "centos_c7"
}
},
"pvs": {
"/dev/vda2": {
"free_g": "0",
"size_g": "7.00",
"vg": "centos_c7"
}
},
"vgs": {
"centos_c7": {
"free_g": "0",
"num_lvs": "2",
"num_pvs": "1",
"size_g": "7.00"
}
}
},
"ansible_machine": "x86_64",
"ansible_machine_id": "67837007899b48a4969ab2c2e43c20da",
"ansible_memfree_mb": 675,
"ansible_memory_mb": {
"nocache": {
"free": 787,
"used": 204
},
"real": {
"free": 675,
"total": 991,
"used": 316
},
"swap": {
"cached": 0,
"free": 819,
"total": 819,
"used": 0
}
},
"ansible_memtotal_mb": 991,
"ansible_mounts": [
{
"block_available": 1215238,
"block_size": 4096,
"block_total": 1621504,
"block_used": 406266,
"device": "/dev/mapper/centos_c7-root",
"fstype": "xfs",
"inode_available": 3193621,
"inode_total": 3248128,
"inode_used": 54507,
"mount": "/",
"options": "rw,relatime,attr2,inode64,noquota",
"size_available": 4977614848,
"size_total": 6641680384,
"uuid": "0adc1746-d1d1-4b39-855e-4facda93f74e"
},
{
"block_available": 192929,
"block_size": 4096,
"block_total": 259584,
"block_used": 66655,
"device": "/dev/vda1",
"fstype": "xfs",
"inode_available": 523947,
"inode_total": 524288,
"inode_used": 341,
"mount": "/boot",
"options": "rw,relatime,attr2,inode64,noquota",
"size_available": 790237184,
"size_total": 1063256064,
"uuid": "f35879c5-512c-4a33-94d1-31eee186890e"
}
],
"ansible_nodename": "controller",
"ansible_os_family": "RedHat",
"ansible_pkg_mgr": "yum",
"ansible_processor": [
"0",
"GenuineIntel",
"QEMU Virtual CPU version 2.5+",
"1",
"GenuineIntel",
"QEMU Virtual CPU version 2.5+"
],
"ansible_processor_cores": 1,
"ansible_processor_count": 2,
"ansible_processor_threads_per_core": 1,
"ansible_processor_vcpus": 2,
"ansible_product_name": "Standard PC (i440FX + PIIX, 1996)",
"ansible_product_serial": "NA",
"ansible_product_uuid": "9861876C-2A57-4E3D-8B97-2A5CC777C484",
"ansible_product_version": "pc-i440fx-bionic",
"ansible_python": {
"executable": "/usr/bin/python",
"has_sslcontext": true,
"type": "CPython",
"version": {
"major": 2,
"micro": 5,
"minor": 7,
"releaselevel": "final",
"serial": 0
},
"version_info": [
2,
7,
5,
"final",
0
]
},
"ansible_python_version": "2.7.5",
"ansible_real_group_id": 0,
"ansible_real_user_id": 0,
"ansible_selinux": {
"status": "disabled"
},
"ansible_selinux_python_present": true,
"ansible_service_mgr": "systemd",
"ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHFgDdiWalyoZDTTyEhKkHAgHVtFnSO1qOIrv7BsYZXQMADSCcr8ycM8NnIW833pGzAx0WiQPCJ1kdUIgAPSmpM=",
"ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIMpAULUx2ilr+eq106KqbcwsgxA0iNo7ggJkWOlZQd67",
"ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDKDhzOs5nDGmYzFGFaBHz6+bOCGk93mFAo0mNcWyibdtOqwXK+gfhRJAg8tm3A5b/SirSrTM0Esv9vQiQVsp1w5VmnAKn7JpI4FCtKmkkh+zKSpsOhfpc1mDazKPXgSBpJD09O63ZgqV2tVxQMwRTR6Cti8AcbGdfXBUH5usqLuQmjtTbtTyZVIRPIA0m9RgRtA6LyWvt4/VnvcJYDGwqmIip/YBAR5Jy7i8pe8B2FPSgQ1tCetXgvExE9gAT4GmIgrLnTWsDYHXS6XVkQ+KI/RWsjuGnjCo92pdr1q0ozX6/2hoBuybMgYrad0kHkWBOvVs6BArkAzKZ/r9Ha0t0p",
"ansible_swapfree_mb": 819,
"ansible_swaptotal_mb": 819,
"ansible_system": "Linux",
"ansible_system_capabilities": [
"cap_chown",
"cap_dac_override",
"cap_dac_read_search",
"cap_fowner",
"cap_fsetid",
"cap_kill",
"cap_setgid",
"cap_setuid",
"cap_setpcap",
"cap_linux_immutable",
"cap_net_bind_service",
"cap_net_broadcast",
"cap_net_admin",
"cap_net_raw",
"cap_ipc_lock",
"cap_ipc_owner",
"cap_sys_module",
"cap_sys_rawio",
"cap_sys_chroot",
"cap_sys_ptrace",
"cap_sys_pacct",
"cap_sys_admin",
"cap_sys_boot",
"cap_sys_nice",
"cap_sys_resource",
"cap_sys_time",
"cap_sys_tty_config",
"cap_mknod",
"cap_lease",
"cap_audit_write",
"cap_audit_control",
"cap_setfcap",
"cap_mac_override",
"cap_mac_admin",
"cap_syslog",
"35",
"36+ep"
],
"ansible_system_capabilities_enforced": "True",
"ansible_system_vendor": "QEMU",
"ansible_uptime_seconds": 2929,
"ansible_user_dir": "/root",
"ansible_user_gecos": "root",
"ansible_user_gid": 0,
"ansible_user_id": "root",
"ansible_user_shell": "/bin/bash",
"ansible_user_uid": 0,
"ansible_userspace_architecture": "x86_64",
"ansible_userspace_bits": "64",
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "kvm",
"gather_subset": [
"all"
],
"module_setup": true
}