第10章 Ansible模块
第1章 ansible介绍
1.什么是ansible
1.python写的一套自动化运维工具
2.ansible基于SSH协议通讯
2.为什么需要ansible
1.有状态管理
2.批量部署,批量执行命令
3.统一配置管理,模板管理
4.批量收集主机信息
5.批量分发文件
3.如何学习ansible
0.每天第一件事,打开ansible官方文档,记得带个呕吐袋,不要吐到其他同学身上
1.你所需要的命令都有专门的模块
2.模块使用的语法是官方定义的
3.尽量少用shell模块.当需要用shell模块的时候,停下来思考一下,是不是有专门的模块可以使用
4.多看优秀同学的分享
4.Ansible安装
yum install ansible -y
ansible --version
第2章 Ansible主机清单
1.什么是主机清单
https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
当我们需要管理的服务器数量特别多的时候,有必要对这些服务器按照功能分组管理,主机清单就是将这些服务器按照Ansible要求的格式分组的配置文件。
2.Ansible连接的前提条件
Ansible是基于SSH协议的,所以需要先保证SSH能通讯
第一种方法:主机清单里配置SSH的账号及密码
第二种方法:提前配置好密钥对认证免密连接
3.主机清单-分组执行
主机清单配置(提前配置好密钥对认证):
[web]
172.16.1.31
172.16.1.41
[nfs]
172.16.1.31
[backup]
172.16.1.41
命令格式:
ansible 主机组名称 -m 模块名称 -a 模块参数
ansible all -m 模块名称 -a 模块参数
分组执行测试命令:
ansible web -m ping
ansible nfs -m ping
ansible backup -m ping
主机清单配置-所有主机都执行
ansible all -m ping
3.主机清单-自定义SSH端口号
主机清单配置:
[web]
172.16.1.31 ansible_ssh_port=9527
测试命令:
ansible web -m ping
4.主机清单-自定义SSH端口号,自定义SSH密码
方法1: 修改主机清单配置:
前提条件,需要提前把主机信息加入到know_host文件里
[web]
172.16.1.31 ansible_ssh_port=9527 ansible_ssh_pass='123'
172.16.1.41 ansible_ssh_port=9528 ansible_ssh_pass='123456'
方法2: 修改ansible配置文件,打开取消认证的注释
host_key_checking = False
测试命令:
ansible web -m ping
6.主机清单-同一组连续的IP
主机清单配置:
[zabbix]
172.16.1.[31:41]
测试命令:
ansible zabbix -m ping
7.主机清单-同一组具有相同的变量
主机清单配置:
[web]
172.16.1.31 ansible_ssh_pass='123'
172.16.1.41 ansible_ssh_pass='123'
[web:vars]
ansible_ssh_port=9527
测试命令:
ansible zabbix -m ping
第3章 Ansible常用模块
1.file模块
官网地址:
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html#ansible-collections-ansible-builtin-file-module
创建空文件
ansible web -m file -a "path=/opt/file1.txt state=touch"
ansible web -m file -a "path=/opt/file2.txt state=touch mode=0600 owner=games group=games"
更改文件用户和权限
ansible web -m file -a "path=/opt/file1.txt state=file mode=0600 owner=games group=games"
创建目录
ansible web -m file -a "path=/opt/dir state=directory mode=0700 owner=games group=games"
递归更改目录下文件用户属性
ansible web -m file -a "path=/opt/dir state=directory owner=games group=games recurse=true"
删除文件或目录
ansible web -m file -a "path=/opt/file1.txt state=absent"
ansible web -m file -a "path=/opt/dir state=absent"
2.group模块
官网地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/group_module.html#ansible-collections-ansible-builtin-group-module
创建用户组并指定gid
ansible web -m group -a "name=www state=present gid=1000"
删除用户组
ansible web -m group -a "name=www state=absent"
3.user模块
官网地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html#ansible-collections-ansible-builtin-user-module
创建用户
ansible web -m user -a "name=www uid=1000 group=www create_home=false shell=/sbin/nologin state=present"
删除用户
ansible web -m user -a "name=www state=absent"
4.yum模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/yum_module.html#ansible-collections-ansible-builtin-yum-module
安装软件
ansible web -m yum -a "name=nfs-utils state=present"
卸载软件
ansible web -m yum -a "name=nfs-utils state=absent"
5.copy模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html#ansible-collections-ansible-builtin-copy-module
ansible本机的文件复制到目标服务器
ansible web -m copy -a "src=/opt/file1.txt dest=/mnt/file1.txt"
远程主机本机的文件复制到本机
ansible web -m copy -a "src=/opt/file1.txt dest=/mnt/file1.txt remote_src=true"
传输同时更改权限或用户组
ansible web -m copy -a "src=rsync.pass dest=/etc/ mode=0600"
6.systemd模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/systemd_service_module.html#ansible-collections-ansible-builtin-systemd-service-module
启动服务并设置开机自启动
ansible nfs_server -m systemd -a "name=nfs state=started enabled=true"
关闭服务并取消开机自启动
ansible nfs_server -m systemd -a "name=nfs state=stopped enabled=false"
7.shell模块
ansible nfs_server -m shell -a "showmount -e 172.16.1.31"
8.mount模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/posix/mount_module.html#mount-module
state状态解读
mounted #挂载并且写入fstab
absent #即删除fstab条目也取消挂载
unmounted #只取消挂载,但是不删除fstab条目
present #只写入fstab条目,但是不执行挂载动作
挂载并写入fstab
ansible web -m mount -a "src=172.16.1.31:/data path=/data state=mounted fstype=nfs"
只取消挂载,但是不删除fstab条目
ansible web -m mount -a "path=/data state=unmounted"
即删除fstab条目也取消挂载
ansible web -m mount -a "path=/data state=absent"
只写入fstab条目,但是不执行挂载动作
ansible web -m mount -a "src=172.16.1.31:/data path=/data state=present fstype=nfs"
9.unarchive模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/unarchive_module.html#ansible-collections-ansible-builtin-unarchive-module
远程解压
ansible web -m unarchive -a "src=conf.tar.gz dest=/opt/"
目标主机本地解压
ansible web -m unarchive -a "src=/opt/conf.tar.gz dest=/mnt/ remote_src=true"
10.cron模块
官方地址
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html#ansible-collections-ansible-builtin-cron-module
传统写法
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
创建定时任务并指定任务名称
ansible web -m cron -a "name='ntpdate time' minute='*/5' job='/usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1'"
注释一条定时任务
ansible web -m cron -a "name='ntpdate time' minute='*/5' job='/usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1' disabled=true"
删除定时任务
ansible web -m cron -a "name='ntpdate time' state=absent"
第4章 编写NFS安装服务
ansible nfs_server -m yum -a "name=nfs-utils state=present"
ansible nfs_server -m group -a "name=www gid=1000 state=present"
ansible nfs_server -m user -a "name=www uid=1000 group=www create_home=false shell=/sbin/nologin state=present"
ansible nfs_server -m file -a "path=/data state=directory owner=www group=www"
ansible nfs_server -m copy -a "src=exports dest=/etc/"
ansible nfs_server -m systemd -a "name=nfs state=started enabled=true"
ansible nfs_server -m shell -a "showmount -e 172.16.1.31"
ansible web -m yum -a "name=nfs-utils state=present"
ansible web -m group -a "name=www gid=1000 state=present"
ansible web -m user -a "name=www uid=1000 group=www create_home=false shell=/sbin/nologin state=present"
ansible web -m file -a "path=/data state=directory owner=www group=www"
ansible web -m mount -a "src=172.16.1.31:/data path=/data state=mounted fstype=nfs"
第5章 Ansible颜色输出解释
绿色: 代表执行成功,但是状态没有发生任何改变
黄色: 代表执行成功,状态并发生了改变
红色: 有报错,执行失败
紫色: 警告,建议使用专用的模块
蓝色: 详细的执行过程
第x章 Ansible管理mysql
更新: 2024-11-26 08:17:14