1、概念
远程自动化运维工具
ansible是基于python开发的配置管理和应用部署工具,也是自动化运维的重要工具
可以批量配置、部署、管理上千台主机
只需要在一台主机配置ansible,就可以完成其他主机的操作
2、操作模式
1、模块化操作,命令行执行
2、playbook,剧本,把命令行脚本化,脚本的格式是yaml格式
3、ansible的特性
幂等性:多次操作或者多次执行,对系统的影响不会发生变化,无论执行多少次,结果都是一样的,ansible什么都不会做
4、ansible的四大组件
1、inventory:主机清单、主机组
必须要声明管理主机的地址或者其他配置,不声明ansible无法对目标主机进行操作
2、modules:模块,学习的核心
ansible的功能是靠模块来实现的
3、插件
4、playbooks:剧本、脚本(复用)
5、安装ansible
192.168.230.10 ansible
192.168.230.20 被管理端
192.168.230.30 被管理端
systemctl stop firewalld
setenforce 0
yum -y install epel-release
yum -y install ansible
cd /etc/ansible
vim hosts
20行取消注释
23行 192.168.230.20
33行取消注释
37行 192.168.230.30
#生成ssh密钥对
ssh-keygen -t rsa
sshpass -p '123' ssh-copy-id root@192.168.230.20
sshpass -p '123' ssh-copy-id root@192.168.230.30
#列出当前ansible所有已安装的模块(支持的模块)
ansible-doc -l
6、常用的参数
chdir:在目标主机提前进入目录,然后执行指令
ansible 192.168.230.20 -a 'chdir=/home ls'
creates:判断文件是否存在,如果存在就不执行后面的指令
ansible 192.168.230.20 -a 'creates=/opt/123 ls /opt'
removes:判断文件是否存在,如果存在执行指令
ansible 192.168.230.20 -a 'removes=/opt/123 ls /opt'
7、模块和命令
ansible <组名/ip地址> -m 指定模块,不加-m,默认使用command -a <参数或者命令>
7.1command模块
基础模块,也是ansible的默认模块,不支持管道符和重定向操作。执行一般的linux命令
ansible 192.168.230.20 -m command -a "date"
#获取目标主机的时间
ansible all -m command -a "date"
#展示所有
#解压
方法一:
ansible 192.168.230.20 -a 'tar -xf /opt/nginx-1.22.0.tar.gz -C /opt'
方法二:
ansible 192.168.230.20 -a 'chdir=/opt tar -xf nginx-1.22.0.tar.gz'
7.2shell模块
支持管道符和重定向,也可以用逻辑表达式
&& 且
; 逻辑或
#添加用户test
ansible 192.168.230.20 -m shell -a 'useradd test'
#给用户添加密码
ansible 192.168.230.20 -m shell -a 'echo 123456 | passwd --stdin test'
#查看文件
ansible 192.168.230.20 -m shell -a 'cat /opt/123'
#执行多个命令
ansible 192.168.230.30 -m shell -a 'touch /opt/123.txt && echo 123 > 123.txt && cat /opt/123/txt'
#目标主机创建一个脚本,在脚本中写#!/bin/bash ifconfig,然后运行脚本,在一条命令完成
ansible 192.168.230.30 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'
7.3cron模块
定时任务模块
minute/hour/day/month/weekday
分/时/日/月/周
#创建定时任务
ansible 192.168.230.20 -m cron -a 'minute=30 hour=8 day=* job="ls /opt" name="test1"'
#job表示定时任务执行的命令
#删除任务
ansible 192.168.230.20 -m cron -a 'name="test1" state=absent'
#没有名字的任务是None
ansible 192.168.230.20 -m cron -a 'name="None" state=absent'
7.4user模块
用户管理模块
name:用户名,必选参数
state=present|absent,present:表示创建,默认的可以不加,absent表示删除
system=yes|no:创建用户时是否为系统账号,system=no是普通用户,system=yes是程序用户
uid:指定用户的uid
group:指定用户组
shell:默认是系统用户可以不加
create_home=yes|no:不是默认的家目录/home,如果是/opt/test1家目录,create_home=yes表示创建,no就是不创建
password:用户添加密码
remove=yes|no:删除用户时是否删除家目录
#创建用户xy102
ansible 192.168.230.20 -m user -a 'name=xy102 system=no'
#删除用户时删除家目录
ansible 192.168.230.20 -m user -a 'name=xy77 remove=yes state=absent'
#删除用户
ansible 192.168.230.20 -m user -a 'name=xy66 state=absent'
7.5copy模块
把当前主机的文件复制到目标主机
#将当前主机/opt目录下的xy102.txt文件复制到目标主机的/opt目录下
ansible 192.168.230.20 -m copy -a 'src=/opt/xy102.txt dest=/opt'
src:表示原文件
dest:表示目标主机的保存路径
mode:复制文件时表示权限
owner:文件的所有者,属主
group:文件的所在组,属组
content:指定复制的内容,用了content就不能用src
#复制文件,赋权,修改所有者和所在组
ansible 192.168.230.20 -m copy -a 'src=/opt/xy102.txt dest=/opt mode=640 owner=dn group=dn'
#将黑神话:悟空,真好玩复制到/opt目录下的houzi.txt文件中,赋权,修改所有者和所在组
ansible 192.168.230.20 -m copy -a 'content="黑神话:悟空,真好玩" dest=/opt/houzi.txt mode=777 owner=dn group=dn'
#将houozi.txt改名为孙悟空.txt
ansible 192.168.230.30 -a 'mv /opt/houzi.txt /opt/孙悟空.txt'
7.6file模块
设置文件属性
mode owner group
state=touch|absent
touch:创建
absent:删除
#在/opt目录下创建文件abc.txt,赋权,修改所有者和所在组
ansible 192.168.230.20 -m file -a 'path=/opt/abc.txt state=touch mode=777 owner=dn group=dn'
#给文件创建链接文件
ansible 192.168.230.20 -m file -a 'path=/opt/abc.txt.link src=/opt/abc.txt state=link'
#删除链接文件
ansible 192.168.230.20 -m file -a 'path=/opt/abc.txt.link state=absent'
7.7hostname模块
设置远程主机的主机名
ansible 192.168.230.20 -m hostname -a "name=nginx1"
7.8ping模块
测试跟目标主机之间是否联通,看success
ansible all -m ping
7.9yum模块
在目标主机安装软件
yum只能安装和卸载软件,不能管理
#安装
ansible 192.168.230.20 -m yum -a 'name=httpd'
#卸载
ansible 192.168.230.20 -m yum -a 'name=httpd state=absent'
7.10service模块
用来管理目标主机上软件的运行状态
name:声明服务名称
state=started|stopped|restarted
enabled=true:开机自启
runlevel=40:运行级别,设置了开机自启就需要声明运行级别
#安装nginx
ansible 192.168.230.30 -m yum -a 'name=nginx'
#设置nginx开机自启
ansible 192.168.230.30 -m service -a 'name=nginx enabled=true state=started runlevel=60'
#安装nginx,开启nginx设置开机自启,访问的内容是this is nginx1!
ansible 192.168.230.30 -m yum -a 'name=nginx'
ansible 192.168.230.30 -m service -a 'name=nginx enabled=true state=started runlevel=60'
ansible 192.168.230.30 -m shell -a 'echo "this is nginx1!" > /usr/share/nginx/html/index.html'