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身份
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值