自动运维工具Ansible的安装以及主要模块的使用

17 篇文章 0 订阅
1 篇文章 0 订阅

1、Ansible的安装条件

Ansible 是用Python开发的,可以工作在Linux、BSD、Mac OS X 等平台,对Python环境的版本最低要求为Python2.6以上,目前centos7默认自带的Python是2.7.5,所以在centos7上安装Ansible时无需升级Python,但是如果安装在centos6或者更低版本的linux系统上,需要先升级Python到2.6以上。
特别提醒,升级python版本要慎重,因为yum等重要软件依赖它的特定版本。

2、centos7上升级Python过程(一般不建议升级)

CentOS 7 默认的python版本是python2.7.5。因为yum依赖于默认的python版本的缘由,所以要先保留默认版本,并修改yum文件头部后,才能开始安装更新python2和python3两个最新版本。(python2和python3共存)
保留默认python版本2.7.5,并修改yum头部,保持yum对默认版本python2.7.5的依赖。步骤如下:

1.su root  # 获取root权限
2.mv /usr/bin/python2.7 /usr/bin/python2.7.5  # 保留默认版本python为python2.7.5
  ln -s /usr/bin/python2.7.5 /usr/local/bin/python2.7.5  # 创建软连接
3.ll /usr/bin/yum*  # 查看/usr/bin/目录下所有yum文件(7个)头部
4.vi /usr/bin/yum*  # 修改/usr/bin/目录下所有yum文件(7个)头部
  #!/usr/bin/python —> #!/usr/bin/python2.7.5
5.vi /usr/libexec/urlgrabber-ext-down  # 修改/usr/libexec/目录下 urlgrabber-ext-down头部
  #!/usr/bin/python —> #!/usr/bin/python2.7.5

3、安装epel-release源

yum list|grep epel-release 看一下是否有 epel源;
在这里插入图片描述

如果显示如上图说明有,就可以直接yum install epel-release -y安装,
如果没有,先执行如下语句添加源

rpm -Uvh http://mirrors.aliyun.com/epel/7/x86_64/e/epel-release-7-8.noarch.rpm

然后再yum install epel-release -y安装

4、安装Ansible

Ansibl的安装比较简单,在安装好epel源后可以直接yum方式安装Ansibl了。
命令:yum install ansible -y
Ansible工具默认主目录为:/etc/ansible/,其中
hosts文件为被管理机IP或者主机名列表;
ansible.cfg为ansible主配置文件;
roles为角色或者插件路径,默认该目录为空。

5、修改hosts文件,添加被管理机器的IP

vim /etc/ansible/hosts

在这里插入图片描述

6、Ansible主要模块的应用

6.1、ping 模块

批量 ping服务器的状态 ansible -k all -m ping
在这里插入图片描述
初始运行ansible的ping模块,一般会报如下错:
在这里插入图片描述
上面的错误信息的主要原因是我们已经开始远程到hosts列表的服务器上;在我们 SSH 到服务器上的时候,SSH 会提示是否需要保存 key,这个时候我们需要选择 Yes 或者 No。但Ansible 是不具备输入参数的能力的。
解决办法1:按照图片中的将各个服务器远程登录一边,但是只能临时使用重启后不管用。
解决办法2:修改配置文件/etc/ansible/ansible.cfg
需要将 host_key_checking 这个配置设置为 False。在这里插入图片描述
部分命令参数解释:

  1. ansible: 这是 Ansible 命令的名称,用于执行与远程主机通信的操作。
  2. -k: 这是一个选项,表示在连接远程主机时需要提示输入密码。当你希望使用SSH密码进行连接时,可以使用这个选项。
  3. all: 这是指定在主机清单中的所有主机都会受到这个命令的影响。
  4. -m command: 这是指定使用 Ansible 的 “command” 模块来执行命令。“command” 模块允许在远程主机上执行特定的命令。

6.2、command 模块

command 模块需要用到的参数:

