ansible

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 被管理端

bash 复制代码
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、常用的参数

bash 复制代码
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、模块和命令

bash 复制代码
ansible <组名/ip地址> -m 指定模块,不加-m,默认使用command -a <参数或者命令>

7.1command模块

基础模块,也是ansible的默认模块,不支持管道符和重定向操作。执行一般的linux命令

bash 复制代码
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模块

支持管道符和重定向,也可以用逻辑表达式

&& 且

; 逻辑或

bash 复制代码
#添加用户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

分/时/日/月/周

bash 复制代码
#创建定时任务
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模块

用户管理模块

bash 复制代码
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模块

把当前主机的文件复制到目标主机

bash 复制代码
#将当前主机/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模块

设置文件属性

bash 复制代码
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模块

设置远程主机的主机名

bash 复制代码
ansible 192.168.230.20 -m hostname -a "name=nginx1"

7.8ping模块

测试跟目标主机之间是否联通,看success

bash 复制代码
ansible all -m ping

7.9yum模块

在目标主机安装软件

yum只能安装和卸载软件,不能管理

bash 复制代码
#安装
ansible 192.168.230.20 -m yum -a 'name=httpd'

#卸载
ansible 192.168.230.20 -m yum -a 'name=httpd state=absent'

7.10service模块

用来管理目标主机上软件的运行状态

bash 复制代码
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'
相关推荐
持敬chijing几秒前
白盒测试与代码审计-JS 数据逆向
javascript·网络·安全·web安全·网络安全·网络攻击模型·安全威胁分析
曹牧1 分钟前
VS: Visual Studio 里把未包含的文件加进项目2
linux·运维·算法
吴声子夜歌3 分钟前
Docker入门与实战——高级网络功能
网络·docker
艾莉丝努力练剑13 分钟前
【AI大模型接入SDK】ChatServer HTTP接口模块实现总览
网络·c++·人工智能·网络协议·学习·http·架构
坤坤子吖21 分钟前
Linux 线程概念与控制——线程创建、退出与等待
linux·开发语言·c++·笔记·学习
YH_Analytics33 分钟前
2026 洁净室环境在线监测系统行业排名与份额对比销量与份额解析
大数据·网络·人工智能
Chenyu_31042 分钟前
NUMA 基础:从 CPU、内存到 Node 的整体理解
linux·服务器·网络·缓存
对空六课2 小时前
两个统计平台数据不同:用同一时间窗和事件样本做差异定位
大数据·前端·网络·数据库
User_芊芊君子2 小时前
【JavaEE初阶 - 网络原理】网络分几层?从自定义协议聊到 DNS
java·网络·java-ee
2603_969579289 小时前
备份最常用的三个软件是什么软件
网络