Ansible:远程自动化运维
Ansible
是基于python开发的配置管理和应用部署工具。也是自动化运维的重要工具。可以批量配置,部署,管理上千台主机。只需要固定在一台主机配置ansible就可以完成其他主机的操作
操纵模式
1.1 模块化操作,命令行执行
1.2 playbook,剧本,也是把命令行脚本化,脚本的格式yaml格式
幂等性
ansible特性:幂等性
幂等性:多次操作或者是多次执行,对系统的影响不会发生变化,无论执行对多少次结果都是一样的
ansible什么都不会做
四大组件
1.1 Inventory(主机清单):主机组,必须要声明管理主机的地址或者其他配置,不声明ansible无法对目标主机进行操作
1.2 modules(模块):学习核心。ansible的功能是靠模块来实现的
1.3 插件
1.4 playbooks(剧本):脚本(复用)
安装及模块
语法:命令行
192.168.100.12 ansible
192.168.100.13 被管理端
192.168.100.14 被管理端
bash
同时
systemctl stop firewalld
setenforce 0
df -h
test2
yum -y install epel-release
yum -y install ansible
cd /etc/ansible
vim hosts
20 取消注释[web]
23 192.168.100.13
33 [xy102]
37 192.168.100.14
wq!
ssh-keygen -t rsa
# 一路回车
sshpass -p '123' ssh-copy-id root@192.168.100.13
sshpass -p '123' ssh-copy-id root@192.168.100.14
ansible-doc -l # 列出ansible所有已安装的模块(支持的模块)
q # 退出
模块和语法
第一个模块:command
基础模块,也是ansible的默认模块,不支持管道符和重定向操作,执行一般的linux命令
bash
ansible <组名/ip地址> -m 指定模块,不加-m,默认使用command,-a <参数或者命令>
ansible 192.168.100.13 -m command -a "date"
yes # 报错再执行sshpass -p '123' ssh-copy-id root@192.168.100.13
ansible 192.168.100.14 -m command -a "date"
yes # 报错再执行sshpass -p '123' ssh-copy-id root@192.168.100.14
# 集群执行
ansible [web] -m command -a "date"
# host里面所有都执行
ansible all -m command -a "date"
需要交互的、动态查看、解压都不可以、静态可以--幂等性
常用参数:
chdir:在目标主机提前进入目录,然后执行指令
bash
ansible 192.168.100.13 -a "chdir=/home ls ./"
# 先进入home再执行./(./可不加),chdir相当于cd切换目录
creates:判断文件是否存在,如果存在就不执行后面的指令
bash
test3
touch 123
test2
ansible 192.168.100.13 -a "creates=/opt/123 ls /opt"
# 会告诉你存在,不执行后面操作
removes:判断文件是否存在,如果存在,执行指令
bash
ansible 192.168.100.13 -a "removes=/opt/123 ls /opt"
解压
bash
ansible 192.168.100.13 -a "tar -xf /opt/nginx-1.22.tar.gz -C /opt"
ansible 192.168.100.13 -a "chdir=/opt tar -xf nginx-1.22.tar.gz "
第二个模块:shell模块
支持管道符和重定向,也可以用逻辑表达式 &&且
;逻辑或
bash
ansible 192.168.100.14 -a "useradd test"
ansible 192.168.100.14 -m shell -a "echo 123456 | passwd --stdin test"
ansbile 192.168.100.14 -m shell -a "echo 123 > /opt/123"
ansible 192.168.100.14 -m shell -a "cat /opt/123"
多个命令连在一块
bash
ansible 192.168.100.14 -m shell -a "touch /opt/123.txt && echo 123 > /opt/123.txt && cat /opt/123.txt"
# 会有警告的提示
目标主机创建一个脚本,在脚本中写#!/bin/bash ifconfig 然后运行脚本,在一条命令完成
bash
ansible 192.168.100.14 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'
第三个模块:cron模块
定时任务模块 minute/hour/day/mouth/weekday 分/时/日/月/周
bash
ansible 192.168.100.13 -m cron -a 'minute=30 hour=8 day=* job="ls /opt"'
# job=表示定时任务执行的命令
ansible 192.168.100.13 -a 'crontab -l' # 查看创建的定时任务
ansible 192.168.100.13 -m cron -a 'minute=30 hour=8 day=3 month=9 job="ls /opt" name="test"'
删除定时任务
bash
ansible 192.168.100.13 -m cron -a 'name="test" state=absent'
ansible 192.168.100.13 -m cron -a 'name="None" state=absent'
# 会将None全部删除,所以在创建定时任务的时候一定要指定名字
第四个模块:user模块
用户管理模块
bash
第一个参数:name(必选参数)
state=present|absent present 创建 absent 删除
system=yes|no 创建用户时,是否为系统账号,no是普通用户,yes是程序用户
uid:指定用户的uid
group:指定用户组
shell:默认系统用户不加(/bin/bash)
create_home=yes|no 不是默认的家目录/home。/opt/test1家目录,create_home=yes创键,no就是不创建
password:用户添加密码
remove=yes|no state=absent删除用户,删除用户时是否删除家目录
bash
ansible 192.168.100.13 -m user -a 'name=xy102 system=no'
ansible 192.168.100.13 -m user -a 'name=xy77 uid=900 shell=/sbin/nologin system=yes'
ansible 192.168.100.13 -m user -a 'name=xy77 home=/opt/xy77 create_home=yes password=123456'
删除
ansible 192.168.100.13 -m user -a 'name=xy77 state=absent'
ansible 192.168.100.13 -m user -a 'name=xy77 remove=yes state=absent'
第五个模块:copy模块
copy复制模块,把指定主机的文件复制到目标主机
bash
cd /opt
touch xy102.txt
echo 123 > xy102.txt
ansible 192.168.100.14 -m copy -a 'src=/opt/xy102.txt dest=/opt/'
src表示源文件
dest目标主机的保存路径
mode复制文件时 表示权限
owner文件的所有者 属主
group文件所在组 属组
content指定复制的内容,就不能用src
bash
ansible 192.168.100.14 -m copy -a 'src=/opt/xy102.txt dest=/opt/ mode=640'
ansible 192.168.100.14 -m copy -a 'src=/opt/xy102.txt dest=/opt/ mode=640 owner=dn group=dn'
# 这个用户在目标主机必须提前存在
bash
ansible 192.168.100.14 -m copy -a 'content="黑神话:悟空,真好玩" dest=/opt/houzi.txt mode=777 owner=dn group=dn'
# 远程把houzi.txt改成 孙悟空.txt
(1)使用command模块
ansible 192.168.100.14 -a 'mv /opt/houzi.txt /opt/孙悟空.txt'
(2)使用shell模块
ansible 192.168.100.14 -m shell -a 'mv /opt/孙悟空.txt /opt/猪八戒.txt'
第六个模块:file模块
设置文件属性
mode owner group state=touch|absent touche创建 absent删除
bash
ansible 192.168.100.13 -m file -a 'path=/opt/abc.txt state=touch mode=777 owner=dn group=dn'
bash
ansible 192.168.100.13 -m file -a 'path=/opt/abc.txt.link src=/opt/abc.txt state=link'
删除
ansible 192.168.100.13 -m file -a 'path=/opt/abc.txt.link state=absent'
第七个模块:hostname模块
设置远程主机的主机名
bash
ansible 192.168.100.13 -m hostname -a "name=nginx1"
su 刷新
第八个模块:ping模块
看success表示成功
bash
ansible all -m ping
第九个模块:yum模块
yum模块只能安装和卸载软件
bash
ansible 192.168.100.13 -m yum -a 'name=httpd' # 安装
ansible 192.168.100.13 -m yum -a 'name=httpd state=absent' # 卸载
第十个模块:server模块
管理模块,用来管理目标主机软件的运行状态
name 服务名称
state=started|stopped|restarted
enabled=true 开机自启
runlevel=40 运行级别 如果设置了开机自启,就需要声明运行级别
bash
ansible 192.168.100.13 -m yum -a 'name=nginx' # 安装软件
ansible 192.168.100.13 -m service -a 'name=nginx enabled=true state=started runlevel=60' # 管理
1、安装nginx
2、开启nginx、开机自启
3、访问nginx,访问内容是this is nginx1
bash
ansible 192.168.100.13 -m shell -a 'echo "this is nginx1" > /usr/share/nginx/html/index.html && curl 192.168.100.13' # 访问nginx,访问内容是this is nginx1