参数解释
ansible这是 Ansible 命令的名称,用于执行与远程主机通信的操作。
-k这是一个选项,表示在连接远程主机时需要提示输入密码。当你希望使用SSH密码进行连接时,可以使用这个选项。
-i /etc/ansible/hosts这是一个选项,指定 Ansible 使用的主机清单文件的路径。主机清单文件包含了你想要管理的远程主机的信息,比如主机名或IP地址。
all这是指定在主机清单中的所有主机都会受到这个命令的影响。
-m command这是指定使用 Ansible 的 “command” 模块来执行命令。“command” 模块允许在远程主机上执行特定的命令。
-a “date”这是一个选项,表示要传递给 “command” 模块的参数。在这里,你传递的命令是 date,这会在远程主机上执行 date 命令,显示当前的日期和时间。
6.2.1、获取远程主机的日期和时间

命令ansible -k -i /etc/ansible/hosts all -m command -a "date"
在这里插入图片描述

6.2.2、远程批量执行ping命令

命令 ansible -k all -m command -a "ping -c 1 www.baidu.com"
在这里插入图片描述
192.168.88.134没有配置DNS所以无法ping通百度,修改DNS后再次测试
修改DNS所在文件vim /etc/resolv.conf
添加 nameserver 202.102.134.68
DNS 要选择好用的,我是选择本地联通的DNS。
在这里插入图片描述
在这里插入图片描述

6.2.3、批量对被管理主机使用df -h命令

命令 ansible -k 192.168.88.* -m command -a "df -h"
在这里插入图片描述

6.3、copy模块

Ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能

参数作用
srcAnsible端源文件或者目录,空文件夹不拷贝;
content用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest客户端目标目录或者文件,需要绝对路径;
backup拷贝之前,先备份远程节点上的原始文件;
directory_mode用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow支持link文件拷贝;
force覆盖远程主机不一致的内容;
group设定远程主机文件夹的组名;
mode指定远程主机文件及文件及的权限;
owner设定远程主机文件夹的用户名。
6.3.1、批量给目标主机建目录拷贝文件

先批量远程创建目录 :

ansible -k all -m command -a "mkdir -p /data/ansibletest"

在这里插入图片描述
批量拷贝文件到目标主机:

ansible -k all -m copy -a 'src=/data/ansible.txt dest=/data/ansibletest/ mode=755 owner=root'

在这里插入图片描述
去目标主机查看文件:
在这里插入图片描述

6.3.2、批量远程拷贝文件内容

命令:

ansible -k all -m copy -a 'content="你好ansible" dest=/data/ansibletest/ansible.txt mode=755 owner=root'

在这里插入图片描述
去目标主机查看:
在这里插入图片描述
再次执行一次命令

ansible -k all -m copy -a 'content="你好ansible我i已经改变" dest=/data/ansibletest/ansible.txt mode=755 owner=root'

在这里插入图片描述
再次查看目标主机:结果新内容覆盖了旧的内容
在这里插入图片描述

6.3.3、拷贝内容时增加备份功能

命令:

ansible -k all -m copy  -a  'content="Hello World------------" dest=/data/ansibletest/ansible.txt  backup=yes mode=755  owner=root'

注意:只有前后两次拷贝的内容不一致时才会产生备份
在这里插入图片描述

6.4 、yum 模块

Ansible yum模块主要用于软件的安装、升级、卸载,支持红帽.rpm软件的管理,YUM模块使用详解:

参数解释
conf_file设定远程yum执行时所依赖的yum配置文件
disable_gpg_check安装软件包之前是否坚持gpg key;
name需要安装的软件名称,支持软件组安装;
update_cache安装软件前更新缓存;
enablerepo指定repo源名称;
skip_broken跳过异常软件节点;
state软件包状态,包括:installed、present、latest、absent、removed;
6.4.1、批量远程安装软件

命令:

ansible all -k -m yum -a "name=sysstat,screen state=installed"

name表示需安装的软件名称,state表示状态,常见state= installed表示安装软件

在这里插入图片描述
去目标主机查看:
在这里插入图片描述

6.4.2、批量远程删除软件

命令

ansible all -k -m yum -a "name=sysstat,screen state=absent"

name表示需安装的软件名称,state表示状态,常见state= absent 表示安装软件
在这里插入图片描述
去目标主机查看:
在这里插入图片描述

6.5、file 模块

file模块主要用于对文件的创建、删除、修改、权限、属性的维护和管理

参数解释
srcAnsible端源文件或者目录;
follow支持link文件拷贝;
force覆盖远程主机不一致的内容;
group设定远程主机文件夹的组名;
mode指定远程主机文件及文件及的权限;
owner设定远程主机文件夹的用户名;
path目标路径,也可以用dest,name代替;
state状态包括:file、link、directory、hard、touch、absent;
attributes文件或者目录特殊属性;

