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'
相关推荐
远游客07131 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<1 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟1 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
fantasy_arch2 小时前
CPU性能优化-磁盘空间和解析时间
网络·性能优化
cominglately4 小时前
centos单机部署seata
linux·运维·centos
魏 无羡4 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse4 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
是Dream呀4 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
木子Linux5 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算