ansible——ansible的配置文件

一、ansible的inventory文件

1、什么是inventory文件

inventory文件定义了ansible管理的主机,说白了就是inventory文件中的内容是被管理的主机

inventory文件分为两种,一种是静态的inventory文件,一种是动态inventory文件

静态的inventory文件,其实就是txt文本记录的被管理主机。只要不修改这个静态inventory文件,被管理的主机就不会发生变化

动态的inventory文件指动态的输出被管理主机。动态inventory文件的原理就是一个脚本,大部分都是python的脚本,动态inventory文件能连接到某个管理系统的节点信息数据库,并将节点信息以特定的格式输出(绝大多数情况下是json),也就是说动态inventory文件输出的主机信息是管理系统节点信息数据库的内容。也就是说节点信息数据库的变化就会导致inventory文件输出的被管理主机数量不同。所以称之为动态inventory文件

2、配置inventory

配置inventory有五种方式,可以根据需求进行配置

1、配置主机名

需要提前配置好/etc/hosts文件

bash 复制代码
[root@control ~]# cat inventory 
manage1
manage2
manage3

2、配置ip

bash 复制代码
[root@control ~]# cat inventory 
192.168.100.137
192.168.100.138
192.168.100.139

3、配置组

bash 复制代码
[root@control ~]# cat inventory 
[storage1]
manage1
manage2
manage3

[stroage2]
manage1
manage2

[storage3]
manage1
manage3

4、嵌套组

前提是需要配置组

bash 复制代码
[root@control ~]# cat inventory 
[storage1]
manage1
manage2
manage3

[stroage2]
manage1
manage2

[storage3]
manage1
manage3

[computer:children]
storage1
storage2

NAME:children\]:这个下面定义的是上面组的内容 #### 5、定义主机范围 假设像定义192.168.0.0\~192.168.0.255和192.168.1.0\~192.168.1.255,总共512个主机就可以使用定义范围的方式 ```bash [root@control ~]# cat inventory 192.168.0.[0:255] 192.168.1.[0:255] manage[1:100] server[a:z] ``` 将主机加入到组内,主机可以重复,这样,ansible就可以控制一个组内的主机进行操作 ### 3、指定配置文件,并查看 ```bash [root@control ~]# ansible -i /root/inventory storage1 --list-host [WARNING]: * Failed to parse /root/inventory with yaml plugin: We were unable to read either as JSON nor YAML, these are the errors we got from each: JSON: Expecting value: line 1 column 1 (char 0) Syntax Error while loading YAML. did not find expected The error appears to be in '/root/inventory': line 7, column 1, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: ## 第二种配置方式 192.168.100.137 ^ here [WARNING]: * Failed to parse /root/inventory with ini plugin: /root/inventory:27: Section [computer:children] includes undefined group: stroage1 [WARNING]: Unable to parse /root/inventory as an inventory source [WARNING]: No inventory was parsed, only implicit localhost is available hosts (3): manage1 manage2 manage3 ``` * `-i`:指定inventory文件的路径 * `storage1`:表示storage主机组 * `--list--host`:表示列出你想查看的主机 由于在你的ansible控制节点里面可能有多个Inventory文件,所以使用正确的Inventory文件就非常有必要。当然还有其他方式可以指定Inventory文件的路径,但是-i参数的优先级是最高的。 `/etc/ansible/hosts`是ansible配置文件指定Inventory默认的文件。如果使用ansible命令不加-i参数,默认就会使用这个Inventory文件。 ## 二、ansible配置文件 ### 1、关于ansible的配置文件 关于ansible的配置文件,有一些非常重要的知识需要掌握 ansible的配置文件不是全局的,任何用户都可以有自己的ansible配置文件 ansible的配置文件在安装的是时候,就有一个缺省的配置文件 ```bash [root@control ~]# rpm -qf /etc/ansible/ansible.cfg ansible-core-2.14.9-1.el9.x86_64 ``` 如果你不想使用这个安装自带的ansible配置文件,你可以自己创建 一般在生产环境中,都是创建一个你自己的目录,然后再该目录下创建自己的ansible配置文件 ### 2、查看当前正在使用的配置文件 ```bash [root@control ~]# ansible --version ansible [core 2.14.9] config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.9/site-packages/ansible ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections executable location = /usr/bin/ansible python version = 3.9.18 (main, Sep 7 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3) jinja version = 3.1.2 libyaml = True [root@control ~]# ansible --version | grep cfg config file = /etc/ansible/ansible.cfg ``` ### 3、配置文件的级别 ansible的配置文件有四种可以指定,四种指定方式优先级是不同的、 1、如果没有其他任何ansible配置文件,默认就会使用`/etc/ansible/ansible.cfg` ```bash [root@control ~]# ansible --version | grep cfg config file = /etc/ansible/ansible.cfg ``` 2、家目录下的`.ansible.cfg`优先级高于`/etc/ansible/ansible.cfg` ```bash [root@control ~]# touch ~/.ansible.cfg [root@control ~]# ansible --version | grep cfg config file = /root/.ansible.cfg ``` 3、当前目录下的`ansible.cfg`优先级高于`.ansible.cfg` ```bash [root@control opt]# pwd /opt [root@control opt]# touch ansible.cfg [root@control opt]# ansible --version | grep cfg config file = /opt/ansible.cfg ``` 4、ANSIBLE_CONFIG变量指定的配置文件优先级最高 ```bash [root@control opt]# touch /tmp/ansible.cfg [root@control opt]# export ANSIBLE_CONFIG=/tmp/ansible.cfg [root@control opt]# ansible --version | grep cfg config file = /tmp/ansible.cfg ``` ### 4、配置文件的基本参数 #### 1、生成配置文件 当没有头绪的时候,可以查看实例文件 ```bash [root@control ~]# cat /etc/ansible/ansible.cfg # Since Ansible 2.12 (core): # To generate an example config file (a "disabled" one with all default settings, commented out): # $ ansible-config init --disabled > ansible.cfg # # Also you can now have a more complete file by including existing plugins: # ansible-config init --disabled -t all > ansible.cfg # For previous versions of Ansible you can check for examples in the 'stable' branches of each version # Note that this file was always incomplete and lagging changes to configuration settings # for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg ``` 在这个版本中,这个目录里面没有默认的配置文件,但是这个文件中说可以使用`ansible-config init --disabled > ansible.cfg`生成一个默认的配置文件 使用命令自动生成一个配置文件 ```bash [root@control ~]# ansible-config init --disabled > ansible.cfg ``` #### 2、查看配置文件 > cfg类型的文件中一般使用`#`和`;`开头,表示注释 过滤掉注释和多余的空行 ```bash [root@control ~]# grep -v "#" ansible.cfg | grep -v "^$" | grep -v ";" [defaults] [privilege_escalation] [persistent_connection] [connection] [colors] [selinux] [diff] [galaxy] [inventory] [netconf_connection] [paramiko_connection] [jinja2] [tags] ``` ansible的配置文件中是以sector作为划分的。每个方括号就表示一个sector #### 3、主要参数说明 主要使用的有两个组,\[defaults\]和\[privilege_escalation

