1.Ansible 基础
1.1 Ansible简介
Ansible 是一个开源软件,提供配置管理和应用程序部署等项目通用的管理功能。它主要运行在类 Unix 系统上,通过特性语言来描述各种资源对象,进而管理类 Unix 系统和 Microsoft Windows 系统等系统资源。
官网: https :// www.ansible.com /
官方文档: https :// docs.ansible.com /
功能网站: https :// galaxy.ansible.com /
源码网站: https :// github.com / ansible
1.2 Ansible的工作特性
基础属性
开发 基于 Python 语言实现
部署 基于 Python 和 SSH 、 agentless 实现简单部署
安全 基于 OpenSSH 加密方式来传输,无序代理不依赖 PKI ,命令执行 幂等性(即 无论执行多少遍跟第一遍一样)
功能属性
设计 基于插件化方式实现定制的功能
关键 三大关键模块: Paramiko 、 PyYAML 、 Jinja2
定制 支持自定义功能模块,编程语言格式无所谓
注意: ansible 的每一个模块的使用方法就类似于一条专用的命令
进阶属性
格式 YAML 格式,支持丰富的数据结构
编排 支持 playbook 自动化方式编排任务
分层 基于角色特性实现多层解决方案
劣势
由于基于 ssh 方式来通信,所以受 ssh 的限制比较多,因为 ssh 不是专门为 ansible 做准备的,所以由于性能损耗方面的原因,特别是主机量比较多的场景,效率是相当的低,解决该办法就是通过专用的代理或者客户端的方式来解决这种大环境下的低效。
1.3 ansible架构描述
三层结构 用户端、控制端、被控端
控制端: 管理方式 如下
Ad-Hoc : 使用命令行方式来管理各种目标主机,适用于小中型、简单的、临时的业务场景。
playbook : 使用 playbook 方式来管理各种目标主机,适用于中大型、复杂的、规划好的业务场景。
被控端: windows 、 Linux 、路由器、交换机等
1.4 工作流程解析
1 用户基于命令或者 playbook 方式,向 ansible 的控制端发起用户请求
2 ansible 根据用户请求目标,到控制端的主机列表中验证目标是否存在
3 若目标主机存在,然后基于连接插件与被控端处于连接状态
4 根据用户请求指令,结合相应的功能模块,指定目标主机执行相应的功能
5 目标主机执行完毕后,会将相应的状态结果返回给控制端。
6 控制端在处理过程中,还会通过插件工具实现日志、邮件等辅助功能
2 软件部署
通用环境需求 : 准备 ssh 环境
控制端专用需求:支持类 unix 系统,不支持 Windows系统 ,准备 python2 .7 + 或 python3 .5 + 的环境
被控端专用需求: Python 版本小于 2.4 ,需要安装 python-simplejson
如 开启 SELinux 需要安装 libselinux-python
windows 只能做为被控制端
安装方式 主要有四种: 官方软件源、源码方式、 Git 方式、 Pip 方式
2.1 工作环境准备

