ansible基础
# Ansible介绍
Ansible是python 中的一套模块,系统中的一套自动化工具,只需要使用ssh协议连接及可用来系统管理、自动化批量执行命令等任务。
ansibli优势
1、ansible不需要单独安装客户端,也不需要启动任何服务
2、ansible模块较多,对于自动化的场景支持较丰富
3、ansible playbook,采用yaml语法配置,对于自动化任务执行一目了然
ansible执行流程
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。
# ansible基础使用
安装: yum install -y ansible
- 修改配置
基本不用修改,只需要打开两个参数
vi /etc/ansible/ansible.cfg
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志
2
3
4
5
6
7
8
9
10
11
12
13
# 配置主机清单
ansible默认的主机资产清单文件" /etc/ansible/hosts",用于定义被管理的主机认证信息,如ssh主机地址,用户名,密码,key
常用的资产配置
- 方式一:基于密码连接
[webservers]
192.168.108.238 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
2
3
- 方式二:基于密钥连接(需要先创建公钥和私钥,下发)
推送公钥到主机:192.168.108.237,238
ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@192.168.108.237
[nginx]
192.168.108.237:22
192.168.108.238
[yfk]
192.168.108.237:22
192.168.108.238
2
3
4
5
6
7
- 方式三:主机组使用方式
#方式A、主机组变量+主机+密码
[group_name1]
192.168.108.237
192.168.108.238
[group_name1:vars]
ansible_ssh_pass='123456'
#方式B、主机组变量+主机+密钥
[group_name2]
192.168.108.237
192.168.108.238
#定义多组,多组汇总整合
# webservers组包括两个子组[apapche,nginx]
[webservers:children]
[group_name1]
[group_name2]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Ansible Ad-Hoc
ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存
常用模块
参数名 | 说明 |
---|---|
command | 执行shell命令(不支持管道等特殊字符) |
shell | 执行shell命令 |
scripts | 执行shell脚本 |
yum_repository | 配置yum仓库 |
yum | 安装软件 |
copy | 变更配置文件 |
file | 建立目录或文件 |
service | 启动与停止服务 |
mount | 挂载设备 |
cron | 定时任务 |
blockinfile | 向文件内添加内容 |
返回结果说明
结果 | 说明 |
---|---|
绿色 | 代表被管理端主机没有被修改 |
黄色 | 代表被管理端主机发现变更 |
红色 | 代表出现了故障,注意查看提示 |
# Ansible常用模块举例
- 查看帮助
ansible-doc -l
ansible-doc -s command
- command 模块(默认),不支持重定向或管道
ansible nginx -a "hostname"
- script脚本模块
在ansible主机创建脚本,在本地运行模块,等同于在远程执行,不需要将脚本文件推送到目标主机
ansible yfk -m script -a "/etc/ansible/script/yum-tree.sh"
- copy文件拷贝模块
ansible yfk -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
ansible yfk -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"
直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
ansible yfk -m copy -a "content='hello !' dest=/tmp/yfk-test"
参数名 | 说明 |
---|---|
src | 推送数据的源文件信息 |
dest | 推送数据的目标路径 |
backup | 对推送传输过去的文件,进行备份 |
content | 直接批量在被管理端文件中添加内容 |
group | 将本地文件推送到远端,指定文件属组信息 |
owner | 将本地文件推送到远端,指定文件属主信息 |
mode | 将本地文件推送到远端,指定文件权限信息 |
- file文件配置模块
创建目录
ansible yfk -m file -a "path=/tmp/yfk state=directory"
创建文件
ansible yfk -m file -a "path=/tmp/test state=touch mode=640 owner=root group=root"
创建软链接
ansible yfk -m file -a "src=/tmp/test path=/tmp/tt_link state=link"
- yum安装软件模块
ansible yfk -m yum -a "name=httpd state=installed"
- service服务模块
停止nginx服务
ansible yfk -m service -a "name=nginx state=stopped enabled=yes"
- group组模块
创建group 组
ansible yfk -m group -a "name=yfk1 gid=888"
- user模块
ansible yfk -m user -a "name=yfk1 uid=888 group=888 shell=/sbin/nologin create_home=no"
- crond定时任务模块
不加默认就是,时分秒日月周
ansible yfk -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh /server/scripts/monitor.sh'"
添加带注释信息的定时任务,name设定,删除需要用到
ansible yfk -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh'"
删除
ansible yfk -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' state=absent"
注释
ansible yfk -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=no"
- mount 挂载模块
ansible yfk -m mount -a "src=192.168.108.237:/data path=/data fstype=nfs opts=defaults state=present"
ansible yfk -m mount -a "src=192.168.108.237:/data path=/data fstype=nfs opts=defaults state=mounted"
ansible yfk -m mount -a "src=192.168.108.237:/data path=/data fstype=nfs opts=defaults state=unmounted"
ansible yfk -m mount -a "src=192.168.108.237:/data path=/data fstype=nfs opts=defaults state=absent"
2
3
4
- blockinfile 添加内容
ansible ansible-demo3 -m blockinfile -a 'path=/testdir/rc.local block="systemctl start mariadb\nsystemctl start httpd"'