ansible是基于python开发的配置管理和应用部署工具。
也是自运维的重要工具,
可以批量配置,部署,管理上千台主机
只需要在一台主机配置ansible就可以完成其他主机的操作
操作模式:
1、模块化操作,命令行执行
2、playbook,剧本,也就是把命令行脚本化。脚本的格式是yaml格式
ansible的特性,幂等性
幂等性:多次操作或者多次执行,对系统的影响不会发生变化,无论执行多少次结果都是一样的。ansible什么都不会做。
http get
post
ansible的四大组件:
1、inventory 主机清单 主机组
必须是要声名管理主机的地址或者其他配置,不声明ansible无法对目标主机进行操作
2、modules 模块 学习的核心
3、插件
4、playbooks 剧本 ----- 脚本(复用)
ansible的命令格式
语法:
ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)'
使用ansible需要安装,必须要声名管理主机的地址
yum -y install epel-release
yum -y install ansible
vim /etc/ansible/hosts
ansible-doc -l 列出ansible所有的模块
ansible的模块:
1、comand模块,基于模块,也是ansible的默认模块,不支持管道符和重定向操作。执行一般的linux命令
ansible 192.168.233.20 -m command -a 'date'
#测试是否可以运行
ansible web -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令
如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向
ansible 192.168.233.20 -a 'date'
2、 shell模块
在远程主机执行命令,相当于在执行shell命令,支持管道符和重定向
ansible 192.168.233.20 -m shell -a 'useradd test'
#远程创建用户
ansible 192.168.233.20 -m shell -a 'echo 123456 | passwd --stdin root'
#给root用户创建密码
3、cron模块,定时任务模块 minute/hour/day/month/weekday /分/时/日/月/周
创建定时任务:
ansible 192.168.233.20 -m cron -a 'minute=30 hour=8 day=3 month=9 job="ls /opt" name="test1"'
删除定时任务 :
ansible 192.168.233.20 -a 'crontab -l'
#查看定时任务
ansible 20.0.0.20 -m cron -a 'name="test1" state=absent'
#state=absent:声明状态为删除
ansible 192.168.233.20 -a 'crontab -l'
ansible 192.168.233.20 -m cron -a 'name="None" state=absent'
#如果名字是None直接删除None
#如果有多个None会都被删除
多个计划任务,如果不给名字都是None,一旦删除None,会全部删除。所以不删除(最好是指定一个不重复的名字)
4、 user模块
user模块,用户管理模块:
name 用户名 必选参数
state=present | absent present 创建 absent删除
system=yes | no 创建用户时,是否为系统账号,no是普通用户,yes是程序用户
uid:指定用户的uid
group:指定用户组
shell 默认是系统用户可以不加
careate_home=yes | no 不是默认的家目录/home /opt/test1家目录 create_home=yes 创建,no就是不创建
password:用户添加密码
remove=yes | no: state=absent删除用户,删除用户时是否删除家目录。
创建普通用户
ansible 192.168.233.20 -m user -a 'name=xy102 system=no'
创建程序用户
创建用户指定家目录同时添加密码
ansible 192.168.124.20 -m user -a 'name=xy88 home=/opt/xy788 create_home=yes password=123456'
删除用户同时删除家目录
ansible 192.168.233.20 -m user -a 'name=xy88 remove=yes state=absent'
5、copy复制模块:当前主机的文件复制到目标主机
copy复制模块,把主机的文件复制到目标主机。
ansible 192.168.233.20 -m copy -a 'src=/opt/xy101.txt dest=/opt/'
src 表示源文件 dest 目标主机的保存路径
mode 复制文件时,表示权限
owner 文件的所有者 属主
group 文件的所在组 属组
content 指定复制的内容,就不能用src
复制文件更改权限
ansible 192.168.233.20 -m copy -a 'src=/opt/xy101.txt dest=/opt/ mode=640'
修改目标主机的文件名
6、file模块:设置文件属性
mode owner group state = touch | absent touch 创建 absent 删除
使用file后面必须是path来指定地址,设着权限。所有者,所在组
ansible 192.168.233.20 -m file -a 'path=/opt/acb.txt state=touch mode=777 owner=root group=root'
设置连接文件
ansible 192.168.233.20 -m file -a 'path=/opt/acb.txt.link src=/opt/acb.txt state=link'
远程删除文件
ansible 20.0.0.30 -m file -a 'path=/opt/fstab.link state=absent'
7、hostname模块,设置远程主机的主机名
ansible 192.168.233.20 -m hostname -a "name=nginx1"
8、ping模块,检测主机的连通性
ansible 192.168.233.20 -m ping
9、yum模块,在目标主机安装模块
ansible 20.0.0.20 -m yum -a 'name=httpd'
在目标主机上的操作都是后台运行,不影响其他用户使用
ansible 20.0.0.20 -m yum -a 'name=httpd state=absent'
远程卸载软件包
10、service模块:用来管理目标主机上的软件的运行状态
state=started | stopped | restarted:启动、停止和重启。三种管理动作
enabled=true:是否设置开机自启。如果不加默认就是不自动启动
runlevel:配合enabled的。如果设置开机自启,可以设置运行级别。在命令行设置,但是不生效,一般不在命令行操作
ansible 192.168.233.20 -m service -a 'enabled=true name=httpd state=restarted'
安装nginx服务,设置为开机自启,设置访问页面this is nignx
ansible 192.168.233.20 -m shell -a 'echo "this is nginx" > /usr/local/nginx/html/index.html'
#设置nginx服务的页面
ansible 192.168.233.20 -m service -a 'enabled=true name=nginx state=restarted'
#启动nginx服务并设置为开机自启
ansible 192.168.233.20 -a 'curl 20.0.0.20'
#终端访问测试一下
11、防火墙和网络模块:
ansible 192.168.233.20 -m iptables -a 'chain=INPUT protocol=ICMP source=192.168.233.100 jump=REJECT' -b
拒绝20访问100
ansible 192.168.233.20 -m iptables -a "chain=INPUT protocol=tcp destintion_port=80 jump=REJECT" -b
拒绝20访问80端口
ansible 192.168.233.20 -m iptables -a "chain=INPUT protocol=tcp destintion_port=80 jump=ACCEPT" -b
允许20访问80端口
ansible 192.168.233.20 -m iptables -a "chain=INPUT protocol=tcp destintion_port=80 jump=REJECT state=absent" -b
删除防火墙策略
12、配置网卡模块:
修改ip地址
ansible 192.168.233.20 -m ansible.builtin.lineinfile -a "path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp='^IPADDR' line='IPADDR 192.168.233.25'" -b
ansible 192.168.233.20 -a 'systemctl restart networkx'
13、script模块 运行本地的脚本,把脚本运行的结果输出到目标主机
ansible 192.168.233.20 -m script -a '/opt/test.sh'
14、setup模块 查看目标主机的信息
查看cpu
ansible 1892.168.124.20 -m setup -a 'filter=ansible_* processor *'查看内核
ansible 1892.168.124.20 -m setup -a 'filter=ansible_proc_cmdline'查看内存
ansible 1892.168.124.20 -m setup -a 'filter=ansible_mem*'查看系统信息
ansible 1892.168.124.20 -m setup -a 'filter=ansible_system'