跳到主要内容

第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