ansible远程自动化运维

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'
相关推荐
cookies_s_s31 分钟前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
zhouwu_linux1 小时前
MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。
linux·运维·macos
诶尔法Alpha2 小时前
Linux上使用dify构建RAG
linux·运维·服务器
熬夜苦读学习2 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
荔枝荷包蛋6663 小时前
【网络】高级IO——Reactor版TCP服务器
运维·服务器
GGGGGGGGGGGGGG.3 小时前
hapxory-ACL基础介绍及案例
运维·服务器·网络
黑牛先生4 小时前
【Linux】匿名管道
linux·运维·服务器
流星白龙4 小时前
【Linux】35.封装 UdpSocket(2)
linux·运维·windows
是码农没错了4 小时前
银河麒麟系统安装mysql5.7【亲测可行】
linux·运维·kylin
技术小齐6 小时前
网络运维学习笔记 017HCIA-Datacom综合实验01
运维·网络·学习