Ansible自动化运维之配置清单Inventory

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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——安装配置

Ansible自动化运维之playbook详解(含yaml介绍)及ansible的加密控制

自动化运维之Ansible

心领神会--自动化运维之Ansible的核心概念,安装配置Ansible并学会使用其常见模块。

自动化运维之Ansible服务部署

自动化运维之Ansible剑客参上