清单文件
定义主机清单文件
清单中定义ansible将要管理的一批主机,这些主机也可以分配到组中,以进行集中管理。组中也可以包含子组,一台主机也可以是多个组中的成员。清单还可以设置应用到它所定义的主机和组的变量。
编写主机清单文件
主机清单文件默认存放在/etc/ansible/hosts下,文本编辑方式为INI,定义受控主机有三种方式
1、直接定义
2、组
3、嵌套组
值得注意的是嵌套组的定义格式为 [嵌套组名:children] 这个children是必带的
检验清单
第一种方式
#ansible 组名 --list-hosts
======================注意===============================
默认的两种组名有以下两种
all 主机组含有清单中明确列出的每一个主机
ungrouped 主机组含有清单中明确列出、但不属于任何其他组的每一个主机
=============================================================
第二种方式(图表形式显示)
查看主机组
Ansible-inventory --graph
当然也可以使用自定义的清单文件,只需要加上一个-i 的参数就行
当然若每次执行命令都用-i较为麻烦 于是可以更改默认配置文件
配置文件
那如何查看自己现在的默认配置文件在哪里呢
第一行就是显示的是默认的配置文件在哪里 ansible与其他服务不一样 若有其他设置的话,那么只要执行命令时的路径不同,那么这个默认配置文件就有可能不同
ansible默认配置文件在/etc/ansible/ansible.cfg下 由于现在系统的更新,该配置文件下面只有一些注释,若想要查到到一些示例,需要进行初始化操作一下
然后执行如下命令即可,若不想覆盖可以使用 >>
ansible-config init --disabled > ansible.cfg
ansible配置文件的优先级
执行ansible命令根据所在目录匹配相关ansible配置文件,实践中一般使用ansible命令的目录中创建ansible.cfg文件,此目录中也将包含任何你的ansible项目使用的文件,有清单或者主机清单。
ANSIBLE_CONFIG(ansible环境变量中指向的配置文件)---->./ansible.cfg ---->~/.ansible.cfg ----> /etc/ansible/ansible.cfg
优先匹配ANSIBLE_CONFIG环境变量,其次是匹配当前目录下是否有配置文件,然后是匹配用户家目录下是否有配置文件,最后匹配默认的/etc/ansible/ansible.cfg下
ansible配置文件设置
[defaults]
inventory = ./inventory #主机列表配置文件
library = /usr/share/my_modules #库文件存放目录
forks = 5 #默认并发数5 (同时可以处理5个命令--同时有20个节点主机5个主机执行在5个执行)
sudo_user = root #默认的sudo用户 root
ask_sudo_pass = Ture
ask_pass = false #每次执行ansible命令是否询问ssh密码
remout_port = 22
host_key_checking = False #检查对应服务器的host_key,建议取消注释
log_path = /var/log/ansible.log #ansible日志文件
module_name = command #默认模块,可以改为shell
remote_user = user #要在受管主机上登录的用户名称,没有指定则是当前用户(受管、管控、托管主机的用户名)
remote_tmp = ~/.ansible/tmp #临时的py命令文件存放在远程主机目录
[privilege_escalation] #特权升级
become = true #连接后是否在受管主机上切换用户,默认会切换到root下
become_method = sudo #如何切换用户
become_user = root #受管主机切换到的用户
become_ask_pass = false #是否为become_method提示输入密码,默认为false
```
而特权升级其实就是 控制端若想在受控端执行一些需要特定权限的命令时,不需要加上sudo命令了
Ansible三个命令模块
command,shell,raw这三个模块尽量避免使用,因为都不支持幂等性 (幂等性:简单来讲,就是输入相同,输出相同,无论多少次比如说,确认接口,如果传入订单号,返回确认OK,如果已经确认过了,再次调用确认接口,返回如果还是确认OK,那么这个接口就是满足幂等性.)
command,shell,raw模块的区别
相同点:要求受管主机上安装Python。
不同点:command可以在受管主机上执行shell命令,但是不支持环境变量和操作符(例如 '|', '<', '>', '&')
shell模块调用的/bin/sh指令执行。
raw模块:
不需要受管主机上安装Python,直接使用远程shell运行命令,通常用于无法安装Python的系统(例如网络设备等)。
script模块可以运行shell脚本
练习:
安装并且配置ansible:
1)安装和配置ansible以及ansible控制节点server.example.com如下:
2)创建一个名为/home/student/ansible/inventory的静态库存文件如下所示:
2.1)node1 是dev主机组的成员
2.2)node2是test主机组的成员
2.3)node1和node2是prod主机组的成员
2.4)node1是balancers主机组的一员
2.5)prod组是webservers主机组的成员
1)安装和配置ansible以及ansible控制节点server.example.com如下:
1、需要保准三台主机能够互相通信,设置同一种网络模式(nat)
2、配置静态ip地址
[root@localhost ~]# nmcli connection modify ens160 ipv4.addresses 192.168.186.100/24
[root@localhost ~]# nmcli connection modify ens160 ipv4.gateway 192.168.186.2 ipv4.dns192.168.186.2 ipv4.method manualconnection.autoconnect yes
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
[root@localhost ~]# nmcli connection up ens160
server--192.168.186.100 node1---192.168.186.111 node2---192.168.186.222
3、更改主机名
hostnamectl set-hostname server.example.com
hostnamectl set-hostname node1.example.com
hostnamectl set-hostname node2.example.com
控制主机server:
[root@localhost ~]# hostnamectl set-hostname server.example.com
[root@localhost ~]# bash
[root@server ~]#
受控主机node1:
[root@localhost ~]# hostnamectl set-hostname node1.example.com
[root@localhost ~]# bash
[root@node1 ~]#
受控主机node2:
[root@localhost ~]# hostnamectl set-hostname node2.example.com
[root@localhost ~]# bash
[root@node2 ~]#
4、更改时间:
timedatectl set-timezone Asia/Shanghai
[root@node1 ~]# timedatectl set-timezone Asia/Shanghai
[root@node1 ~]# date
2023年 01月 01日 星期日 18:28:24 CST
[root@node1 ~]#
5、安装常用软件工具
配置yum源安装常用软件工具
[root@server ~]# yum install vim-enhanced net-tools bash-completion -y
正在更新 Subscription Management 软件仓库。
机构
本系统已在权利服务器中注册,但没有接收更新。可使用 subscription-manager 分配订阅。
baseos 2.0 MB/s | 2.7 kB 00:00
AppStream 3.1 MB/s | 3.2 kB 00:00
Extra Packages for Enterprise Linux 9 - x86_64 15 kB/s | 7.8 kB 00:00
Extra Packages for Enterprise Linux 9 - x86_64 3.5 MB/s | 12 MB 00:03
软件包 vim-enhanced-2:8.2.2637-16.el9_0.3.x86_64 已安装。
软件包 net-tools-2.0-0.62.20160912git.el9.x86_64 已安装。
软件包 bash-completion-1:2.11-4.el9.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@server ~]#
6、配置centos8基础源
#vim /etc/yum.repos.d/base.repo
[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/
gpgcheck=0
[BaseOS]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/
gpgcheck=0
7、配置epel
(1)、#yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
(2)、#sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
(3)、#sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
(4)、#yum install ansible -y
(5)、#ansible --version
8、修改/etc/hosts的内容信息
#vim /etc/hosts
192.168.101.111 node1 node1.exmaple.com
192.168.101.222 node2 node2.exmaple.com
192.168.101.100 server server.example.com
2)创建一个名为/home/student/ansible/inventory的静态库存文件如下所示:
1、server.example.com 主机创建student普通用户
[root@server ~]# useradd student
[root@server ~]# su student
[student@server root]$
2、创建ansible文件
[student@server ~]$ pwd
/home/student
[root@server student]# mkdir /home/student/ansible
3、完成需求:
3.1)node1 是dev主机组的成员
3.2)node2是test主机组的成员
3.3)node1和node2是prod主机组的成员
3.4)node1是balancers主机组的一员
3.5)prod组是webservers主机组的成员
[root@server student]# vim /home/student/ansible/inventory
[root@server ansible]# ansible-inventory --graph
4、创建一个名为/home/student/ansible.cfg的配置文件