2.自动化运维工具之Ansible ad-hoc
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.ad-hoc基本介绍
1.什么是ad-hoc?
ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存
2.ad-hoc模式的使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
3.ad-hoc模式的命令使用
#批量查看磁盘信息
[root@mb01 ~]# ansible web -m command -a 'df -h' -i /etc/ansible/hosts
#批量查看root目录信息
[root@mb01 ~]# ansible web -m command -a 'ls -l /root' -i /etc/ansible/hosts
4.ad-hoc结果返回颜色
绿色: 代表被管理端主机没有被修改
黄色: 代表被管理端主机发现变更
红色: 代表出现了故障,注意查看提示
2.ad-hoc常用模块
command # 执行shell命令(不支持管道等特殊字符)
shell # 执行shell命令
scripts # 执行shell脚本
yum_repository # 配置yum仓库
yum # 安装软件
copy # 变更配置文件
file # 建立目录或文件
service # 启动与停止服务
mount # 挂载设备
cron # 定时任务
get_url #下载软件
firewalld #防火墙
selinux #selinux
1.Ansible-doc帮助手册
[root@mb01 ~]# ansible-doc -l #### 查看所有模块说明
[root@mb01 ~]# ansible-doc copy #### 查看指定模块方法,搜索EXAMPLES可以查看示例
[root@mb01 ~]# ansible-doc -s copy#### 查看指定模块参数
2.执行命令模块(command,shell,script)
2.1.command命令模块,不支持重定向或管道
command模块 直接写上命令即可
# 默认模块, 执行命令
[root@mb01 ~]# ansible webs -a 'hostname'
172.16.1.7 | CHANGED | rc=0 >>
web01
172.16.1.8 | CHANGED | rc=0 >>
web02
2.2.shell模块,如果需要一些管道操作,则使用shell
使用起来与command一致, shell模块支持管道 特殊符号
[root@mb01 ~]# ansible webs -m shell -a "hostname -I|cut -d ' ' -f1"
172.16.1.7 | CHANGED | rc=0 >>
10.0.0.7
172.16.1.8 | CHANGED | rc=0 >>
10.0.0.8
2.3.script脚本模块
# 编写脚本
[root@mb01 ~]# mkdir -p /server/scripts
[root@mb01 ~]# cat /server/scripts/yum.sh
#!/usr/bin/bash
yum install -y iftop
#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[root@mb01 ~]# ansible web -m script -a '/server/scripts/yum.sh'
3.软件管理模块
3.1yum模块
[root@mb01 ~]# ansible webs -m yum -a "name=httpd state=present"
Name
httpd #指定要安装的软件包名称
file:// #指定本地安装路径(yum localinstall 本地rpm包)
http:// #指定yum源(从远程仓库获取rpm包)
state #指定使用yum的方法
installed,present #安装软件包
removed,absent #移除软件包
latest #安装最新软件包
exclude=kernel*,foo* #排除某些包
list=ansible #类似于yum list查看是否可以安装
disablerepo="epel,ol7_latest" #禁用指定的yum仓库
download_only=true #只下载不安装 yum install d
3.2yum_repository
name #指定仓库名,如果没有file则为仓库文件名
baseurl #指定yum源
gpgcheck #指定检查秘钥
no yes
enabled #是否启用仓库
no yes
4.Ansible文件管理模块(copy,file,get_ur)
4.1.copy文件拷贝模块
# 推送文件模块
[root@mb01 ~]# ansible webs -m copy -a 'src=/etc/hosts dest=/tmp/1234.txt'
# 在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@mb01 ~]# ansible webs -m copy -a 'src=/etc/hosts dest=/tmp/1234.txt backup=yes'
# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@mb01 ~]# ansible webs -m copy -a 'content=1234 dest=/tmp/1234.txt backup=yes'
src #推送数据的源文件信息
dest #推送数据的目标路径
backup #对推送传输过去的文件,进行备份
content #直接批量在被管理端文件中添加内容
group #将本地文件推送到远端,指定文件属组信息
owner #将本地文件推送到远端,指定文件属主信息
mode #将本地文件推送到远端,指定文件权限信息
#####注意,在复制文件时,如果对端没有目录会自动创建目录,但是如果自动创建目录了就没法对文件改名
4.2.file文件创建模块
创建目录
[root@mb01 ~]# ansible webs -m file -a 'path=/code/src/back state=directory'
创建软连接
[root@mb01 ~]# ansible webs -m file -a 'src=/code/src/back path=/code/back state=link'
path #指定远程主机目录或文件信息
recurse #递归授权
state
directory #在远端创建目录
touch #在远端创建文件
link #link或hard表示创建链接文件
absent #表示删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主信息
group #设置文件或目录属组信息
4.3.get_ur文件下载模块
ansible中的wget命令
#1.通过get_url下载文件或者软件
[root@mb01 ~]# ansible webs -m get_url -a 'url=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm dest=/tmp'
url #指定下载地址
dest #指定下载的目录
mode #指定权限
checksum #校验加密算法
5.服务管理模块(systemd)
ansible管理服务的启动与停止,使用service或systemd
[root@mb01 ~]# ansible webs -m service -a 'name=crond state=started enabled=yes'
[root@mb01 ~]# ansible webs -m systemd -a 'name=crond state=started enabled=yes'
name # 定义要启动服务的名称
state # 指定服务状态
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
enabled #开机是否自启
6.用户管理模块
6.1.group组模块
[root@mb01 ~]# ansible webs -m group -a 'name=ro gid=777'
name #指定创建的组名
gid #指定组的gid
state
absent #移除远端主机的组
present #创建远端主机的组(默认)
6.2user模块
#创建用户并不创建家目录
[root@mb01 ~]# ansible webs -m user -a 'name=ro uid=777 group=777 create_home=no '
uid #指定用户的uid
group #指定用户组名称
groups #指定附加组名称
password #给用户添加密码(单引号)
shell #指定用户登录shell
create_home #是否创建家目录
#给普通用户创建秘钥
[root@mb01 ~]# ansible webs -m user -a 'name=roo generate_ssh_key=yes ssh_key_bits=1024 ssh_key_file=/home/roo/.ssh/id.rsa '
generate_ssh_key=yes#创建秘钥
ssh_key_bits=2048#秘钥字节
ssh_key_file=.ssh/id_rsa #私钥路径
#修改用户密码
对明文密码进行加密
[root@mb01 ~]# ansible localhost -m debug -a "msg={{ '123456' | password_hash('sha512', 'salt') }}"
修改密码
[root@mb01 ~]#ansible webs -m user -a 'name=roo password=
$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69.'
7.Ansible定时任务模块
#创建定时任务
[root@mb01 ~]# ansible webs -m cron -a 'name="定时执行脚本" minute=0 hour=0 day=*/2 month=* weekday=* job="sh /server/...sh &>/dev/null"'
注释定时任务
[root@mb01 ~]# ansible webs -m cron -a 'name="定时执行脚本" job="sh /server/...sh &>/dev/null" disabled=yes '
删除定时任务
[root@mb01 ~]# ansible webs -m cron -a 'name="定时执行脚本" state=absent '
name #指定名字
minute#分
hour#时
day#日
month#月
weekday#周
state#状态
present
absent
disabled 是否注释
8.磁盘挂载模块
#安装nfs服务
[root@mb01 ~]# ansible 172.16.1.51 -m yum -a 'name=nfs-utils state=installed'
#编辑配置nfs配置文件
[root@mb01 ~]# ansible 172.16.1.51 -m copy -a 'content="/data (rw,no_all_squash)" dest=/etc/exports backup=yes'
#查看配置文件内容
[root@mb01 ~]# ansible 172.16.1.51 -a ' cat /etc/exports'
172.16.1.51 | CHANGED | rc=0 >>
/data (rw,no_all_squash)
#创建共享目录,并授权
[root@mb01 ~]# ansible 172.16.1.51 -m file -a 'name=/data owner=nfsnobody group=nfsnobody state=directory'
#启动nfs服务及rpcbind服务
[root@mb01 ~]# ansible 172.16.1.51 -m service -a 'name=nfs state=started enabled=yes'
[root@mb01 ~]# ansible 172.16.1.51 -m service -a 'name=rpcbind state=restarted enabled=yes'
#检查共享文件创建情况
[root@mb01 ~]# ansible 172.16.1.51 -a 'showmount -e'
172.16.1.51 | CHANGED | rc=0 >>
Export list for mysql:
/data 172.16.1.0/24
#挂载共享目录
[root@mb01 ~]# ansible 172.16.1.51 -m mount -a 'src=172.16.1.51:/data path=/mnt state=mounted fstype=nfs'
######
present # 开机挂载,仅将挂载配置写入/etc/fstab
mounted
# 挂载设备,并将配置写入/etc/fstab
unmounted #卸载设备,不会清除/etc/fstab写入的配置
absent # 卸载设备,会清理/etc/fstab写入的配置
remounted #重新挂载
9.Ansible防火墙模块(Selinux,iptables,firewalld)
9.1.Selinux防火墙
[root@mb01 ~]# ansible webs -m selinux -a 'state=disabled'
9.2. iptables模块
#添加共享上网
[root@mb01 ~]# ansible 172.16.1.51 -m iptables -a 'table=nat chain=POSTROUTING protocol=tcp action=append source=172.16.1.0/24 jump=SNAT to_source=10.0.0.51'
action #默认是append追加-A insert插入-I
chain #指定链
source #-s 指定源ip
destination #-d 指定目标ip
protocal #-p 指定协议
source_port #--sport指定源端口
destination_port #--dport指定目标端口
jump #-j DROP/ACCEPT
state #present(默认,添加规则) absent(删除)
9.3.firewalld防火墙
[root@m01 ~]# ansible webservers -m systemd -a "name=firewalld state=started" -i ./hosts
[root@m01 ~]# ansible webservers -m firewalld -a "service=http immediate=yes permanent=yes state=enabled" - i ./hosts
service #指定开放或关闭的服务名称
port #指定开放或关闭的端口
masquerade #开启地址伪装
immediate #临时生效
permanent #是否添加永久生效
state #开启或是关闭
zone #指定配置某个区域
rich_rule #配置富规则
source #指定来源IP
10.mysql_user模块
- name: 创建用户
mysql_user:
login_host: localhost
login_user: root
host: 172.16.1.0/24
name: boke
password: 123456
priv: "*.*:ALL,GRANT"
state: present
login_host=“localhost” 指定本地root用户登录本机mysql
login_password=“123.com” root用户的登录密码
login_user=“root” 为root用户或者mysql用户
login_port=“3306” 数据库端口号
name="" 指定grant授权用户
password="" grant授权用户密码
priv="" 库名.SQL语句权限,GRANT
host="" 授权远程登录的IP地址,一般为 网段.% 或者直接 %
state=“present” 创建授权用户
state=“absent” 删除授权用户
11.ansible mysql_db模块
mysql_db模块用于建立、删除、导入和导出数据库
建立数据库
state="present"
---
- name: mysql
hosts: db
tasks:
- name: create a database
mysql_db:
login_host: "127.0.0.1"
login_user: "root"
login_password: "mysql@123"
login_port: "3306"
name: "mezz"
encoding: "utf8"
state: "present"
删除数据库
---
- name: mysql
hosts: s.hi.com
tasks:
- name: delete a database
mysql_db:
login_host: "127.0.0.1"
login_user: "root"
login_password: "mysql@123"
login_port: "3306"
name: "mezz"
state: "absent"
导出数据库
---
- name: mysql
hosts: s.hi.com
tasks:
- name: dump a database
mysql_db:
login_host: "127.0.0.1"
login_user: "root"
login_password: "mysql@123"
login_port: "3306"
name: "mezz"
target: "/tmp/mezz.gz"
state: "dump"
导入数据库
---
- name: mysql
hosts: s.hi.com
tasks:
- name: import a database
mysql_db:
login_host: "127.0.0.1"
login_user: "root"
login_password: "mysql@123"
login_port: "3306"
name: "mezz"
target: "/tmp/mezz.gz"
state: "import
未经允许不得转载:孙某某的运维之路 » 2.自动化运维工具之Ansible ad-hoc
评论已关闭