ฉันเห็นว่า Ansible มีตัวแปรที่กำหนดไว้ล่วงหน้าซึ่งเราสามารถใช้ใน playbooks และไฟล์เทมเพลต ตัวอย่างเช่นที่อยู่ IP ของโฮสต์คือ ansible_eth0.ipv4.address Google และการค้นหาเอกสารที่ฉันไม่พบรายการตัวแปรทั้งหมดที่มี บางคนจะแสดงรายการพวกเขาให้ฉันหรือไม่
ฉันเห็นว่า Ansible มีตัวแปรที่กำหนดไว้ล่วงหน้าซึ่งเราสามารถใช้ใน playbooks และไฟล์เทมเพลต ตัวอย่างเช่นที่อยู่ IP ของโฮสต์คือ ansible_eth0.ipv4.address Google และการค้นหาเอกสารที่ฉันไม่พบรายการตัวแปรทั้งหมดที่มี บางคนจะแสดงรายการพวกเขาให้ฉันหรือไม่
คำตอบ:
โอ๊ะ! จากคำถามที่พบบ่อย :
ฉันจะดูรายการตัวแปร ansible_ ทั้งหมดได้อย่างไร โดยปกติแล้ว Ansible จะรวบรวม“ ข้อเท็จจริง” เกี่ยวกับเครื่องภายใต้การจัดการและข้อเท็จจริงเหล่านี้สามารถเข้าถึงได้ใน Playbooks และในแม่แบบ หากต้องการดูรายการข้อเท็จจริงทั้งหมดที่มีอยู่ในเครื่องคุณสามารถเรียกใช้โมดูล "การตั้งค่า" เป็นการกระทำแบบเฉพาะกิจ:
ansible -m setup hostname
สิ่งนี้จะพิมพ์พจนานุกรมของข้อเท็จจริงทั้งหมดที่มีให้สำหรับโฮสต์นั้น
นี่คือผลลัพธ์สำหรับเครื่องเสมือนคนจรจัดของฉันที่เรียกว่า scdev:
scdev | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.2.15",
"192.168.10.10"
],
"ansible_all_ipv6_addresses": [
"fe80::a00:27ff:fe12:9698",
"fe80::a00:27ff:fe74:1330"
],
"ansible_architecture": "i386",
"ansible_bios_date": "12/01/2006",
"ansible_bios_version": "VirtualBox",
"ansible_cmdline": {
"BOOT_IMAGE": "/vmlinuz-3.2.0-23-generic-pae",
"quiet": true,
"ro": true,
"root": "/dev/mapper/precise32-root"
},
"ansible_date_time": {
"date": "2013-09-17",
"day": "17",
"epoch": "1379378304",
"hour": "00",
"iso8601": "2013-09-17T00:38:24Z",
"iso8601_micro": "2013-09-17T00:38:24.425092Z",
"minute": "38",
"month": "09",
"second": "24",
"time": "00:38:24",
"tz": "UTC",
"year": "2013"
},
"ansible_default_ipv4": {
"address": "10.0.2.15",
"alias": "eth0",
"gateway": "10.0.2.2",
"interface": "eth0",
"macaddress": "08:00:27:12:96:98",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "10.0.2.0",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_devices": {
"sda": {
"holders": [],
"host": "SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)",
"model": "VBOX HARDDISK",
"partitions": {
"sda1": {
"sectors": "497664",
"sectorsize": 512,
"size": "243.00 MB",
"start": "2048"
},
"sda2": {
"sectors": "2",
"sectorsize": 512,
"size": "1.00 KB",
"start": "501758"
},
},
"removable": "0",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "167772160",
"sectorsize": "512",
"size": "80.00 GB",
"support_discard": "0",
"vendor": "ATA"
},
"sr0": {
"holders": [],
"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
"model": "CD-ROM",
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "VBOX"
},
"sr1": {
"holders": [],
"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
"model": "CD-ROM",
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "VBOX"
}
},
"ansible_distribution": "Ubuntu",
"ansible_distribution_release": "precise",
"ansible_distribution_version": "12.04",
"ansible_domain": "",
"ansible_eth0": {
"active": true,
"device": "eth0",
"ipv4": {
"address": "10.0.2.15",
"netmask": "255.255.255.0",
"network": "10.0.2.0"
},
"ipv6": [
{
"address": "fe80::a00:27ff:fe12:9698",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "08:00:27:12:96:98",
"module": "e1000",
"mtu": 1500,
"type": "ether"
},
"ansible_eth1": {
"active": true,
"device": "eth1",
"ipv4": {
"address": "192.168.10.10",
"netmask": "255.255.255.0",
"network": "192.168.10.0"
},
"ipv6": [
{
"address": "fe80::a00:27ff:fe74:1330",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "08:00:27:74:13:30",
"module": "e1000",
"mtu": 1500,
"type": "ether"
},
"ansible_form_factor": "Other",
"ansible_fqdn": "scdev",
"ansible_hostname": "scdev",
"ansible_interfaces": [
"lo",
"eth1",
"eth0"
],
"ansible_kernel": "3.2.0-23-generic-pae",
"ansible_lo": {
"active": true,
"device": "lo",
"ipv4": {
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"mtu": 16436,
"type": "loopback"
},
"ansible_lsb": {
"codename": "precise",
"description": "Ubuntu 12.04 LTS",
"id": "Ubuntu",
"major_release": "12",
"release": "12.04"
},
"ansible_machine": "i686",
"ansible_memfree_mb": 23,
"ansible_memtotal_mb": 369,
"ansible_mounts": [
{
"device": "/dev/mapper/precise32-root",
"fstype": "ext4",
"mount": "/",
"options": "rw,errors=remount-ro",
"size_available": 77685088256,
"size_total": 84696281088
},
{
"device": "/dev/sda1",
"fstype": "ext2",
"mount": "/boot",
"options": "rw",
"size_available": 201044992,
"size_total": 238787584
},
{
"device": "/vagrant",
"fstype": "vboxsf",
"mount": "/vagrant",
"options": "uid=1000,gid=1000,rw",
"size_available": 42013151232,
"size_total": 484145360896
}
],
"ansible_os_family": "Debian",
"ansible_pkg_mgr": "apt",
"ansible_processor": [
"Pentium(R) Dual-Core CPU E5300 @ 2.60GHz"
],
"ansible_processor_cores": "NA",
"ansible_processor_count": 1,
"ansible_product_name": "VirtualBox",
"ansible_product_serial": "NA",
"ansible_product_uuid": "NA",
"ansible_product_version": "1.2",
"ansible_python_version": "2.7.3",
"ansible_selinux": false,
"ansible_swapfree_mb": 766,
"ansible_swaptotal_mb": 767,
"ansible_system": "Linux",
"ansible_system_vendor": "innotek GmbH",
"ansible_user_id": "neves",
"ansible_userspace_architecture": "i386",
"ansible_userspace_bits": "32",
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "virtualbox"
},
"changed": false
}
เอกสารปัจจุบันมีตอนที่สมบูรณ์ที่แสดงรายการตัวแปรและข้อเท็จจริงทั้งหมด
ansible <ip> -m setup -i <ip>,
- อย่าลืมเครื่องหมายจุลภาคในตอนท้ายเพื่อทำให้เป็นรายการและด้วยเหตุนี้จึงเป็นสินค้าคงคลัง
ansible -m setup hostname
รับข้อเท็จจริงที่รวบรวมโดยโมดูลการตั้งค่าเท่านั้น
Gilles Cornu โพสต์แม่แบบเพื่อแสดงรายการตัวแปรทั้งหมดสำหรับโฮสต์ที่เฉพาะเจาะจง
เทมเพลต (ภายหลังเรียกว่าdump_variables ):
HOSTVARS (ANSIBLE GATHERED, group_vars, host_vars) :
{{ hostvars[inventory_hostname] | to_yaml }}
PLAYBOOK VARS:
{{ vars | to_yaml }}
Playbook เพื่อใช้งาน:
- hosts: all
tasks:
- template:
src: templates/dump_variables
dest: /tmp/ansible_variables
- fetch:
src: /tmp/ansible_variables
dest: "{{inventory_hostname}}_ansible_variables"
หลังจากนั้นคุณมีดัมพ์ของตัวแปรทั้งหมดในทุกโฮสต์และสำเนาของไฟล์ดัมพ์ข้อความแต่ละไฟล์บนเวิร์กสเตชันโลคัลของคุณในโฟลเดอร์ tmp ของคุณ หากคุณไม่ต้องการสำเนาภายในคุณสามารถลบคำสั่งดึงข้อมูล
ซึ่งรวมถึงข้อเท็จจริงที่รวบรวมได้ตัวแปรโฮสต์และตัวแปรกลุ่ม ดังนั้นคุณจะเห็นตัวแปรเริ่มต้นเบิ้ลเช่นGROUP_NAMES , inventory_hostname , ansible_ssh_hostและอื่น ๆ
ตัวแปรมีอยู่ 3 แหล่งใน Ansible:
ตัวแปรที่รวบรวมจากข้อเท็จจริง คุณสามารถรับได้โดยใช้คำสั่ง:ansible -m setup hostname
Built-in (กำหนดไว้ล่วงหน้า) ตัวแปร Ansible (AKA 'magic' ตัวแปร) พวกเขามีการบันทึกไว้ในเอกสารประกอบ Ansible: http://docs.ansible.com/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts
นี่คือรายการที่แยกมาจากเอกสาร 1.9 Ansible:
role_path
- มันคุ้มค่าที่จะเยี่ยมชมลิงค์ที่มีให้เพื่อดูรายการสำหรับ Ansible รุ่นปัจจุบัน ระวังให้ดีว่า ansible พัฒนาอย่างรวดเร็วและ repo version สำหรับ Debian และลูก ๆ ของมันค่อนข้างเก่า ตรวจสอบเวอร์ชันที่คุณติดตั้งกับเอกสารอย่างละเอียด
ฉันใช้ playbook ที่เรียบง่ายนี้:
---
# vars.yml
#
# Shows the value of all variables/facts.
#
# Example:
#
# ansible-playbook vars.yml -e 'hosts=localhost'
#
- hosts: localhost
tasks:
- fail: "You must specify a value for `hosts` variable - e.g.: ansible-playbook vars.yml -e 'hosts=localhost'"
when: hosts is not defined
- hosts: "{{ hosts }}"
tasks:
- debug: var=vars
- debug: var=hostvars[inventory_hostname]
ansible -m setup
ไม่ได้ทำเคล็ดลับและคุณต้องได้รับข้อมูลนี้จาก playbook
debug
โมดูลสามารถนำมาใช้ในการวิเคราะห์ตัวแปร ระวังการรันคำสั่งต่อไปนี้ ในการตั้งค่าของเรามันสร้าง 444709 บรรทัดด้วย 16MB:
ansible -m debug -a 'var=hostvars' localhost
ฉันไม่แน่ใจ แต่อาจจำเป็นต้องเปิดใช้งานการแคชข้อเท็จจริง
หากคุณต้องการเพียงโฮสต์เดียวใช้ชื่อโฮสต์เป็นกุญแจสำคัญสำหรับhostvars
แฮ:
ansible -m debug -a 'var=hostvars.localhost' localhost
มีตัวแปรจำนวนมากที่กำหนดเป็นข้อเท็จจริง - http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts
"ansible_all_ipv4_addresses": [
"REDACTED IP ADDRESS"
],
"ansible_all_ipv6_addresses": [
"REDACTED IPV6 ADDRESS"
],
"ansible_architecture": "x86_64",
"ansible_bios_date": "09/20/2012",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "/boot/vmlinuz-3.5.0-23-generic",
"quiet": true,
"ro": true,
"root": "UUID=4195bff4-e157-4e41-8701-e93f0aec9e22",
"splash": true
},
"ansible_date_time": {
"date": "2013-10-02",
"day": "02",
"epoch": "1380756810",
"hour": "19",
"iso8601": "2013-10-02T23:33:30Z",
"iso8601_micro": "2013-10-02T23:33:30.036070Z",
"minute": "33",
"month": "10",
"second": "30",
"time": "19:33:30",
"tz": "EDT",
"year": "2013"
},
"ansible_default_ipv4": {
"address": "REDACTED",
"alias": "eth0",
"gateway": "REDACTED",
"interface": "eth0",
"macaddress": "REDACTED",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "REDACTED",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_devices": {
"fd0": {
"holders": [],
"host": "",
"model": null,
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "deadline",
"sectors": "0",
"sectorsize": "512",
"size": "0.00 Bytes",
"support_discard": "0",
"vendor": null
},
"sda": {
"holders": [],
"host": "SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)",
"model": "VMware Virtual S",
"partitions": {
"sda1": {
"sectors": "39843840",
"sectorsize": 512,
"size": "19.00 GB",
"start": "2048"
},
"sda2": {
"sectors": "2",
"sectorsize": 512,
"size": "1.00 KB",
"start": "39847934"
},
"sda5": {
"sectors": "2093056",
"sectorsize": 512,
"size": "1022.00 MB",
"start": "39847936"
}
},
"removable": "0",
"rotational": "1",
"scheduler_mode": "deadline",
"sectors": "41943040",
"sectorsize": "512",
"size": "20.00 GB",
"support_discard": "0",
"vendor": "VMware,"
},
"sr0": {
"holders": [],
"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
"model": "VMware IDE CDR10",
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "deadline",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "NECVMWar"
}
},
"ansible_distribution": "Ubuntu",
"ansible_distribution_release": "precise",
"ansible_distribution_version": "12.04",
"ansible_domain": "",
"ansible_env": {
"COLORTERM": "gnome-terminal",
"DISPLAY": ":0",
"HOME": "/home/mdehaan",
"LANG": "C",
"LESSCLOSE": "/usr/bin/lesspipe %s %s",
"LESSOPEN": "| /usr/bin/lesspipe %s",
"LOGNAME": "root",
"LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:",
"MAIL": "/var/mail/root",
"OLDPWD": "/root/ansible/docsite",
"PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PWD": "/root/ansible",
"SHELL": "/bin/bash",
"SHLVL": "1",
"SUDO_COMMAND": "/bin/bash",
"SUDO_GID": "1000",
"SUDO_UID": "1000",
"SUDO_USER": "mdehaan",
"TERM": "xterm",
"USER": "root",
"USERNAME": "root",
"XAUTHORITY": "/home/mdehaan/.Xauthority",
"_": "/usr/local/bin/ansible"
},
"ansible_eth0": {
"active": true,
"device": "eth0",
"ipv4": {
"address": "REDACTED",
"netmask": "255.255.255.0",
"network": "REDACTED"
},
"ipv6": [
{
"address": "REDACTED",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "REDACTED",
"module": "e1000",
"mtu": 1500,
"type": "ether"
},
"ansible_form_factor": "Other",
"ansible_fqdn": "ubuntu2.example.com",
"ansible_hostname": "ubuntu2",
"ansible_interfaces": [
"lo",
"eth0"
],
"ansible_kernel": "3.5.0-23-generic",
"ansible_lo": {
"active": true,
"device": "lo",
"ipv4": {
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"mtu": 16436,
"type": "loopback"
},
"ansible_lsb": {
"codename": "precise",
"description": "Ubuntu 12.04.2 LTS",
"id": "Ubuntu",
"major_release": "12",
"release": "12.04"
},
"ansible_machine": "x86_64",
"ansible_memfree_mb": 74,
"ansible_memtotal_mb": 991,
"ansible_mounts": [
{
"device": "/dev/sda1",
"fstype": "ext4",
"mount": "/",
"options": "rw,errors=remount-ro",
"size_available": 15032406016,
"size_total": 20079898624
}
],
"ansible_nodename": "ubuntu2.example.com",
"ansible_os_family": "Debian",
"ansible_pkg_mgr": "apt",
"ansible_processor": [
"Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz"
],
"ansible_processor_cores": 1,
"ansible_processor_count": 1,
"ansible_processor_threads_per_core": 1,
"ansible_processor_vcpus": 1,
"ansible_product_name": "VMware Virtual Platform",
"ansible_product_serial": "REDACTED",
"ansible_product_uuid": "REDACTED",
"ansible_product_version": "None",
"ansible_python_version": "2.7.3",
"ansible_selinux": false,
"ansible_ssh_host_key_dsa_public": "REDACTED KEY VALUE"
"ansible_ssh_host_key_ecdsa_public": "REDACTED KEY VALUE"
"ansible_ssh_host_key_rsa_public": "REDACTED KEY VALUE"
"ansible_swapfree_mb": 665,
"ansible_swaptotal_mb": 1021,
"ansible_system": "Linux",
"ansible_system_vendor": "VMware, Inc.",
"ansible_user_id": "root",
"ansible_userspace_architecture": "x86_64",
"ansible_userspace_bits": "64",
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "VMware"
โปรดสังเกตว่าเอกสารอย่างเป็นทางการเกี่ยวกับตัวแปรการกำหนดค่าการเชื่อมต่อหรือตัวแปร "พฤติกรรม" ซึ่งไม่ปรากฏใน vars โฮสต์ดูเหมือนจะเป็นรายการพารามิเตอร์พฤติกรรมสินค้าคงคลังในเอกสารประกอบการสินค้าคงคลัง
ป.ล. sudo
ตัวเลือกไม่มีเอกสารที่นั่น (ใช่sudo
ไม่ใช่ansible_sudo
อย่างที่คุณคาดหวัง ... ) และอาจมีอีกไม่มาก แต่นั่นเป็นเอกสารที่ดีที่สุดที่ฉันพบใน em
ตัวแปรบางอย่างที่ไม่สามารถใช้ได้ในทุกโฮสต์เช่นและansible_domain
domain
หากสถานการณ์จำเป็นต้องมีการ debugged ฉันเข้าสู่เซิร์ฟเวอร์และปัญหา:
user@server:~$ ansible -m setup localhost | grep domain
[WARNING]: provided hosts list is empty, only localhost is available
"ansible_domain": "prd.example.com",
ฉันรู้ว่าคำถามนี้ได้รับการตอบแล้ว แต่ฉันรู้สึกเหมือนว่ามีตัวแปรที่กำหนดไว้ล่วงหน้าทั้งหมดซึ่งไม่ครอบคลุมโดยข้อเท็จจริง ansible_ * หน้าเอกสารนี้ครอบคลุมคำสั่ง (ตัวแปรที่ปรับเปลี่ยนพฤติกรรมของ Ansible) ซึ่งฉันกำลังมองหาเมื่อฉันเจอหน้านี้
ซึ่งรวมถึงคำสั่งกรณีการใช้งานทั่วไปและบางข้อ:
https://github.com/f500/ansible-dumpall
FYI: โครงการ gitHub นี้แสดงวิธีการแสดงรายการ 90% ของตัวแปรในโฮสต์ทั้งหมด ฉันพบว่ามันมีประโยชน์ทั่วโลกมากกว่าคำสั่งโฮสต์เดียว README มีคำแนะนำในการสร้างรายงานสินค้าคงคลังอย่างง่าย มันมีคุณค่ายิ่งกว่าในการใช้งานเมื่อสิ้นสุด playbook เพื่อดูข้อเท็จจริงทั้งหมด ในการแก้ไขข้อบกพร่องลักษณะการทำงานให้ใช้ register:
ผลลัพธ์หายไปสองสามรายการ: - รวมตัวแปรไฟล์ YAML - Extra-vars - จำนวนของ Anars ภายในที่อธิบายไว้ที่นี่: Ansible Behavioral Params