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'
相关推荐
m0_609000426 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
m0_741768855 小时前
使用docker的小例子
运维·docker·容器
学习3人组5 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神5 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0666 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen016 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦6 小时前
linux 解压缩
linux·运维·服务器
最新小梦7 小时前
Docker日志管理
运维·docker·容器
鸡鸭扣8 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu