Ansible部署

目录
第一章 前提条件
1.1创建ssh密钥对
1.2分发公钥文件
1.3编写脚本
1.4端口被更改
第二章 安装测试
2.1 安装配置
2.2 常用模块说明
2.3 command模块
2.4 shell模块
2.5 script模块
2.6 file模块
2.7 yum模块
2.8 crond模块
第三章 编写ansible剧本

简介


ansible是一个基于Python开发的自动化运维工具,并行安装执行脚本程序
服务端:不需要启动任何服务,默认不需要任何配置
客户端:不需要安装任何服务,因为通过服务端的ssh管理,需要修改成被管理
authorized_keys: 这个文件时秘钥文件

第一章、前提条件

基于ssh秘钥方式建立远程连接,直接从第三步操作即可
1、ssh密钥对创建(管理主机),需要两步免交互,

[root@Centos-7 ~]# >/root/.ssh/known_hosts   #清空连接的文件

在这里插入图片描述
如上图,需要免交互两步操作
1、-f /root/.ssh/id_rsa 解决:不要问我,直接放这里即可
2、-N “” 或者-P”” 解决:密码为空

[root@ansible ~]# ssh-keygen -f /root/.ssh/id_rsa -N ""     #免密创建密钥对

2、分发公钥文件(管理主机),需要免交互式分发
1、sshpass解决免密码登录
2、-o StrictHostKeyChecking=no #不要问我了,都可以,解决yes/no问题

[root@ansible ~]# yum -y install sshpass    #安装sshpass,实现免密码登录
[root@ansible ~]# sshpass -p123123 ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.25  #不要加双引号

3、编写脚本

[root@ansible ~]# mkdir /script
[root@ansible ~]# vim /script/keygen-sshpass.sh   #编写自动创建秘钥和分发脚本
#!/bin/bash
#Author:quss
#Time:2020-6
rm -f /root/.ssh/id_dsa*
ssh-keygen -f /root/.ssh/id_rsa -N "" 

