当前位置: 首页 > news >正文

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 

相关文章:

  • 相对论之光速
  • IP地址分配
  • Python 中用T = TypeVar(“T“)这个语法定义一个“类型变量”,属于类型提示系统的一部分
  • Java学习打卡-Day18-ArrayList、Vector、LinkedList
  • Ajax原理笔记
  • JDBC数据库连接池技术详解——从传统连接方式到高效连接管理
  • 零拷贝分析
  • LeetCode热题100JS(49/100)第九天|199|114|105|437|236
  • undo log ,redo log 和binlog的区别?
  • 使用 yum 命令安装 MariaDB 指南
  • 安卓edge://inspect 和 chrome://inspect调试移动设备上的网页
  • 瑞幸需要宇树科技
  • UNION,UNION ALL 的详细用法
  • 【leetcode hot 100 437】路径总和Ⅲ
  • Typora 使用教程(标题,段落,字体,列表,区块,代码,脚注,插入图片,表格,目录)
  • 什么是广播系统语言传输指数 STIPA
  • CCF CSP 第30次(2023.05)(1_仓库规划_C++)
  • 关于运行 npm run serve/dev 运行不起来,node_modules Git忽略不了等(问题)
  • 冰羚杂谈(四)上下游对齐工作节奏
  • 基于SpringBoot+Vue3实现的宠物领养管理平台功能一
  • 事关心脏健康安全,经导管植入式人工心脏瓣膜国家标准发布
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • 上海浦东机场1号、2号航站楼均推出国内出发安检24小时服务
  • 默茨首访聚焦欧洲,欲推欧洲防务自主
  • 游戏论|暴君无道,吊民伐罪——《苏丹的游戏》中的政治
  • 国家统计局:4月份居民消费价格同比下降0.1%