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
相关推荐
风清再凯3 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机3 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星16 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥16 天前
ANSIBLE
ansible
码农101号16 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号16 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信17 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li17 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@20 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91923 天前
Ansible
ansible