ansible是通过ssh连接到被管理主机,然后执行相关操作的,如图28-1所示。?
?本实验的拓扑图如图28-2所示。 ?
先使用root用户登录server,在其上配置epel源,命令如下。 ?
[root@RHEL813 ~]# yum -y install https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
上次元数据过期检查:1 day, 16:50:15 前,执行于 2023年12月13日 星期三 04时02分57秒。
epel-release-latest-8.noarch.rpm 158 kB/s | 25 kB 00:00
依赖关系解决。
[root@RHEL813 ~]#sed -i's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@RHEL813 ~]# sed -i 's|^metalink|#metelink' /etc/yum.repos.d/epel*
在server上安装ansible,命令如下。 ?
安装开发工具
[root@RHEL813 ~]# yum -y groupinstall 开发工具
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
Extra Packages for Enterprise Linux 8 - x86_64 497 kB/s | 16 MB 00:32
上次元数据过期检查:0:00:20 前,执行于 2023年12月14日 星期四 21时00分57秒。
依赖关系解决。
==================================================================================================================
软件包 架构 版本 仓库 大小
==================================================================================================================
安装组:
Development Tools
事务概要
?# 下载Python3.9.5
[root@RHEL813 ~]# cd Python-3.10.6/
[root@RHEL813 Python-3.10.6]# ./configure --prefix=/usr/local/python3 --enable-optimizations
[root@RHEL813 Python-3.10.6]# make
[root@RHEL813 Python-3.10.6]# make install
[root@RHEL813 ~]# rm -rf /usr/bin/python3
[root@RHEL813 ~]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[root@RHEL813 ~]# rm -rf /usr/bin/pip3
[root@RHEL813 ~]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
?查看Python3和Pip3是否正确的被安装:
[root@RHEL813 ~]# python3 --version
Python 3.10.6
[root@RHEL813 ~]# pip3 --version
pip 22.2.1 from /usr/local/python3/lib/python3.10/site-packages/pip (python 3.10)
[root@RHEL813 ~]#
?第二步 安装ansible
[root@RHEL813 ~]# yum -y install python3-cryptography
[root@RHEL813 ~]# yum -y install python3-jinja2
sshpass使用一个新的yum源,配置完新的yum源之后就可以进行安装了
[root@RHEL813 ~]# cat /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=http://47.108.86.156/rhel8/ansible29/ansible-2.9-for-rhel-8-x8
6_64-rpms/
gpgcheck=0
[root@RHEL813 ~]#
?再次安装ansible
[root@RHEL813 ~]#rpm ‐ivh
http://47.108.86.156/rhel8/ansible29/ansible‐2.9‐for‐rhel‐8‐x86_64‐rpms/P
ackages/a/ansible‐2.9.11‐1.el8ae.noarch.rpm
[root@RHEL813 ~]# ansible --version
ansible 2.9.11
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.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Sep 9 2021, 07:49:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
[root@RHEL813 ~]# pip3 --version
pip 22.2.1 from /usr/local/python3/lib/python3.10/site-packages/pip (python 3.10)
这里安装的ansible的版本是2.9.11,同时也显示ansible的默认配置是 /etc/ansible/ansible.cfgo还要确保ansible主机能够解析所有的被管理机器,这里通过配置/etc/hosts 来实现,l/etchosts的内容如下
[root@RHEL813 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.103.17 server.rhce.cc server
192.168.103.14 server2.rhce.cc server2
192.168.103.15 server3.rhce.cc server3
[root@RHEL813 ~]#
[root@RHEL8 ~]# cat /etc/sudoers.d/bdqn
bdqn ALL=(root) NOPASSWD:ALL
[root@RHEL8 ~]#
[root@RHEL812 ~]# cat /etc/sudoers.d/bdqn
bdqn ALL=(root) NOPASSWD:ALL
[root@RHEL812 ~]#
[bdqn@RHEL813 ~]$ ssh server2
Activate the web console with: systemctl enable --now cockpit.socket
[bdqn@RHEL8 ~]$ exit
[bdqn@RHEL813 ~]$ ssh server3
Activate the web console with: systemctl enable --now cockpit.socket
[bdqn@RHEL812 ~]$
[bdqn@RHEL812 ~]$ exit
?2.编写ansible.cfg和清单文件
下面的操作都是server上的bdqn用户操作的,先在家目录下创建ansible.cfg,内容如下。?
[bdqn@RHEL813 ~]$ cat ansible.cfg
[defaults]
inventory = ./hosts
[privilege_escalation]
become=True
become_method=sudo
become_user=root
[bdqn@RHEL813 ~]$
?
[bdqn@RHEL813 ~]$ cat hosts
server2
server3
[bdqn@RHEL813 ~]$
这里一行一台主机,我们在使用ansible或ansible-playbook命令时,指定的主机名必须是这个名称才行。要确保能解析server2和server3,写成相应的IP也可以。
如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。?
[bdqn@RHEL813 ~]$ cat hosts
server2
server3
server[10:15]
[bdqn@RHEL813 ~]$
[bdqn@RHEL813 ~]$ cat hosts
server2
server3
server[10:15]
[db1]
server[2:5]
[db2]
server6
server7
[bdqn@RHEL813 ~]$
[bdqn@RHEL813 ~]$ cat hosts
server2
server3
server[10:15]
[db1]
server[2:5]
[db2]
server6
server7
[db3:children]
db1
db2
[bdqn@RHEL813 ~]$
下面查看每个主机组中有多少主机。首先查看主机组db1中的主机,命令如下,?
[bdqn@RHEL813 ~]$ ansible db1 --list-hosts
hosts (4):
server2
server3
server4
server5
[bdqn@RHEL813 ~]$
[bdqn@RHEL813 ~]$ ansible db2 --list-hosts
hosts (2):
server6
server7
[bdqn@RHEL813 ~]$
?共2台主机。查看主机组 db3中的主机,命令如下。
[bdqn@RHEL813 ~]$ ansible db3 --list-hosts
hosts (6):
server2
server3
server4
server5
server6
server7
[bdqn@RHEL813 ~]$
?共6台主机,与分析的是一样的。还有一个内置主机组叫作all,表示所有主机。
了解了清单文件的写法之后,最终把清单文件写成如下内容。 ?
[bdqn@RHEL813 ~]$ cat hosts
server2
server3
[db]
server2
server3
[bdqn@RHEL813 ~]$
?这里就包括了一个主机组 db,里面含有server2和server3。
ansible的基本用法如下?
ansible 机器名 ‐m 模块× ‐a "模块的参数"
?这里的机器名必须出现在清单文件中,整体的意思是在指定的机器上执行模块x。例如,在server2上执行hostname命令,命令如下。
[bdqn@RHEL813 ~]$ ansible server2 -m shell -a "hostname"
server2 | CHANGED | rc=0 >>
RHEL8
[bdqn@RHEL813 ~]$