for ip in 31 41 7
do
sshpass -p123123 ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.$ip
Done
[root@ansible ~]# vim /script/check.sh              #编写批量检查脚本
#!/bin/bash
if [ $# -ne 1 ]
then
    echo "请输入一个参数"
    exit 1
fi
for ip in 2
do
    echo ===== info 10.14.21.$ip======
    ssh 10.14.21.$ip  $1
    echo ""
Done
[root@ansible ~]# bash /script/check.sh              #必须输入一个参数
请输入一个参数
[root@ansible ~]# bash /script/check.sh hostname     #检查
===== info 10.14.21.2======
TEST02

4、端口号不是22的情况

[root@ansible ~]# sshpass -pP@ssw0rd12! ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.2 -p1231   #最后增加一个端口号即可

二、安装测试

1、安装配置ansible

[root@ansible ~]# yum -y install ansible         #服务端 需要epel源
[root@ansible ~]# rpm -qa|grep ansible
ansible-2.9.9-1.el7.noarch
#如果客户端开启了selinux,安装这个就行, 服务端不需要安装
[root@ansible ~]#yum -y install  libselinux-python  

[root@ansible ~]# cd /etc/ansible/   
[root@ansible ansible]# vim ansible.cfg    #配置文件一般不做改动
[root@ansible ansible]# vim hosts
[quss]       #分组、销售的、运维的等等
10.14.21.30 ansible_user=root ansible_password=123123
10.14.21.31 ansible_user=root ansible_password=123123
#以上情况是没有分发秘钥时,基于口令进行批量管理
[ops]
10.14.21.2
[root@ansible ansible]# ansible ops -m command -a "hostname"  # 指定组名、模块、命令
#如果hosts文件只写用户名,不写密码,实现交互式输入也行。
[root@ansible ansible]# ansible 10.14.21.21 -m command -a "hostname" -k #交互式输入密码
SSH password: 
2、常用模块说明
-m 指定响应模块
-a 利用模块中某些参数功能
command模块
#https://docs.ansible.com/ansible/latest/modules/modules_by_category.html   #官方文档所有模块
[root@ansible ansible]# ansible-doc -l|wc -l    #ansible所有的模块
3387

chdir:先切换到这个目录,再执行操作。
[root@ansible ansible]# ansible 10.14.21.2 -m command -a "chdir=/tmp/ pwd"
10.14.21.2 | CHANGED | rc=0 >>
/tmp

create:类似判断,当存在时,后面的命令跳过就不运行
[root@ansible ansible]# ansible 10.14.21.2 -m command -a "creates=/etc/hosts hostname"
10.14.21.2 | SUCCESS | rc=0 >>
skipped, since /etc/hosts exists

removes:存在就运行,和create正好相反
free_form:表示必须要有一个linux合法命令,如ls 等
shell模块:比command更全,是个万能模块,command不能写特殊符号< >| ; 等
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "ls;pwd"   #运行多个命令
chdir
create
removes
free_form
script模块,shell也可以执行script但是不如script好用。执行本地脚本,操作到远程主机
Shell执行脚本时,先把脚本推送到远程主机,再赋予执行权限。
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "rpm -qa keepalived"
[WARNING]: Consider using the yum,    #粉色,建议用yum模块更好用
[root@ansible ansible]# vim /script/yum.sh   #创建脚本
#!/bin/bash
yum -y install keepalived
[root@ansible ansible]# ansible 10.14.21.2 -m script -a "/scripts/yum.sh"  #用scripts

总结ansible颜色信息:
绿色:查看远程主机信息,不会对远程主机系统做任何修改
红色:执行操作出现异常错误
黄色:对远程主机系统进行修改操作
粉色:警告或者忠告信息
3、file 文件模块
Copy复制模块,

[root@ansible ansible]# touch /tmp/file01.txt
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "ls -l /tmp/"      #检查
backup模块
[root@ansible ansible]# echo 123123 >/tmp/file01.txt    # 本地文件增加内容,再次推送
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "cat /tmp/file01.txt"  #发现被覆盖掉
10.14.21.2 | CHANGED | rc=0 >>
123123
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"    # yes为备份
[root@TEST02 ~]# cd /tmp                                #查看被管理主机
-rw-r--r--  1 root   root   7 Jun 20 12:45 file01.txt.21511.2020-06-20@12:48:29~
参数:owner---设置复制后的文件属主权限
参数:group---设置复制后的文件属组权限
参数:mode---设置复制后的文件权限(600 755)
参数:state---用于指定创建目录或文件:touch、
[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01.txt owner=elk group=elk mode=600"        #修改属主、属组、权限信息
[root@TEST02 tmp]# ll file01.txt                    #检查权限
-rw------- 1 elk elk 7 Jun 20 12:48 file01.txt
创建文件
[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01.txt state=touch" 
创建目录
[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01 state=directory"

4、yum模块:并行安装
name:执行要安装软件的名称,以及软件的版本,如安装则提示
state:installed安装 absent(卸载)
list:指定软件名称,查看软件是否可以安装,以及是否已经安装过了

[root@ansible ansible]# ansible 10.14.21.2 -m yum -a "name=iftop state=installed"  #安装
[root@ansible ansible]# ansible 10.14.21.2 -m yum -a "list=iftop"     # 查看 = rpm -qa
"yumstate": "available"  #可安装
"yumstate": "installed"  #已安装

5、service—管理服务状态模块
name: 指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state:stopped started restarted reloaded
enabled:yes表示服务开机自启动 no表示服务开机不要自动启动

[root@ansible ansible]# ansible 10.14.21.2 -m service -a "name=firewalld state=started enabled=no"            #服务名字、开启/关闭、是否开机自启。
[root@TEST02 tmp]# systemctl status firewalld    #在客户端检查

6、crond定时任务

[root@ansible ~]# ansible 10.14.21.2 -m cron -a "minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null'"       #完整的定时任务
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "minute=0 hour=0 job='/bin/sh/ /scripts/test.sh &>/dev/null'"                               # 默认带*的可以省略
#以上如果客户端有定时任务,则会重复增加
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null'"   #增加一个name即可避免重复创建
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss  state=absent"  #删除定时任务 
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null' disabled=yes" #注释定时任务必须有job 

三、编写ansible剧本

[root@ansible ~]# mkdir -p /etc/ansible/ansible-playbook
[root@ansible ~]# vim /etc/ansible/ansible-playbook/test.yaml   # 编写剧本

在这里插入图片描述

[root@ansible ~]# ansible-play  -C                               #模拟执行执行剧本
[root@ansible ~]# ansible-play /etc/ansible/ansible-playbook/test.yaml  #执行剧本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值