远程批量创建目录:
命令

ansible -k 192.168.* -m file -a "path=/data/ansibletest/`date +%F` state=directory mode=755"

path表示目录的名称和路径, state=directory表示创建目录;如果创建文件则用state=touch
在这里插入图片描述
去目标主机上验证:
在这里插入图片描述

6.6、user 模块

user模块主要用于操作系统用户、组、权限、密码等操作

参数解释
system默认创建为普通用户,为yes则创建系统用户;
append添加一个新的组;
comment新增描述信息;
createhome给用户创建家目录;
force用于删除强制删除用户;
group创建用户主组;
groups将用户加入组或者附属组添加;
home指定用户的家目录;
name表示状态,是否create、remove、modify;
password指定用户的密码,此处为加密密码;
remove删除用户;
shell设置用户的shell登录环境;
uid设置用户id;
update_password修改用户密码;
state用户状态,默认为present表示新建用户;
6.6.1、批量给远程主机建新用户

命令:

 ansible -k 192.168.88.* -m user -a "name=ansible home=/tmp/"

name表示用户名称,home表示其家目录 默认使用/bin/bash 也可以指定shell,如shell=/sbin/nologin
在这里插入图片描述
验证:
在这里插入图片描述

6.6.2、批量删除远程主机用户
 ansible -k 192.168.88.* -m user -a "name=ansible state=absent"

name表示用户名称,state=absent表示删除用户 也可以加上强制删除 force=yes
在这里插入图片描述
验证:
在这里插入图片描述

6.7、cron 模块

cron模块主要用于添加、删除、更新操作系统Crontab任务计划(定时任务)

参数解释
name任务计划名称;
cron_file替换客户端该用户的任务计划的文件;
minute分( 0-59 ,* , */2 每2分钟);
hour时( 0-23 ,* , */2 每2小时 );
day日( 1-31 ,* ,*/2 );
month月( 1-12 ,* ,*/2 );
weekday周( 0-6 或 1-7 ,* );
job任何计划执行的命令,state要等于present;
backup是否备份之前的任务计划;
user新建任务计划的用户;
state指定任务计划present、absent;
6.7.1、给远程主机制定批量授时任务

命令:

ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' job='/usr/sbin/ntpdate 210.72.145.44'"

minute=0 : 0分
hour=0 : 0点
*:每天/每月/每周
在这里插入图片描述

如果需要备份之前的任务计划可以使用backup=yes

ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' backup=yes job='/usr/sbin/ntpdate 210.72.145.44'"
6.7.2、批量删除任务计划

命令:

ansible -k all -m cron -a "name='Ntpdate server for sync time' state=absent"

在这里插入图片描述

6.8、synchronize 模块

synchronize模块主要用于目录、文件同步,基于Rsync命令同步目录

参数解释
compress开启压缩,默认为开启;
archive是否采用归档模式同步,保证源和目标文件属性一致;
checksum是否效验;
dirs以非递归的方式传输目录;
links同步链接文件;
recursive是否递归yes/no;
rsync_opts使用rsync 的参数;
copy_links同步的时候是否复制连接;
delete删除源中没有而目标存在的文件;
src源目录及文件;
dest目标目录及文件;
dest_port目标接受的端口;
rsync_path服务的路径,指定 rsync 命令来在远程服务器上运行;
rsync_timeout指定rsync操作的IP超时时间;
set_remote_user设置远程用户名;
–exclude=*.log忽略同步.log结尾的文件;
mode同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push;
6.8.1、批量同步文件内容

命令:

ansible -k all -m synchronize -a 'src=/data/ansible.txt dest=/data/ansibletest/ansible.txt'

同步前:
在这里插入图片描述
在这里插入图片描述

执行命令:ansible -k all -m synchronize -a 'src=/data/ansible.txt dest=/data/ansibletest/ansible.txt'

在这里插入图片描述
验证:
在这里插入图片描述
在这里插入图片描述

6.8.2、synchronize模块同步文件夹

同步文件夹前
在这里插入图片描述

执行命令:

ansible -k all -m synchronize -a 'src=/data/ dest=/data/ansibletest/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=ansibe'

