Ansible中的facts(事实)定义

1、事实包含的内容

主机名称、内核版本、网络接口、IP地址等

2、事实查看

2.1 命令行中可用 ansible localhost -m setup 对localhost主机的事实进行查看,

##显示当前主机事实
ansible localhost -m setup
localhost | SUCCESS => {              ##事实结果
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.25.254.100", 
            "192.168.122.1"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::20c:29ff:fed8:6f74"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "07/29/2019", 
        "ansible_bios_version": "6.00", 
....

2.2 playbook中可用变量(ansible_facts)的方式进行查看

#编写事实查看
  1 ---
  2 - name: Fact
  3   hosts: all
  4   tasks:
  5     - name: show fact
  6       debug:
  7         var: ansible_facts   ##ansible_fatcs 可以查看定义主机的事实

#用playbook直接调用剧本即可
[root@contral fact]# ansible-playbook fact.yml 

PLAY [Fact] ***************************************************************************

TASK [Gathering Facts] ****************************************************************
ok: [servera.linux.com]

TASK [show fact]              ##显示事实内容
**********************************************************************
ok: [servera.linux.com] => {
    "ansible_facts": {
        "_facts_gathered": true, 
        "all_ipv4_addresses": [
            "172.25.254.200", 
            "192.168.122.1"
        ], 
.....

3、事实调用

根据事实变量查看所拥有的事实,此时查看的事实是以JSON格式显示的,在调用时可以使用字典的方式进行调用

##编写剧本 
  1 ---
  2 - name: Fact
  3   hosts: all
  4   tasks:
  5     - name: show fact
  6       debug:
  7         var: ansible_facts
  8 - hosts: all
  9   tasks:
 10     - name: Print ansible facts
 11       debug:
 12         msg: 
 13             The IPV4 address of {{ ansible_facts.fqdn }}   ##以字典变量的方式调用
 14             is {{ ansible_facts.all_ipv4_addresses }}


##调用结果   
PLAY [all] ****************************************************************************

TASK [Gathering Facts] ****************************************************************
ok: [servera.linux.com]

TASK [Print ansible facts]          ##debug结果
************************************************************
ok: [servera.linux.com] => {
    "msg": "The IPV4 address of servera.linux.com is [u'172.25.254.200', u'192.168.122.1']"
}

                                                           

4、魔法变量

常见魔法变量:

       hostvars:包含受管主机的变量,可以用于获取另一台受管主机的变量的值

       group_names:列出当前受管主机所属的所有组

       groups:列出清单中的所有组和主机

       inventory_hostname:包含清单中配置的当前受管主机的主机名称

##列出清单中配置的当前变量的名称
  1 ---
  2 - name: Fact
  3   hosts: all
  4   tasks:
  5     - name: show fact
  6       debug:
  7         var: inventory_hostname

##剧本调用
[root@contral fact]# ansible-playbook fact.yml 

PLAY [Fact] ***************************************************************************

TASK [Gathering Facts] ****************************************************************
ok: [servera.linux.com]

TASK [show fact] **********************************************************************
ok: [servera.linux.com] => {
    "inventory_hostname": "servera.linux.com"
}

5、编写自定义事实

自定义事实有两种:INI格式和JSON格式;其中INI格式更方便人的阅读,JSON格式更方便机器的阅读

##INI格式
[packages]
web_pkg = httpd
db_pkg = mariadb-server

[users]
user1 = wondoes
user2 = linux


##JSON格式
{
	"packages":{
		"web_packages":"httpd",
		"db_packages":"mariadb"  
	},
	"users":{
		"user1":"linux",
		"user2":"redhat"  
	}  
}

定义事实时编写的事实文件必须以.fact结尾,自定义事实的使用和普通事实的使用方式是相同的。

6、关闭事实收集

事实的收集会浪费运行时间,在某些情况下,我们并没有用到事实变量,所以此时可以关闭事实的收集,以提高效率。

关键字:gather_facts:no

##关闭事实收集
  1 ---
  2 - name: Configure User
  3   hosts: servera.linux.com
  4   gather_facts: no              ##no关闭
  5   tasks:
  6     - name: Linux user
  7       user:
  8         name: linux
  9         uid: 1000
 10         state: present
 11 ...

剧本结果:

[root@contral fact]# ansible-playbook user.yml 

PLAY [Configure User] *****************************************************************

##这里没有事实收集的过程,直接进行任务

TASK [Linux user] *********************************************************************
ok: [servera.linux.com]

PLAY RECAP ****************************************************************************
servera.linux.com          : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

7、事实示例

事实文件:test.fact

##编写事实文件:test.fact 
  1 [webserver]
  2 package = httpd
  3 service = httpd
  4 state = started
  5 enabled = true

编写playbook进行调用(这里虽然代码看起来过于冗余,但复用性很高)

##编写主playbook,安装并启动Apache服务  
  1 ---
  2 - name: Install Apache and starts
  3   hosts: web
  4   tasks:
  5     - name: Install Packages
  6       yum:
  7        name: "{{ ansible_facts['ansible_local']['test']['webserver']['package'] }}"
  8        state: latest
  9     - name:
 10       service:
 11         name: "{{ ansible_facts['ansible_local']['test']['webserver']['service'] }}    "
 12         state: "{{ ansible_facts['ansible_local']['test']['webserver']['state'] }}"
 13         enabled: "{{ ansible_facts['ansible_local']['test']['webserver']['enabled']     }}"
                                         

对执行结果进行检测:

##结果检测
[root@contral fact]# ansible servera.linux.com -m command -a "systemctl status httpd"
servera.linux.com | CHANGED | rc=0 >>
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-04-11 19:07:02 CST; 14h ago
     Docs: man:httpd.service(8)
  Process: 43260 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
....

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ansible factsAnsible在执行任务时自动收集的有关被控主机的信息。这些信息包括操作系统类型、网络配置、硬件信息等。\[2\]在Ansible,可以通过预定义facts获取这些信息,也可以手动为某个主机定制本地facts。本地facts存放在被控端的/etc/ansible/facts.d目录下,可以是ini格式或json格式的文件。加载本地facts后,可以通过ansible_local变量来访问这些定制的信息。\[1\] 所以,ansible_facts是指Ansible在执行任务时收集到的有关被控主机的信息,包括预定义facts和本地定制的facts。这些信息可以在Ansible的任务使用,以便根据主机的特定情况进行操作。 #### 引用[.reference_title] - *1* *3* [[Ansible系列⑦]ansible fact变量](https://blog.csdn.net/qq_43714097/article/details/127731447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Ansible facts详解](https://blog.csdn.net/vipygd/article/details/106607112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值