bash 复制代码
[defaults]
inventory=/etc/ansible/hosts
##  表示该配置文件默认使用的inventory文件是/etc/ansible/hosts
remote_user=user
## 表示给配置文件使用user用户来进行ssh连接
ask_pass=False
## 表示使用ergou用户去ssh连接的时候不提示输入密码
bash 复制代码
[privilege_escalation]
## 如果你remote_user使用的是root用户,就不需要配置提权部分,如果你的remote_user不是root,但是不需要做特权操作,那么也可以不用配置这部分。如果是普通用户,但是需要做特权操作,那么就需要配置这部分。
become=true
## true表示需要提权,false就表示不需要提权
become_method=sudo
## 表示提权的方式是sudo提权
become_user=root
## 表示提权到root用户:
become_ask_pass=false
#false表示进行sudo操作的时候不提示输入密码,true表示需要输入密码

"不是任何用户作为remote_user,且配置了提权就能真的提权。而必须要在被管理主机里面配置sudoers文件,让这个remote_user有提权的能力才可以。"

ssh可以设置免密登陆,避免remote_user使用ssh登陆的时候需要输入密码

sudoers文件中也可以设置sudo命令不提示输入密码

相关推荐
virelin_Y.lin23 分钟前
系统与网络安全------弹性交换网络(2)
网络·安全·web安全·链路聚合·lacp·eth-trunk
天狼122228 分钟前
第5章-1 优化服务器设置
运维·服务器·adb
浪裡遊3 小时前
Linux常用指令
linux·运维·服务器·chrome·功能测试
SugarPPig3 小时前
PowerShell 查询及刷新环境变量
服务器
EasyDSS6 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
我的作业错错错6 小时前
搭建私人网站
服务器·阿里云·私人网站
rufeike6 小时前
UDP协议理解
网络·网络协议·udp
王景程6 小时前
如何测试短信接口
java·服务器·前端
江理不变情7 小时前
海思ISP调试记录
网络·接口隔离原则
微网兔子7 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