Ansible Facts 变量详解
Ansible Facts 变量详解与使用案例
主机规划
添加用户账号
说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u -d /app yun && echo '' | /usr/bin/passwd --stdin yun
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod /app/
Ansible 配置清单Inventory
之后文章都是如下主机配置清单
[yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_key
# 方式1、主机 + 端口 + 密钥
[manageservers]
172.16.1.180: [proxyservers]
172.16.1.18[:]: # 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=
Facts 概述
Ansible Facts 是 Ansible 在被托管主机上自动收集的变量。它是通过在执行 Ad-Hoc 以及 Playbook 时使用 setup 模块进行收集的,并且这个操作是默认的。
因为这个收集托管主机上的 Facts 比较耗费时间,所以可以在不需要的时候关闭 setup 模块。收集的 Facts 中包含了托管主机特有的信息,这些信息可以像变量一样在 Playbook 中使用。
收集的 Facts 中包含了以下常用的信息:
主机名、内核版本、网卡接口、IP 地址、操作系统版本、环境变量、CPU 核数、可用内存、可用磁盘 等等……。
使用场景:
- 通过 facts 检查 CPU,生成对应的 Nginx 配置文件
- 通过 facts 检查内存情况,定义不同的 MySQL 配置文件或 Redis 配置文件
- 通过 facts 检查主机 hostname,生成不同的 zabbix 配置文件
获取指定受控端的 facts 信息
[yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -m setup -i ./hosts_key
172.16.1.181 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.0.181",
"172.16.1.181"
],
………………
如何在 playbook 中关闭 facts
[yun@ansi-manager object03]$ pwd
/app/ansible_info/object03
[yun@ansi-manager object03]$ cat test_facts.yml
---
# facts 使用
- hosts: proxyservers
# 关闭 facts 变量
gather_facts: no # 这时就不能取到 ansible_hostname、ansible_eth0.ipv4.address、ansible_eth1 ['ipv4']['address'] 变量信息
tasks:
- name: "get ansible facts var"
debug:
msg: "This host name is {{ ansible_hostname }} ,eth0: {{ ansible_eth0.ipv4.address }}, eth1: {{ ansible_eth1['ipv4']['address'] }}"
Facts 案例-获取主机名和网卡信息
获取受控端的主机名,内网地址和外网地址
[yun@ansi-manager object03]$ pwd
/app/ansible_info/object03
[yun@ansi-manager object03]$ ll
total
-rw-rw-r-- yun yun Aug : test_facts.yml
[yun@ansi-manager object03]$ cat test_facts.yml
---
# facts 使用
- hosts: proxyservers tasks:
- name: "get ansible facts var"
debug:
msg: "This host name is {{ ansible_hostname }} ,eth0: {{ ansible_eth0.ipv4.address }}, eth1: {{ ansible_eth1['ipv4']['address'] }}"
#### 上面写了两种方式引用变量,推荐使用后一种引用方式 [yun@ansi-manager object03]$ ansible-playbook -b -i ../hosts_key test_facts.yml PLAY [proxyservers] *********************************************************************************************** TASK [Gathering Facts] ********************************************************************************************
ok: [172.16.1.181]
ok: [172.16.1.182] TASK [get ansible facts var] **************************************************************************************
ok: [172.16.1.181] => {
"msg": "This host name is ansi-haproxy01 ,eth0: 172.16.1.181, eth1: 10.0.0.181"
}
ok: [172.16.1.182] => {
"msg": "This host name is ansi-haproxy02 ,eth0: 172.16.1.182, eth1: 10.0.0.182"
} PLAY RECAP ********************************************************************************************************
172.16.1.181 : ok= changed= unreachable= failed= skipped= rescued= ignored=
172.16.1.182 : ok= changed= unreachable= failed= skipped= rescued= ignored=
Facts 案例-模拟zabbix客户端配置
根据受控端主机名的不同,在受控端生成不同的配置文件
[yun@ansi-manager object03]$ pwd
/app/ansible_info/object03
[yun@ansi-manager object03]$ ll
total
drwxrwxr-x yun yun Aug : file
-rw-rw-r-- yun yun Aug : test_zabbix_agentd.yml
[yun@ansi-manager object03]$ cat file/vars_file.yml # playbook 变量
zabbix_server: 172.16.1.180 [yun@ansi-manager object03]$ cat file/zabbix_agentd_temp.conf.j2 # 模拟 zabbix_agentd 配置文件
# 模拟 zabbix_agentd 配置文件 # zabbix 服务端配置
Server={{ zabbix_server }}
ServerActive={{ zabbix_server }} # zabbix 客户端配置
Hostname={{ ansible_hostname }} [yun@ansi-manager object03]$ cat test_zabbix_agentd.yml # 具体的 yml 文件
---
# zabbix 配置
- hosts: proxyservers
vars_files: ./file/vars_file.yml tasks:
- name: config zabbix_agentd
template:
src: ./file/zabbix_agentd_temp.conf.j2
dest: /tmp/zabbix_agentd_temp.conf [yun@ansi-manager object03]$ ansible-playbook -b -i ../hosts_key --syntax-check test_zabbix_agentd.yml # 语法检测
[yun@ansi-manager object03]$ ansible-playbook -b -i ../hosts_key -C test_zabbix_agentd.yml # 预执行,测试执行
[yun@ansi-manager object03]$ ansible-playbook -b -i ../hosts_key test_zabbix_agentd.yml # 执行
受控端1配置文件查看
[yun@ansi-haproxy01 ~]$ cat /tmp/zabbix_agentd_temp.conf
# 模拟 zabbix_agentd 配置文件 # zabbix 服务端配置
Server=172.16.1.180
ServerActive=172.16.1.180 # zabbix 客户端配置
Hostname=ansi-haproxy01
受控端2配置文件查看
[yun@ansi-haproxy02 ~]$ cat /tmp/zabbix_agentd_temp.conf
# 模拟 zabbix_agentd 配置文件 # zabbix 服务端配置
Server=172.16.1.180
ServerActive=172.16.1.180 # zabbix 客户端配置
Hostname=ansi-haproxy02
———END———
如果觉得不错就关注下呗 (-^O^-) !
Ansible Facts 变量详解的更多相关文章
- 3.3、Ansible命令参数详解
0.ansible 命令参数详解: [root@localhost ~]# ansible Usage: ansible <host-pattern> [options] Options: ...
- mysql show variables系统变量详解
mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解
asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...
- Maya 常用环境变量详解
Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- asp.net core环境变量详解
环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...
- 4、Ubuntu系统环境变量详解
参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...
- Nginx基础篇(2)- Nginx基本配置文件和变量详解
Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...
- 如何查找YUM安装的JAVA_HOME环境变量详解
如何查找YUM安装的JAVA_HOME环境变量详解 更新时间:2017年10月27日 09:44:56 作者:铁锚 我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...
随机推荐
- 寻找一把进入 Alibaba Sentinel 的钥匙(文末附流程图)
经过前面几篇文章的铺垫,我们正式来探讨 Sentinel 的 entry 方法的实现流程.即探究进入 Alibaba Sentinel 核心的一把钥匙. @ 目录 1.SphU.entry 流程分析 ...
- k8s 集群管理和微服务 适合做啥
k8s 集群管理和微服务 适合做啥 都知道k8s是集群 适合微服务 有很多教程 但你可以先了解他能干啥 traefix 是负载均衡工具 k8s 适合部署无状态依赖的微服务 可以按需求开启多个微服务 管 ...
- Java实现自定义数组及其方法
自定义数组 主要功能有增.删(根据索引,根据值).改.查扩容等功能 package array; public class CustomArray { private int[] array = nu ...
- 粘包处理现象及其解决方案——基于NewLife.Net网络库的管道式帧长粘包处理方法
[toc] #1.粘包现象 每个TCP 长连接都有自己的socket缓存buffer,默认大小是8K,可支持手动设置.粘包是TCP长连接中最常见的现象,如下图 socket缓存中有5帧(或者说5包)心 ...
- ANTLR随笔(三)
ANTLR基本语法 前面已经简单介绍了ANTLR以及怎么安装和测试. 同学们应该大概清楚ANTLR的使用场景,但是对于关键步骤,怎么编写一个语法文件并没有详细介绍,这篇笔记主要详细讲解一下ANTLR的 ...
- B 雷诺与奴隶主
时间限制 : 5000 MS 空间限制 : 524288 KB 问题描述 自从周文武老师在班上吹嘘了"录试"这款游戏之后,PHD同学沉迷于其中无法自拔. "录试&qu ...
- O - 推箱子 HDU - 1254(bfs_box + bfs_man)
O - 推箱子 HDU - 1254 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能 ...
- 新建jsp文件,The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误解决方法
新建一个jsp文件后,有一个错误,The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...
- flink 一分钟入门篇
1. 业务说:“…… bulabula……,这个需求很简单,怎么实现我不管?” 面对霸气侧漏的业务需求,由于没有大数据知识储备,咱心里没底,咱也不敢问,咱也不敢说,只能静下来默默储备.默默寻觅解决方案 ...
- 根据银行卡号 获取银行名称及银行logo
根据银行卡号码获取银行卡归属地信息接口地址: https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8 ...