管理事实(RH294)

事实简介

Ansible事实是指Ansible在受管主机上自动检测到的变量

事实中含有与主机相关的信息,可以像play中的常规变量,条件,循环等其他语句那样使用

受管主机收集的事实有以下部分

  1. 主机名称

  1. 内核版本

  1. 网络接口

  1. IP地址

  1. 操作系统版本

  1. 环境变量

  1. CPU数量

  1. 可用内存

  1. 可用磁盘空间

这些事实可以方便检索受管主机的状态并且根据状态确定要执行的操作

例如

根据含有受管主机当前内核版本的事实运行条件任务以此来重启服务器

根据通过事实报告的可用内存来自定义MySQL配置文件

收集事实

一般来说,每个play在执行第一个任务之前就会自动运行setup模块来收集事实

我们可以使用一些模块来查看和显示收集到的事实

debug模块

使用debug模块来显示ansible_facts变量值

  - name: Fact dump
    hosts: all
    tasks:
        - name: print all facts
          debug:
            var: ansible_facts

创建该任务之后使用ansible-playbook运行

Ansible事实作为变量注入

Ansible事实的几个例子

事实

变量

短主机名

ansible_facts['hostname']

完全限定的域名

ansible_facts['fqdn']

主要IPv4地址

ansible_facts['default_ipv4']['address']

所有网络接口的名称列表

ansible_facts['interfaces']

/dev/vda1磁盘分区的大小

ansible_facts['devices']['vda']['partitions']['vda1']['size']

DNS服务器列表

ansible_facts['dns']['nameservers']

当前运行的内核的版本

ansible_facts['kernel']

简单的使用一下

---
    - hosts: all
      tasks:
      - name: print various ansible facts
        debug:
            msg: >
                the default IPV4 address of {{ ansible.facts.fqdn }}
                is {{ ansible_facts.default_ipv4.address }}

在playbook中使用事实时,Ansible将事实的变量名动态替换为对应的值

关闭事实的自动收集

在playbook模块的开头 将gather_facts 关键字设置为no

---
- name: This play gathers no facts automatically
  hosts: large_farm
  gather_fact: no

创建自定义事实

管理员可以创建自定义事实并且存储到受管主机上,将这些自定义的事实整合到setup模块在受管主机上运行时收集的标准事实列表中。

静态文件

自定义事实在静态文件中定义,格式可以为INI文件或采用JSON

默认情况下setup模块从受管主机的/etc/ansible/facts.d目录下的文件和脚本中加载自定义事实

各个文件或者脚本名称必须是以 .fact结尾才能被识别使用

采用INI格式编写静态自定义事实文件
[package]
web_package = httpd
db-package = mariadb-server

[users]
user1 = joe
user2 = jane
采用JSON格式
{
    "package": {
        "web_package": "httpd"
        "db_package": "mariadb-server"
    }
    "users": {
        "user1": "joe"
        "user2": "jane"
    }
}

取得其中值的方法也很简单

假设有上述的文件

其ansible_facts.ansible_local['custom']['users']['user1']就是joe

动态文件

动态自定义事实脚本必须输出JSON格式的事实,且必须是可执行文件

管理事实实验

1.执行命令setup 收集所有的事实

ansible webserver -m setup

2.创建事实文件 定义要在servera上安装的软件包和要启动的服务

vimcustom.fact

[general]
package =httpd
service =httpd
state =started
enabled =true

3.创建playbook 生成远程目录并将上述的事实文件保存到该目录

vim setup_facts.yml

---
  - name: install remote facts
    hosts: webserver
    vars:
        remote_dir: /etc/ansible/facts.d
        facts_files: custom.fact
    tasks:
      - name: create the remote directory
        file:
            state: directory
            recurse: yes
            path: "{{ remote_dir }}"
        - name: install the new facts
        copy:
            src: "{{ facts_file }}"
            dest: "{{ remote_dir }}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值