主机名定制 每个主机上都得操作
编写 / etc / hosts 文件
# vim /etc/hosts
10.0.0.12 rocky9-12
10.0.0.13 ubuntu24-13
10.0.0.15 rocky9-15
(1)ubuntu 安装 ansible-二进制 (安装的是最新的软件源,若直接apt安装可能版本过旧 )
apt update # 更新软件源
apt install -y software-properties-common #安装soft...mon(用于管理软件源)
add-apt-repository --yes --update ppa:ansible/ansible # 安装 ansible 的专用软件源
apt-cache madison ansible # 查看 ansible 的软件版本信息
apt-cache madison ansible-core # 查看 ansible-core 核心软件版本
apt install -y ansible # 安装 ansible 软件
dpkg -l ansible # 检测安装的软件包
ansible --version # 查看安装的 ansible 的版本
安装 ansible-pip 方式来安装ansible
注意:默认情况下,无法在 root 用户下,使用 pip 方式安装 ansible ,需要借助于 python 虚拟环境才可以实现。
apt install python3 python3-venv python3-pip -y 准备 pip 环境
mkdir my_project && cd my_project 准备工作目录
python3 -m venv venv 创建 python 虚拟环境 venv
source venv/bin/activate 加载虚拟环境 注意: 结果中(venv) 表示进入到了虚拟环境
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ansible 使用 pip 安装 ansible
ansible --version # 查看安装的 ansible 的版本
安装 ansible-git方式来安装ansible
mkdir / data / codes && cd / data / codes
git clone https :// githubfast.com / ansible / ansible.git
cd . / ansible
source . / hacking / env-setup
ll bin/ 查看文件的样式
python3 bin/ansible --version 使用 python3 检测 ansible 的版本效果
注意: 这种方式受环境功能约束较多,需要定制安装各种功能模块
(2)Rocky 安装 ansible- 二进制
yum install epel-release # 安装依赖软件源
yum install ansible # 安装 ansible 软件
rpm -q ansible # 检测软件安装包效果
ansible --version # 检测 ansible 的版本信息
2.2 软件环境与文件解析
命令文件解析 ll /usr/bin/ | grep ansible
/ usr / bin / ansible # ansible 主命令
/ usr / bin / ansible-config # ansible 配置管理命令
/ usr / bin / ansible-console # ansible 交互式命令
/ usr / bin / ansible-doc # ansible 模块帮助命令
/ usr / bin / ansible-galaxy # ansible 扩展命令,用于获取别人的优秀的角色模板文件
/ usr / bin / ansible-playbook # ansible 任务管理工具
/ usr / bin / ansible-pull # ansible 反模式工作命令
/ usr / bin / ansible-vault # ansible 文件专用加密工具
利用 ansible 实现管理的主要方式:
Ad-Hoc 即利用 ansible 命令,主要用于临时命令使用场景
Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
ansible -h 帮助命令
结果显示:
通用格式: ansible < 目标主机 > 参数
专用格式: ansible < 目标主机 > - m 模块 - a 模块参数
命令方式:在命令行执行 ansible 的方式叫 "Ad-Hoc" , 肯定还有其他执行方式。
主要功能: ansible 的主要功能都是通过各种各样的插件模块来实现特有功能的。
拓展内容: ansible 的默认模块叫 command
注意: Ansible 中的 Ad-Hoc 命令允许用户快速地在远程主机上执行单个任务或命令,而无需创建复杂的剧本( Playbook )。
配置文件解析
tree /etc/ansible/

/etc/ansible/ ansible.cfg
主配置文件,配置 ansible 工作特性 , 也可以在项目的目录中创建此文件 , 当前目录下如果也有
ansible.cfg, 则此文件优先生效 , 建议每个项目目录下 , 创建独有的 ansible.cfg 文件
/etc/ansible/ hosts 主机清单文件
/etc/ansible/roles / 存放角色的目录
Ansible 的配置文件可以放在多个不同地方 , 表示作用范围的不同,优先级从高到低顺序如下
ANSIBLE_CONFIG 环境变量
. / ansible.cfg 当前目录下的 ansible.cfg
~ / .ansible.cfg 当前用户家目录下的 .ansible.cfg
/ etc / ansible / ansible.cfg 系统默认配置文件
ansible --version | grep cfg 查看默认生效的配置文件
主配置文件
Ansible 的配置文件 /etc/ansible/ansible.cfg ,从 ansible 2.12 开始,可以 用工具生成主配置文件
生成主配置文件
ansible-config init --help 查看命令帮助文件
按照全格式方式生成配置文件
ansible-config init -t all --disabled > ansible_all.cfg
ansible-config init --disabled > ansible_default.cfg
2.3 简单实践
command 模块
ansible 的默认模块叫 command
由于是默认的,不需要 - m 来指定模块,可以对目标主机使用 "-a" 传入一个命令参数,来执行查看本机上的信息,命令格式如下: ansible < 目标主机 > - a 模块参数
查看当前主机的网卡信息
apt install net-tools -y # 否则没有 ifconfig 命令
ansible localhost -a "ifconfig ens33"

ansible 操作是通过一个 "provided hosts" 的形式来检查的目标主机,只有找到主机后才执行
主机属性:默认的主机列表有两个属性:
all 默认表示所有主机列表
localhost 默认表示本机
主机列表文件是 / etc / ansible / hosts
- 绿色:执行成功且不需要做改变的操作
- 黄色:执行成功且对目标主机做变更
-紫色:执行出现报警warning
- 红色:执行失败
ping 模块
ansible localhost - m ping #测试当前主机的存活性