compress=yes开启压缩、delete=yes数据一致(删除源中没有而目标存在的文件;)、rsync_opts同步参数、–exclude排除文件
在这里插入图片描述
同步后验证:
在这里插入图片描述

6.9、shell 模块

shell模块主要用于远程客户端上执行各种Shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令

参数解释
chdir执行命令前,切换到目录;
creates当该文件存在时,则不执行该步骤;
executable换用shell环境执行命令;
free_form需要执行的脚本;
removes当该文件不存在时,则不执行该步骤;
warn如果在ansible.cfg中存在告警,如果设定了False,不会警告此行;
6.9.1、远程执行脚本

注意:远程执行脚本,需要提前在目标机器上放一份脚本才可以。

在本地建脚本test.sh
在这里插入图片描述
将脚本批量传到目标机器上:

ansible -k all -m copy  -a  'src=/data/test.sh  dest=/data/ansibletest/  backup=yes mode=755  owner=root'

在这里插入图片描述
在这里插入图片描述
执行命令:ansible -k all -m shell -a "/bin/sh /data/ansibletest/test.sh >>/tmp/var.log"

>>/tmp/var.log”表示把输出结果追加到/tmp/var.log文件中
在这里插入图片描述

6.9.2、远程批量查看客户端进程

命令:ansible -k all -m shell -a "ps -ef |grep http"

在这里插入图片描述

6.9.3、远程批量查看客户端任务计划

命令:ansible -k all -m shell -a "crontab -l"
在这里插入图片描述

6.9.4、远程创建目录

命令:

ansible -k all -m shell -a "mkdir -p `date +%F` chdir=/data/ansibletest/ state=directory warn=no"

注释:执行之前切换在/data/ansibletest/目录,屏蔽警告信息
在这里插入图片描述
执行结果:
在这里插入图片描述

6.10、 Shell模块和command模块的区别

1)command 模块
command模块用于在远程主机上执行简单的命令,这些命令不需要使用 shell 进程来解释。它会直接执行你提供的命令,不会进行任何 shell 扩展或变量替换。
这意味着如果你在 command 模块中使用变量,它们不会被展开,而会直接传递给远程主机执行。
由于不涉及 shell,command 模块执行起来通常更快,也更适用于不需要 shell 功能的简单命令。
2)shell 模块
shell 模块用于在远程主机上执行需要使用 shell 解释的命令,比如使用通配符、管道、重定向等 shell 特性的命令。
这个模块会将你提供的命令传递给远程主机的默认 shell(通常是 /bin/sh 或类似的 shell)来解释执行。这意味着你可以使用变量和 shell 特性。
由于涉及了 shell 解释,shell 模块执行起来可能会稍微慢一些,而且需要注意潜在的安全问题,比如命令注入漏洞。
在选择使用 command 模块还是 shell 模块时,考虑以下几点:
如果你只需要执行简单的命令,而不涉及变量或复杂的 shell 特性,那么使用 command 模块可能更合适,因为它执行得更快。
如果你的命令需要使用变量、管道、重定向等 shell 功能,那么你可能需要使用 shell 模块。
无论使用哪个模块,都要确保在执行命令时处理好输入的数据,以避免安全风险。
在大多数情况下,如果命令比较简单且不需要 shell 功能,建议使用 command 模块。如果需要 shell 功能,确保命令安全并避免潜在的漏洞。

6.11、service 模块

service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等

参数解释
enabled是否开启启动服务;
name服务名称;
runlevel服务启动级别;
arguments服务命令行参数传递;
state服务操作状态,状态包括started, stopped, restarted, reloaded;
6.11.1、批量远程重启zabbix-agent服务

命令:

ansible -k all -m service -a "name=zabbix-agent state=restarted"

我的目标主机只有192.168.88.134安装了nginx;
192.168.88.169和192.168.88.118没有安装nginx,所以这两台机器返回结果是failed。
在这里插入图片描述
192.168.88.134上的zabbix-agent服务重启前:
在这里插入图片描述
192.168.88.134上的zabbix-agent服务重启后:
在这里插入图片描述

6.11.2、批量远程重启网卡服务

命令:ansible -k all -m service -a "name=network args=ens33 state=restarted"
注释:centos7默认网卡名字是ens33
在这里插入图片描述

6.11.3、批量远程开机启动zabbix-agent服务

命令:

ansible -k all -m service -a "name= zabbix-agent enabled=yes runlevel=3,5"

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值