linux 综合架构 ansible 常用模块
ansible 批量管理服务介绍
ansible批量管理服务意义
-
01. 提高工作的效率
-
02. 提高工作准确度
-
03. 减少维护的成本
-
04. 减少重复性工作
ansible批量管理服务功能
-
01. 可以实现批量系统操作配置
-
02. 可以实现批量软件服务部署
-
03. 可以实现批量文件数据分发
-
04. 可以实现批量系统信息收集
ansible 服务架构信息
-
主机清单配置
-
软件模块信息
-
基于秘钥连接主机
-
主机需要关闭selinux
-
软件剧本功能
ansible服务特点说明
-
01. 管理端不需要启动服务程序(no server)
-
02. 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
-
03. 受控端不需要安装软件程序(libselinux-python)装 这个包,可以在 selinux 没关闭的情况下使用 ansible
-
04. 受控端不需要启动服务程序(no agent)
-
05. 服务程序管理操作模块众多(module)
-
06. 利用剧本编写来实现自动化(playbook)
官方网站
https://docs.ansible.com/
ansible学习帮助手册如何查看
-
ansible-doc -l --- 列出模块使用简介
-
ansible-doc -s fetch --- 指定一个模块详细说明
-
ansible-doc fetch --- 查询模块在剧本中应用方法
ansible批量管理服务部署
管理端服务器
第一个历程: 安装部署软件
yum install -y ansible rpm -ql ansible
ansible 一些中的配置文件
/etc/ansible/ansible.cfg --- ansible服务配置文件 /etc/ansible/hosts --- 主机清单文件 定义可以管理的主机信息 /etc/ansible/roles --- 角色目录???
第二个历程: 需要编写主机清单文件 /etc/ansible/hosts
# 在最后一行 172.16.1.41 172.16.1.7 172.16.1.31
第三个历程: 测试是否可以管理多个主机
ansible all -a "hostname"
ansible软件模块应用
模块的应用语法格式
- ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
命令类型模块 command (默认模块)
功能:在一个远程主机上执行一个命令
ansible 172.16.1.31 -m command -a "ifconfig"
扩展应用:
(1)chdir Change into this directory before running the command
- 在执行命令之前对目录进行切换
在 /tmp 下创建 oldboy.txt
ansible 172.16.1.31 -m command -a "chdir=/tmp touch oldboy.txt"
(2)creates If it already exists, this step won't be run
- 如果文件存在了,不执行命令操作
ansible 172.16.1.31 -m command -a "creates=/tmp/hosts touch oldboy.txt"
(3)removes If it already exists, this step will be run
- 如果文件存在了, 这个步骤将执行
ansible 172.16.1.31 -m command -a "removes=/tmp/hosts chdir=/tmp touch oldboy.txt"
(4)free_form(required )
- 使用command模块的时候,-a参数后面必须写上一个合法linux命令信息
注意事项
- 有些符号信息无法识别: <", ">", "|", ";" and "&"
ping 模块检查主机是否联通
ansible all -m ping
shell (万能模块)
功能:在节点上执行操作,支持 command 模块中的所有功能
简单用法
ansible 172.16.1.31 -m shell -a "hostname" ansible 172.16.1.31 -m shell -a "echo 123 > haha.txt" ansible 172.16.1.31 -m shell -a "netstat -anptu | grep LISTEN"
script (万能模块)
第一个步骤: 编写一个脚本 /root/yum.sh
#!/bin/bash yum install htop
第二个步骤: 运行 ansible 命令执行脚本
ansible 172.16.1.31 -m script -a "chdir=/root/yum.sh"
查看是否安装 htop
ansible 172.16.1.31 -m shell -a "rpm -qa | grep htop"
PS: scripts模块参数功能和command模块类似
文件类型模块 copy
-
copy – Copies files to remote locations
-
将数据信息进行批量分发
基本操作
ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/"
输出信息详解
172.16.1.31 | CHANGED => { --- 对哪台主机进行操作 "changed": true, --- 是否对主机信息进行改变 "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值 "dest": "/root/hosts", --- 显示目标路径信息 "gid": 0, --- 显示复制后文件gid信息 "group": "root", --- 显示复制后文件属组信息 "md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值 "mode": "0644", --- 显示复制后文件权限信息 "owner": "root", --- 显示复制后文件属主信息 "size": 401, --- 显示文件的大小信息 "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source", "state": "file", --- 显示文件的类型信息 "uid": 0 --- 显示复制后文件uid信息 }
扩展用法:
(1)在传输文件时修改文件的属主和属组信息
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=oldboy group=oldboy"
(2)在传输文件时修改文件的权限信息
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ mode=1777"
(3)在传输数据文件信息时对远程主机源文件进行备份
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"
查看备份生成的文件
(4)创建一个文件并直接编辑文件的信息
ansible 172.16.1.31 -m copy -a "content='zhangbiao' dest=/root/zhangbiao.txt"
ansible软件copy模块复制目录信息
ansible 172.16.1.31 -m copy -a "src=/oldboy dest=/oldboy" src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制 ansible 172.16.1.31 -m copy -a "src=/oldboy/ dest=/oldboy" src后面目录有/: 只将目录下面的内容都进行远程传输复制
文件模块 file
-
Sets attributes of files
-
设置文件属性信息
设置远程机器指定文件的属主,属组,权限
ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"
扩展用法:
可以利用模块创建数据信息 (文件 目录 链接文件)
state 参数
-
=absent --- 缺席/删除数据信息
-
=directory --- 创建一个目录信息
-
=file --- 检查创建的数据信息是否存在 绿色存在 红色不存在
-
=hard --- 创建一个硬链接文件
-
=link --- 创建一个软链接文件
-
=touch --- 创建一个文件信息
创建目录信息(可以递归的创建)
ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=directory" ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy01/oldboy02/ state=directory"
创建文件信息
ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=touch"
创建链接文件信息:
ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_hard.txt state=hard" ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"
利用 file 模块删除数据信息
ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=absent" ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=absent"
批量拉取数据文件 fetch
ansible 172.16.1.31 -m fetch -a "src=/tmp/oldboy.txt dest=/tmp"
系统模块 yum
name --- 指定安装软件名称
state --- 指定是否安装软件
-
installed --- 安装软件
-
present --- 安装软件
-
latest --- 安装软件
-
absent --- 卸载软件
-
removed --- 卸载软件
ansible 172.16.1.31 -m yum -a "name=iotop state=installed"
service模块: 管理服务器的运行状态 停止 开启 重启
name: --- 指定管理的服务名称
state: --- 指定服务状态
-
started 启动
-
restarted 重启
-
stopped 停止
enabled --- 指定服务是否开机自启动
案例:开启 nfs 服务使之开机运行
ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"
cron模块: 批量设置多个主机的定时任务信息
minute: # Minute when the job should run ( 0-59, *, */2, etc )
- 设置分钟信息
hour: # Hour when the job should run ( 0-23, *, */2, etc )
- 设置小时信息
day: # Day of the month the job should run ( 1-31, *, */2, etc )
- 设置日期信息
month: # Month of the year the job should run ( 1-12, *, */2, etc )
- 设置月份信息
weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
- 设置周信息
job 用于定义定时任务需要干的事情
基本用法:
案例 :同步时间
ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
扩展用法:
01. 给定时任务设置注释信息
ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
02. 删除指定定时任务
- PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务
ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"
03. 如何批量注释定时任务
ansible 172.16.1.31 -m cron -a "name='time sync' job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"
mount: 批量挂载操作
-
src: 需要挂载的存储设备或文件信息
-
path: 指定目标挂载点目录
-
fstype: 指定挂载时的文件系统类型
-
state
-
present/mounted --- 进行挂载
-
present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载
-
mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 *****
-
absent/unmounted --- 进行卸载
-
absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载
-
unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 *****
ansible 172.16.1.31 -m mount -a 'fstype=nfs src=172.16.1.31:/nfs path=/mnt state=mounted'
user模块: 实现批量创建用户
ansible 172.16.1.31 -m user -a "name=oldboy01"
扩展用法:
指定用户uid信息
ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"
指定用户组信息
ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02" # groups 添加到多个组 ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"
批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
给指定用户创建密码
生成密文密码信息方法
方法一
ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}"
方法二
yum install -y python-pip pip install passlib python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
使用生成的密文创建密码
ansible 172.16.1.31 -m user -a 'name=oldboy08 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'