ansible localhost -m ping -o # 单行显示
ansible localhost -m ping -vv # 显示更多信息, - vv 或者 - vvv
ansible-doc 命令
ansible-doc -h 查看帮助信息
常见参数
- a 显示所有帮助信息,该参数已经被 -- metadata-dump 参数替代
- l 显示所有模块 不常见的报错: / bin / sh : 1 : less : not found 解决方法: apt install - y less
- s 显示简单的帮助信息 #跟ansible-doc的命令显示一模一样
查看模块帮助
查看 command 模块帮助
查看完整帮助: ansible-doc command
查看简单帮助: ansible-doc command - s
command 有一个 chdir 的参数,用于我们在执行命令之前先切换一下工作路径,命令如下
ansible localhost -m command -a "chdir=/home ls -a"
ansible-config 命令
ansible-config 用于专门管理 ansible 的配置信息
ansible-config - h 帮助信息命令结果同上一样

2.4 主机清单
主机清单简介
ansible 的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在 inventory file 中将其分组命名 . 默认的 inventory file 为 / etc / ansible / hosts
主机清单属性样式 这些样式可以在/etc/ansible /hosts 里面进行查看

主机清单文件格式
文件风格
inventory 文件遵循 INI 文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中; 此外,当如若目标主机使用了非默认的 SSH 端口,还可以在主机名称之后使用冒号加端口号来标明。
all 表示所有主机 ungrouped 所有没有组的主机 localhost 表示本机
相关参数
ssh认证级别
ansible_ssh_host # 要连接的远程主机名
ansible_ssh_port #ssh 端口号 非默认则例: ip : 端口 10.0.0.88 : 7878
ansible_ssh_user # 默认的 ssh 用户名
ansible_ssh_pass #ssh 密码 ( 这种方式并不安全 , 建议使用 -- ask-pass 或 SSH 密钥 )
ansible_sudo_pass #sudo 密码 ( 这种方式并不安全 , 建议使用 -- ask-sudo-pass)
ansible_sudo_exe #sudo 命令路径
ansible_ssh_private_key_file #ssh 使用的私钥文件 . 适用于有多个密钥
ssh连接级别
ansible_connection
ansible_shell_type
ansible_python_interpreter
主机清单配置文件示例
[test]
10.0.0.12 ansible_connection = local # 指定本地连接 , 无需 ssh 配置
#ansible_connection=ssh 需要 StrictHostKeyChecking no
10.0.0.13 ansible_connection = ssh ansible_ssh_port = 22 ansible_ssh_user = root
ansible_ssh_password = 123456
10.0.0.15 ansible_connection = ssh ansible_ssh_user = root ansible_ssh_password = 123456
# 执行 ansible 命令时显示别名 , 如 web01
[websrvs]
web01 ansible_ssh_host = 10.0.0.21
web02 ansible_ssh_host = 10.0.0.22
[websrvs : vars]
ansible_ssh_password = 123456 passwd
组名只能有 字母、数据、下划线组成,不能用其他符号,而且不能以数字开头
2.5 主机列表
主机列表命名异常实践
增加两种样式的主机列表
echo '10.0.0.13' >> / etc / ansible / hosts
echo - e "[ansible-server]\n10.0.0.13" >> / etc / ansible / hosts
tail -n3 /etc/ansible/hosts 主机列表效果样式
使用主机列表来执行命令
ansible 10.0.0.13 -a "ls /root"

信息提示:主机组名字有问题
由于组名中包含了字母、数字、下划线之外的符号。将 ansible-server 更改为 ansible_server
sed -i 's/-ser/_ser/' /etc/ansible/hosts
tail -n3 /etc/ansible/hosts
ansible 10.0.0.13 -a "ls /root" 再次执行相同的命令 发现没有问题了
主机列表认证操作实践
ubuntu24-13 主机做 ssh 的免密认证
ssh-keygen
ssh-copy-id root@localhost
ssh-copy-id root@10.0.0.13
ansible 10.0.0.13 -a "ls /root" 再次执行相同的命令 则不需要输入密码
结论如下
通信方式: ansible 连接目标主机主要是通过 ssh 协议的方式
认证列表: ansible 会将连接成功的主机列表信息,记录到 ssh 的认证列表 ".ssh/known_hosts" 中
首次操作 WARNING 提示解决

