Ansible自动化运维之配置清单Inventory
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible自动化运维之配置清单Inventory相关的知识,希望对你有一定的参考价值。
Ansible配置清单Inventory
Ansible部署
简单介绍、安装、简单部署可点击查看之前文章。
Inventory简介
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts。可以使用 -i
选项指定inventory文件定义主机和组。
Ansible配置文件的优先级
1、首先找执行ansible命令的当前目录中,是否有ansible.cfg文件
2、如果找不到,再找当前用户的家目录下是否有ansible.cfg
3、如果还找不到,就使用全局配置文件/etc/ansible/ansible.cfg
要检查当前使用的是哪个配置文件可以使用ansible --version
命令,会显示配置文件路径
Ansible命令常用参数
参数 功能
-m 要执行的模块,默认为command
-a 指定模块的参数
-u ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,–become 变成那个用户身份,不提示密码
-k 提示输入ssh登录密码,当使用密码验证的时候用
-s sudo运行
-U sudo到哪个用户,默认为root
-K 提示输入sudo密码,当不是NOPASSWD模式时使用
-C 只是测试一下会改变什么内容,不会真正去执行
-c 连接类型(default=smart)
-f fork多少进程并发处理,默认为5个
-i 指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对已匹配的主机中再过滤一次
-list-host 只打印有哪些主机会执行这个命令,不会实际执行
-M 要执行的模块路径,默认为/usr/share/ansible
-o 压缩输出,摘要输出
–private-key 私钥路径
-T ssh连接超时时间,默认是10秒
演示环境
三台虚拟机:rhel7.6的OS
server1(controller) 192.168.122.11 ansible管理端
server2(node1) 192.168.122.12 远程主机
server3(node1) 192.168.122.13 远程主机
Anisble参数使用简单示例
由于root权限调用node1权限太大,所以我们一般用普通用户的身份进入受控节点,以普通用户身份使用Ansible,相当于构建了用户级Ansible操作环境
创建一个普通用户,以普通用户身份使用ansible,并创建一个目录,拷贝一份配置文件
我们之后执行命令就在当前目录下,ansible会优先使用该目录下的配置文件
配置文件内容如下:
[devops@server1 ansible]$ cat ansible.cfg
[defaults]
inventory = ./hosts #设置管理主机的清单为当前目录下的hosts文件
编辑全局的主配置文件,将添加的远程主机删掉
[root@server1 ansible]# vim /etc/ansible/hosts
在当前目录下编辑主机清单文件,内容如下:
[root@server1 ansible]# vim hosts
#将server2和server3分为两个组
[testserver2]
server2 #主机解析已做好,若没做好需要到/etc/hosts下做好解析或者这里写ip也可以
[testserver3]
server3
回到上级目录,变更目录属主,以我们刚创建的devops用户身份登录
在两个远程主机也创建devops用户并给密码
[root@server2 ~]# useradd devops
[root@server2 ~]# echo devops | passwd --stdin devops
Changing password for user devops.
passwd: all authentication tokens updated successfully.
[root@server3 ~]# useradd devops
[root@server3 ~]# echo devops | passwd --stdin devops
Changing password for user devops.
passwd: all authentication tokens updated successfully.
做devops用户的免密,两个远程主机都要做,因为ansible是通过ssh连接的,如果不做免密,那每次都要输入密码很麻烦
测试调用ping模块成功!
可以加-k参数询问ssh的密码,-m表示模块,使用ping这个模块连接,出现pong回馈说明,成功连接
可以-a指定动作,查看挂载情况
指定创建文件
想忽略提示警告按照提示编辑配置文件
[devops@server1 ansible]$ vim ansible.cfg
加上如图参数
可以查看,文件创建成功
在这我改了下主机名和解析,配置中的主机名也一并修改
因为权限问题,在mnt下创建文件被拒绝,devops普通用户是没有权力执行的
到node1节点赋予devops用户所有权力
[root@node1 ~]# visudo
devops ALL=(ALL) ALL
加入–become参数,表示使用sudo执行命令,才能真正提权,而不是直接执行,还需搭配-K使用,-K输入sudo的密码。现在因为有权限创建文件成功
如果不想每次输入sudo密码,可以到node1修改设置
[root@node1 ~]# visudo
devops ALL=(ALL) NOPASSWD:ALL
修改前:
修改后:
构建Anisble清单
默认清单是用hosts文件,如果自己创建一个清单文件,无法读取,需要使用-i参数指定清单文件查看清单
可以设定嵌套清单,big大组包括test1和test2
通过指定主机名称或IP的范围可以简化Ansible主机清单(这个清单里包含了使用域名的和ip的)
ansible命令指定清单的正则表达式
* ##所有
##172.25.254.*
##192*
: ##逻辑或
##test:linux
##172.25.254.100:172.25.254.200
:& ##逻辑与
##test1:&linux
##主机即在test1清单也在tets2清单中
:! ##逻辑非
##test1:!linux
##在test1中不在test2中
~ ##以关键字开头
~(str1|str2) ##以条件1或者条件2开头
下图意思依次是:
列出172*,可以列出172这个组,也可以列出172的清单;
列出带172或192的;
列出在test1组中,也在test2组中的;
列出172开头的或者192开头的
Ansible配置文件参数详解
常用配置参数 | 含义 |
---|---|
#[default] | 基本信息设定 |
inventory= | 指定清单路径 |
remote_user= | 在受管主机上登陆的用户名称,未指定使用当前用户 |
ask_pass= | 是否提示输入SSH密码,如果公钥登陆设定为false |
library= | 库文件存放目录 |
local_tmp= | 本机临时命令执行目录 |
remote_tmp= | 远程主机临时py命令文件存放目录 |
forks= | 默认并发数量 |
host_key_checking= | 第一次连接受管主机时是否要输入yes建立host_key |
sudo_user= | 默认sudo用户 |
ask_sudo_pass= | 每次在受控主机执行ansible命令时是否询问sudo密码 |
module_name= | 默认模块,默认使用command,可以修改为shell |
log_path= | 日志文件路径 |
[privilege_escalation] | 身份信息设定 |
become= | 连接后是否自动切换用户 |
become_method= | 设定切换用户的方式,通常用sudo |
become_user= | 在受管主机中切换到的用户,通常为root |
become_ask_pass | 是否需要为become_method提示输入密码,默认为false |
inventory中添加清单路径
再次执行,可以列出
remote_tmp和local_tmp是远端的本地的临时文件路径。当执行ansible后,主机生成python临时脚本,ssh发送到受控主机,受控主机执行完删除该临时文件,主机也会删除临时文件
打开ask_pass后,每次执行ansible时询问连接用户密码
如果清空了~/.ssh/known_hosts文件,那么连接时,连接受控主机会询问是否接受受控主机发送过来的身份认证key,会要求输入yes,主机数量多时就不方便了。所以修改配置文件中的host_key_checking参数,关闭,不再询问是否接受
默认使用的模块是command,可以改为ping
在远程主机中用devops用户执行指令时,转换用户身份;转换用户身份执行命令时,用sudo调用;转换成root用户;执行sudo指令时,不提示输入密码
如果控制端是用root用户的身份执行需要在配置文件加上remote_user=devops
,我是devops用户所以不用,如下文件创建成功说明使用的是root身份
以上是关于Ansible自动化运维之配置清单Inventory的主要内容,如果未能解决你的问题,请参考以下文章
Ansible自动化运维之playbook详解(含yaml介绍)及ansible的加密控制