Ansible Facts变量

目录

[Ansible Facts是什么](#Ansible Facts是什么)

查看Facts变量

剧本中使用facts变量

Ansible中的自定义变量

Ansible变量测试


Ansible Facts是什么

  • facts组件是Ansible用于采集被管理机器设备信息的一个功能
  • 用于采集的被控节点的设备信息
  • 主要包含IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等
  • facts变量可以理解为Ansible中的预定义变量
  • facts对我们是很有帮助的,省去了我们好多工作,大大提高了工作效率

查看Facts变量

  • 使用setup模块,用于获取所有facts信息

    常用参数

    复制代码
    filter:用于过滤指定信息

    样例

    通过setup模块查看所有facts信息

    [root@pubserver ~]# cd /root/ansible/
    [root@pubserver ansible]# ansible webservers -m setup

    facts变量是一个大的由{}构成的键值对字典

    在{}中,有很多层级的嵌套。可以通过参数过滤出第一个层级的内容

    [root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_all_ipv4_addresses"
    [root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_bios_version"
    [root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_memtotal_mb"
    [root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_hostname"
    [root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_mem*"

剧本中使用facts变量

  • 剧本中可以使用debug模块打印变量信息

  • 剧本中默认有Gathering Facts的任务,收集到Facts信息后可以使用该模块打印

  • 剧本中调用变量格式:{{ 变量名 }}

    常用参数

    复制代码
    msg:打印变量值,格式为:{{ 变量名 }}
    var:打印变量值,格式为:变量名

    样例

    命令行

    [root@pubserver ansible]# ansible webservers -m debug #默认返回值为"Hello World!"

    剧本

    [root@pubserver ansible]# vim debug1.yml

    • name: test debug
      hosts: webservers
      tasks:
      • name: test debug msg
        debug:
        msg: "hostname: {{ ansible_hostname }}; mem: {{ ansible_memtotal_mb }}"
        [root@pubserver ansible]# ansible-playbook debug1.yml

    #扩展用法
    [root@pubserver ansible]# vim debug2.yml

    • name: test debug
      hosts: webservers
      tasks:
      • name: test debug var
        debug:
        var: ansible_hostname, ansible_bios_version
        [root@pubserver ansible]# ansible-playbook debug2.yml

Ansible中的自定义变量

通过变量的使用可以让剧本更加灵活,多次运行剧本的时候只需要调整变量名即可

Ansible支持十几种变量定义方式

Ansible变量定义的位置,下列变量优先级从低到高

  • role defaults :roles defaults目录下的变量
  • inventory vars:inventory文件中定义的变量
  • inventory group_vars:inventory文件组的变量
  • inventory host_vars:inventory文件主机的变量
  • playbook group_vars:剧本中组的变量
  • playbook host_vars:剧本中主机的变量
  • host facts:事实变量
  • play vars:vars定义的变量
  • play vars_prompt:vars_prompt定义的变量
  • play vars_files:vars_files导入的变量
  • registered vars:注册变量
  • role and include vars:roles中单独定义的及导入的变量
  • block vars (only for tasks in block):block中定义的变量
  • task vars (only for the task):任务中定义的变量
  • extra vars (always win precedence):命令行指定的变量

Ansible变量测试

  • 主机清单变量

    在inventory文件中定义变量

    主机变量

    [root@pubserver ansible]# vim inventory
    [webservers]
    web[1:2]

    [dbs]
    db1 username="liubei" #定义属于db1主机的变量

    [cluster:children]
    webservers
    dbs
    [root@pubserver ansible]# vim var1.yml

    • name: create user with host vars
      hosts: db1
      tasks:
      • name: test host vars
        user:
        name: "{{ username }}"
        state: present
        [root@pubserver ansible]# ansible-playbook var1.yml #运行剧本
        [root@pubserver ansible]# ansible db1 -a "id liubei" #测试结果
        db1 | CHANGED | rc=0 >>
        uid=1000(liubei) gid=1000(liubei) groups=1000(liubei)
        [root@pubserver ansible]#

    组变量

    [root@pubserver ansible]# vim inventory
    [webservers]
    web[1:2]

    [dbs]
    db1 username="liubei"

    [cluster:children]
    webservers
    dbs

    [webservers:vars] #定义属于组的变量,:vars是固定格式
    username="guanyu"
    [root@pubserver ansible]# vim var2.yml

    • name: create user with group vars
      hosts: webservers
      tasks:
      • name: test group vars
        user:
        name: "{{ username }}"
        state: present
        [root@pubserver ansible]# ansible-playbook var2.yml #运行剧本
        [root@pubserver ansible]# ansible webservers -a "id guanyu" #验证结果
        web1 | CHANGED | rc=0 >>
        uid=1041(guanyu) gid=1041(guanyu) groups=1041(guanyu)
        web2 | CHANGED | rc=0 >>
        uid=1041(guanyu) gid=1041(guanyu) groups=1041(guanyu)
  • 剧本变量

    在Playbook中定义变量

    变量矩阵

    [root@pubserver ansible]# vim var3.yml

    • name: create user with play vars
      hosts: webservers
      vars: #剧本中定义变量
      username: "zhangfei" #定义变量
      password: "123456" #定义变量,数字作为密码必须用引号,表示字符串
      tasks:
      • name: test play vars
        user:
        name: "{{ username }}"
        password: "{{ password|password_hash('sha512')}}"
        state: present
        [root@pubserver ansible]# ansible-playbook var3.yml

    变量文件

    [root@pubserver ansible]# vim fvars.yml

    username: "lvbu"
    password: "654321"
    [root@pubserver ansible]# vim var4.yml

    • name: create user with vars files
      hosts: webservers
      vars_files: fvars.yml #调用定义变量的文件
      tasks:
      • name: test vars file
        user:
        name: "{{ username }}"
        password: "{{ password | password_hash('sha512')}}"
        state: present
        [root@pubserver ansible]# ansible-playbook var4.yml #运行剧本
        [root@pubserver ansible]# ansible webservers -a "id lvbu" #验证结果
        web2 | CHANGED | rc=0 >>
        uid=1043(lvbu) gid=1043(lvbu) groups=1043(lvbu)
        web1 | CHANGED | rc=0 >>
        uid=1043(lvbu) gid=1043(lvbu) groups=1043(lvbu)
  • Facts变量

    调用Facts变量

    一定要开启Facts信息收集,gather_facts: yes

    [root@pubserver ansible]# vim var5.yml

    • name: copy file with facts
      hosts: webservers
      tasks:
      • name: use facts
        copy:
        content: "hostname: {{ ansible_hostname }}\nbios_version: {{ ansible_bios_version }}"
        dest: /tmp/facts.txt
        [root@pubserver ansible]# ansible-playbook var5.yml
        [root@pubserver ansible]# ansible webservers -a "cat /tmp/facts.txt"
        web2 | CHANGED | rc=0 >>
        hostname: web2
        bios_version: rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org
        web1 | CHANGED | rc=0 >>
        hostname: web1
        bios_version: rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org
相关推荐
IT成长日记6 小时前
Ansible命令行模式常用模块使用案例(三)
linux·ansible·自动化运维·ad-hoc 模式)
遇见火星4 天前
OpenEuler-22.03-LTS上利用Ansible轻松部署MySQL 5.7
mysql·ansible·openeuler
IT专家-大狗4 天前
Ansible 如何使用 Playbook 批量部署应用?
ansible
chairon4 天前
Ansible相关工具:ansible-doc、ansible
linux·运维·服务器·正则表达式·ansible
Matthew5475 天前
关于CentOS的初始优化和基于Gitlab-CI的Ansible-Playbook自动优化
ansible
大囚长7 天前
deepseek+ansible实现AI自动化集群部署
人工智能·自动化·ansible
IT成长日记7 天前
Ansible运行原理揭秘:如何用YAML脚本掌控数服务器?
运维·服务器·ansible·架构与原理
博同学7 天前
node-exporter pprof漏洞处理(ansible批量修复)
ansible·pprof
楠奕9 天前
国产ARM主机安装Ansible
arm开发·ansible