简介
简称:Ans
基于Python
自动化批量管理工具
适用于在多台机器上执行重复指令,批量部署、批量分发、批量更新等
常用文档地址:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin
Ans基础(ad-hoc,即命令行运行模块功能)<br>
分组功能:Inventory文件(通常指hosts)
组
[lain]<br>127.0.0.1<br>[lain01]<br>127.0.0.2
子组
[total:children]<br>lain<br>lain01
格式
ansible+分组名+'-m'+模块名+'-a'+动作名
-m: module<br>
-a: action
ansible all -m ping
模块 -m
ping
command
仅支持简单名,不支持特殊符号
默认命令为command,可不指定
shell
支持更多的特殊符号和执行脚本(脚本需要在受控端存在,所以执行脚本使用script模块)
file:管理文件或目录<br>
path:路径、必填
src:一般用来在创建软连接时指定源文件
state:状态/模式
state=directory:创建目录<br>
ansible all -m file -a 'path=/lain state=directory'<br>
state=file(默认)更新文件,如果文件不存在也不会创建
ansible all -m file -a 'path=/lain/file.txt state=file'
state=link:创建软连接
ansible all -m file -a 'src=/lain/file.txt path=/tmp/file.txt.soft state=link'<br>
state=touch:创建文件<br>
ansible all -m file -a 'path=/lain/file.txt state=touch'
state=absent:删除目录、文件、软连接
...
示例:创建文件并指定权限
ansible all -m file -a 'path=/lain/file.txt -owner=root group=root mode=0755 state=touch'<br>
copy:类似scp,远程传输模块<br>
src:源文件<br>
dest:目标
backup:backup=yes 会在覆盖前备份文件
owner
group
mode
systemd:服务管理<br>
name:指定服务名<br>
enabled:控制服务开启自启动 enabled=yes、no
state:表示服务开关重启<br>
state=started
state=stopped<br>
state=reloaded 重加载配置文件:sshd、nfs、、nginx等<br>
state=restarted
daemon-reload
关闭防火墙:ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'<br>
yum软件包管理
yum_repository<br>
添加nginx的yum源:ansible all -m yum_repository -a 'name=nginx baseurl="" gpgcheck=no enabled=yes'<br>
yum
安装一个软件:ansible all -m yum -a 'name=lrzsz state=installed'<br>
get_url(类似wget功能)
下载文件到目录(目录不存在不会创建)
ansible all -m get_url -a 'url="https://xxx.com/test/t.txt" dest="/data/home/"'<br>
mount:文件系统挂载,nfs挂载<br>
fstype:指定文件系统类型,如nfs
src: 源地址:如nfs服务地址eg 172.16.1.31/data<br>
path:挂载点,要把源挂载到哪里<br>
state
absent:卸载(umount)并修改挂载fstab,清理配置<br>
unmounted: 卸载,不修改/etc/fstab
present: 仅修改/etc/fstab不挂载<br>
mounted: 挂载(用mount命令)并修改/etc/fstab,永久挂载<br>
remounted: 重新挂载<br>
cron定时任务模块<br>
name:定时任务名字,对应注释内容<br>
时间:分、时、日、月、周
job:执行的命令
state
present (默认)添加定时任务<br>
absent:删除<br>
lineinfile:用于确保一个特定的行存在于文件中,<br>或者替换一个文件中符合特定正则表达式的行。<br>这个模块常用于修改配置文件或其他文本文件。<br>它提供了一种方便的方式来确保文件中包含<br>(或不包含)特定的内容,而不需要替换整个文件<br>
....还有很多
动作 -a
实际执行的命令或各个模块下的选项,如command的可以执行简单shell:hostname
*剧本playbook(基于文件部署、分发)<br>
简介
通过yml文件编排一系列操作进行统一管理,<br>类似与pipline或github的actions这样的任务编排功能。<br>提前编排好配置,一个命令执行批量重复或复杂操作<br>
playbook vs shell脚本?
playbook可以并行批量部署、批量分发、批量管理<br>shell更偏向某一台机器的各种操作、是一台一台执行<br>playbook效率更高,但是shell也不是不能实现playbook功能<br>管理的设备较多时 我们有playbook 为什么还去使用shell...循环呢?
基本格式(yml):<br>- hosts: all<br> vars: <br> filename: test.txt<br> tasks:<br> - name: touch file<br> shell: touch /data/{{filename}}<br>
执行:ansible-playbook -i hosts test.yml
检查 不执行:ansible-playbook -i hosts -C test.yml
-i指定主机文件<br>-C检查真正执行时都有哪些操作,实际不执行<br>--syntax-check检查文件的格式是否有问题<br>--skip-tags跳过指定的tags<br>--tags只执行指定的tags<br>
include:可以将一个比较大的剧本文件拆分成多个,并且关联起来<br>
- hosts:nfs<br> tasks:<br> - include_task: a.yml<br>- hosts: web<br> tasks:<br> - include_task: b.yml
实战
在一组主机上部署nfs服务端,并在另一组主机上挂载
https://blog.csdn.net/Tianyi_0801i/article/details/140757543
ip_addresses.txt内容<br>172.16.1.51 root 123456<br>172.16.1.52 root 123456<br>172.16.1.56 root 123456