原因分析:
这个警告信息来自 Ansible ,它指出在目标主机( IP 地址为 10.0.0.13 )上, Ansible 使用的是
位于 / usr / bin / python3 .12 的 Python 解释器。警告中提到未来如果安装了另一个 Python 解
释器,这个路径的含义可能会改变,这可能会导致 Ansible 脚本执行时出现问题。
解决这个问题,可以采取 指定 Python 解释器路径 的方法来解决
在 Ansible 的 inventory 文件(通常是 / etc / ansible / hosts )中,为特定的主机或主机组指
定一个明确的 Python 解释器路径。
获取当前的 python命令解释器 将/etc / ansible / hosts配置改成如下显示
10.0.0.13 ansible_python_interpreter =/ usr / bin / python3 .12
[ansible_server]
10.0.0.13 ansible_python_interpreter =/ usr / bin / python3 .12
再次测试没有warning提示 或者 编辑 Ansible 的配置文件
/etc/ansible/ansible.cfg
(如果没有则创建 ),在 [defaults]
部分添加如下配置:
[defaults]
interpreter_python = auto_silent
3 认证原理
ansible -h | grep '\-k,' # 可以帮助我们来做通信的连接认 证
ansible 10.0.0.13 -a "ls /root" -k # 通过参数实践, 这次需要显式输入ssh 密码进行认证
ansible ansible_server -a "ls /root" -k # 验证主机组方式, 这次需要显式输入ssh 密码进行认证
结论:
命令格式:目标主机位置可以是主机名、主机 ip 、主机组,只不过目标范围不一样了
认证方式: ansible 操作目标主机认证方式本质上是 ssh 的 known_hosts文件 ,主机列表只是中间人
3.1 主机清单属性实践
设定 hosts 文件的链接属性信息
设置 ansible 连接主机的链接属性
cp / etc / ansible / hosts{,.bak}
sed - i '0,/0.13/ s#0.13#0.13 ansible_connection=local#g' / etc / ansible / hosts
sed - i '0,/0.13/ s#0.13#0.13 ansible_ssh_pass=123456#g' / etc / ansible / hosts
tail -n3 /etc/ansible/hosts #查看
rm -rf .ssh/* 将之前的所有ssh 认证信息丢弃 , 以非免密认证的方式进行命令演示
使用同样的 ansible 命令链接主机
ansible 10.0.0.13 -m ping
ansible ansible_server -m ping

结果显示:可以通过属性的方式, ansible 与目标主机的连通。
3.2 主机认证实践
前提背景
鉴于命令行 ansible 采用 - k 参数的繁琐,主机列表采用 ansible_ssh_pass 属性容易造成安全隐患,所以安全的方式还是采用跨主机免密码的方式来认证最好。
cp /etc/ansible/hosts.bak /etc/ansible/hosts 将刚才做的操作还原
tail -n3 /etc/ansible/hosts 查看效果
跨主机免密码认证
ssh-keygen - t rsa 生成秘钥对
ssh-copy-id root @10 .0.0.13 传递秘钥文件
集群主机免密码认证 根据需求进行修改 脚本名root-ssh.sh
#!/bin/bash
# 设置环境变量
USER_NAME='root'
USER_HOME="/${USER_NAME}/.ssh"
SSH_CONFIG_FILE='/etc/ssh/ssh_config'
USER_PASSWD='123456'
HOSTADDR_PRE='10.0.0'
HOST_LIST="${HOSTADDR_PRE}.12 ${HOSTADDR_PRE}.13 ${HOSTADDR_PRE}.15"
HOSTNAME_LIST='ubuntu24-13 rocky9-12 rocky9-15'
HOSTS_FILE='/etc/hosts'
# 准备基本环境
base_env() {
apt install expect -y
[ -d "${USER_HOME}" ] && rm -rf "${USER_HOME}"
mkdir -p "${USER_HOME}"
ssh-keygen -t rsa -P "" -f "${USER_HOME}/id_rsa"
sed -i '/StrictHostKeyChecking/{s/#//; s/ask/no/}' "${SSH_CONFIG_FILE}"
}
# expect自动化交互过程
expect_auto() {
remote_host=$1
expect -c "
spawn ssh-copy-id -i ${USER_HOME}/id_rsa.pub ${USER_NAME}@$remote_host
expect {
\"*yes/no*\" { send \"yes\r\"; exp_continue }
\"*password*\" { send \"${USER_PASSWD}\r\"; exp_continue }
\"*Password*\" { send \"${USER_PASSWD}\r\"; }
}
expect eof
"
}
# 跨主机免认证环境
auth_auto() {
for i in ${HOST_LIST}; do
expect_auto "$i"
scp -rp "${HOSTS_FILE}" "${USER_NAME}@$i:${HOSTS_FILE}"
done
}
# 设定主机名
hostname_set() {
local i=0
for host in ${HOST_LIST}; do
hostname=$(echo ${HOSTNAME_LIST} | cut -d' ' -f$((i+1)))
ssh ${USER_NAME}@$host "hostnamectl set-hostname $hostname"
((i++))
done
}
# 主函数执行
main() {
# 基本环境准备
base_env
# 跨主机免密认证
auth_auto
# 设定主机名
hostname_set
}
# 执行主函数
main
4 目标主机匹配
匹配规则
匹配所有: all
正则匹配: * ( 通配符 )
逻辑或: : ( 并集 ) ,一般用于主机组
逻辑与: :& ( 交集 ) ,一般用于主机组
逻辑非: :! ( 补集 ) ,一般用于主机组
以上所有的匹配方式,针对的对象仅限于 ansible 的主机列表里面的内容
在涉及到特殊字符 ( &!* ) 的时候,一定要采用双引号或者单引号括住,但是有些特殊字符只能用单引号, 所以我们推荐直接采用单引号。
准备测试环境
我们将三台主机都加入到 ansible 的主机列表中,划分为三个小组 web 、 mysql 、 storage ,效果如下

主机清单文件
root @ubuntu24-13: ~ # vim /etc/ansible/hosts
10.0.0.13
[web]
10.0.0.12
10.0.0.13
[mysql]
10.0.0.13
10.0.0.15
[storage]
10.0.0.12
10.0.0.15
跨主机免密码认证
可以参考之前的 root-ssh.sh 脚本进行操作。
或执行如下命令
ssh-keygen - t rsa
for i in 12 13 15; do; ssh-copy-id - i ~ / .ssh / id_rsa.pub root @10 .0.0 . $i; done
ansible all -m ping 管理端主机执行如下测试命令 , 检测所有主机的连通效果
过滤实践
ansible all -m ping 测试所有主机的存活 all 关键字
ansible "*" -m ping # 使用 "*" 通配符 效果同all
ansible "10.0.0.*" -m ping # 使用网段 +"*" 通配符
ansible web -m ping # 测试 web 组所有主机存活情况
ansible all -m ping -l 10.0.0.13 # 测试所有主机中的主机,但是只显示某一台主机的效果
或与非实践
ansible web:mysql -m ping 测试 web 和 mysql 小组的全部主机存活情况
ansible web:10.0.0.15 -m ping 测试 web 和 10.0.0.15 的主机存活情况
ansible 'web:&mysql' -m ping 测试 web 和 mysql 小组的共有主机存活情况(与关系测试)
ansible ungrouped -m ping 测试不在所有小组内的主机存活情况(非关系测试)
ansible 'web:!storage' -m ping 测试所有在 web 小组,但不在 storage 小组主机的存活情况
ansible ':!web' -m ping 测试所有非 web 小组的主机存活情况
ansible 'web:mysql:!storage' -m ping 测试 web 和 mysql 共有的主机中,不在 storage 小组的主机
5 命令执行流程解读
命令过程
1. 加载 ansible 配置文件 默认加载的是 / etc / ansible / ansible.cfg
2. 加载指定模块: command
3. 获取目标主机,与主机列表进行匹配认证 / etc / ansible / hosts
4. ansible 指挥目标主机执行命令
4.1 控制端生成临时执行文件 ~ / .ansible / cp
4.2 通过连接插件,与目标主机建立连接 paramiko_ssh
4.3 通过插件功能将控制端的临时执行文件传输至目标主机的临时目录 ~ / .ansible / tmp $HOME / .ansible / tmp / ansible-tmp - 数字 / XXX.PY 文件
4.4 指挥目标主机给临时执行文件添加执行权限
4.5 目标主机执行临时文件并将结果返回给控制主机
4.6 目标主机删除临时执行 py 文件,然后断开连接
5. ansible 控制端显示结果,并退出。
5 模块实践
日常命令操作模块
所谓的日常模块,其实指的就是指挥远程目标主机执行相关命令的模块,主要有以下三个:
command 、 shel 、 scripts 模块
5.1 command模块

command 功能实践
chdir :切换到指定目录,再执行后序命令
ansible 10.0.0.12 -a "chdir=/tmp mkdir cmd_test"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test touch 815.txt"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test ls"

creates:如果指定的文件或目录存在 ,则跳过命令执行;如果不存在,则执行命令 。
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test creates=815.txt ls"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test creates=816.txt ls"

removes:如果指定的文件或目录存在,则执行命令;如果不存在,则跳过执行。
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test removes=816.txt ls"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test removes=815.txt ls"

command默认情况下,可执行命令中不允许出现命令别名 和管道符等特殊服务号
ansible 10.0.0.12 -a "echo $SHELL" 显示系统默认的 shell 类型,基于 $ 符号
ansible 10.0.0.12 -a 'export HAHA=NIHAO;echo $HAHA' 远程设置自定义变量,查看效果

对于系统默认的环境变量, ansible 可以正常执行,但涉及到一些自定义变量和特殊符号就不行了
5.2 shell模块
shell : command 对于某些特殊的符号命令执行效果不好,专用的 shell 模块可以满足要求

shell 模块实践(略)
结论:shell模块要比command模块功能强大
将shell模块替代command,设为默认模块
vim /etc/ansible/ansible.cfg
[defaults]
module_name = shell
可以看到默认模块添加成功

5.3 scripts 模块
专门用于执行复杂脚本场景的功能模块

decrypt : # 使用 Vault 控制源文件的自动解密
注意:
成功的标志 CHANGED
标准的输出信息在 stdout_lines
5.3 系统管理模块
(1)hostname 模块 ansible-doc hostname -s 查看该模块的信息
该模块可以获取主机名相关的信息
命令格式: ansible < 目标主机 > - m hostname - a 'name= 主机名 '
ansible 10.0.0.15 -m hostname -a "name=123" 设定主机名为 123
ansible 10.0.0.15 -a "hostname" 查看效果
(2)user 模块
该模块 主要是用于对远程主机的用户进行干预操作
命令格式: ansible < 目标主机 > - m user - a ' 属性 1= 值 1 属性 2= 值 2 ... 属性 n= 值 n'
创建一个定制的系统用户 webapp ,属组是 root 和 bin , uid 为 123, 禁止登陆,家目录在 /tmp/webapp
ansible 10.0.0.15 \ -m user \ -a "name=webapp \ system=yes \ groups=root,bin \ uid=123 \ comment='webapp' \ shell=/sbin/nologin \ home=/tmp/webapp \ state=present"
检测效果
ansible 10.0.0.15 -a "id webapp"
ansible 10.0.0.15 -a "getent passwd webapp"

创建一个携带ssh认证的用户
ansible 10.0.0.15 \ -m user \ -a "name=webapp1 \ home=/tmp/webapp1 \ generate_ssh_key=yes \ ssh_key_bits=2048 \ ssh_key_file=.ssh/id_rsa"
验证效果
ansible 10.0.0.16 -a "getent passwd webapp1"
ansible 10.0.0.16 -a "ls /tmp/webapp1/.ssh"

注: getent 命令可以用来察看系统的数据库中的相关记录 经常使用 getent 查看用户账号
删除用户
ansible 10.0.0.15 -m user -a "name=webapp state=absent remove=yes"
ansible 10.0.0.16 -a "getent passwd webapp"
ansible 10.0.0.15 -m user -a "name=webapp1 state=absent remove=yes"
总而言之
# 创建用户(默认会创建家目录)
ansible 10.0.0.15 -m user -a "name=webapp state=present home=/home/webapp"
# 删除用户并清理家目录
ansible 10.0.0.15 -m user -a "name=webapp state=absent remove=yes"
(3)group 模块
该模块应用于用户组的管理
命令格式: ansible < 目标主机 > - m group - a ' 属性 1= 值 1 属性 2= 值 2 ... 属性 n= 值 n'
注意:主机名的设置一定要规范, gid 一定要唯一。
创建一个用户组
ansible 10.0.0.15 -m group -a "name=wb1 system=yes gid=1150"
ansible 10.0.0.15 -a "getent group wb1"

删除用户组
ansible 10.0.0.15 -m group -a "name=wb1 state=absent"
(4)cron 模块 cron 模块主要做一些,类似于周期性任务相关的任务执行动作
(5)setup 模块 setup 主要是用来收集目标主机的属性信息的。
(6)selinux 模块 selinux 模块用作对远程主机的 selinux 机制进行管理
(7)sysctl 模块 sysctl 模块用来修改远程主机上的内核参数
(8)mount 模块 mount 模块用于管理远程主机的挂载
5.4 文件管理模块
copy模块 copy 模块主要涉及到文件的拷贝动作
fetch模块 该模块的作用于 copy 的作用正好相反,它是从远程主机拉取文件到本地目录
file模块 file 模块,用于管理远程主机的文件,操作远程文件的各种动作。
stat模块 stat 模块主要作用的场景是 文件状态查看等
压缩包模块
编辑模块
软件模块
信息模块
Playbook