Ansible自动化运维 安装使用以及常用模块(15个)
Ansible是一款基于Python开发的自动化运维工具,它通过SSH协议与远程主机通信,无需安装客户端,支持批量系统配置、程序部署和命令运行。Ansible具有模块化设计、幂等性、Playbooks剧本定制等特性,能够显著提高运维效率,适用于各种规模的IT环境和运维场景。
一、自动化运维
1. 认识自动化运维
传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
自动化运维就是要解决上面所有问题。
2. 常见自动化运维工具
- Puppet (www.puppetlabs.com)
基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。 - Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )
基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。 - Ansible (www.ansible.com )
更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
二、 Ansible自动化运维
1. Ansible介绍
Ansible是一款基于Python开发的自动化运维工具,它通过SSH协议与远程主机通信,无需安装客户端,支持批量系统配置、程序部署和命令运行。Ansible具有模块化设计、幂等性、Playbooks剧本定制等特性,能够显著提高运维效率,适用于各种规模的IT环境和运维场景。
1.1 Ansible的优势:
- 自动化运维:Ansible可以实现批量系统配置、批量程序部署、批量运行命令等功能,极大地提高了运维效率。支持通过Playbooks编排多任务,实现复杂的自动化运维场景。
- 易于使用和部署:Ansible的安装和配置相对简单,只需在主控端部署Ansible环境,被控端无需安装任何客户端软件。使用YAML语言编写Playbooks,语法简单易懂,适合人类阅读和编写。
- 强大的模块支持:Ansible拥有丰富的常规运维操作模块,如文件管理、系统服务管理、用户管理等。支持自定义模块,可以根据需求扩展Ansible的功能。
- 幂等性:Ansible的大部分模块具有幂等性,即如果目标节点已经处于期望状态,则重复执行任务不会产生副作用。
- 安全性:Ansible默认使用SSH协议进行通信,保证了数据传输的安全性。支持基于密钥的认证方式,进一步提高了安全性。
- 跨平台支持:Ansible提供Linux、Windows、Unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境。
- 可扩展性和灵活性:Ansible支持API及自定义模块,可以通过Python轻松扩展其功能。可以通过插件机制扩展Ansible的功能,如连接插件、邮件插件等。
1.2 Ansible与其他自动化运维工具的差异:(如Puppet、Chef等)
- 架构差异:Ansible采用无代理架构,无需在被管理节点上安装客户端软件,通过SSH协议直接管理。Puppet和Chef等则采用有代理架构,需要在被管理节点上安装代理软件。
- 学习曲线:Ansible的学习曲线相对平缓,适合初学者快速上手。Puppet和Chef等则可能需要更长时间的学习和熟悉。
- 配置方式:Ansible使用YAML语言编写配置文件(Playbooks),语法简单易懂。Puppet使用专用的Puppet DSL(基于Ruby),Chef则使用Ruby编写的DSL,这两种语言的语法相对复杂。
- 社区支持:Ansible拥有广泛的社区支持,模块丰富,更新迅速。Puppet和Chef等也有相应的社区支持,但可能不如Ansible活跃。
2. Ansible安装
2.1 基础准备:
(1)规划节点
IP地址 | 主机名 | 节点 |
192.168.88.51 | ansible-server | Ansible服务端(管理端) |
192.168.88.56 | ansible-client | 客户端(受控端) |
修改两个节点的主机名:
[root@localhost ~]# hostnamectl set-hostname ansible-server
[root@localhost ~]# bash
[root@localhost ~]# hostnamectl set-hostname ansible-client
[root@localhost ~]# bash
(2)关闭防火墙
关闭两个节点的SELinux服务和防火墙:
[root@ansible-server ~]# setenforce 0
[root@ansible-server ~]# systemctl stop firewalld
(3)配置阿里源
[root@ansible-server~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@ansible-server~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
2.2 安装部署ansible:
(1)安装epel扩展源和ansible
Fedora默认源中包含ansible,直接安装包既可,只需要在anisble-server上安装ansible:
[root@ansible-server ~]# yum install -y epel-release
[root@ansible-server ~]# yum install -y ansible
查看ansible-serevr节点Ansible版本:
[root@ansible-server ~]# ansible --version
(2)修改Ansible的hosts文件
在ansible-server节点上修改ansible服务器的配置文件,链接被控服务器。在最后一行添加:
[webservers]
192.168.56 ——客户端client IP地址
(3)配置 SSH 无密钥认证
Ansible 的工作原理是通过 SSH 连接到远程主机,在目标主机上执行预定义的任务或命令,所以需要配置免密。在 Ansible-server控制节点上生成 SSH 密钥对:
[root@ansible-server ~]# ssh-keygen
拷贝ssh key到远程主机,ssh的时候就不需要输入密码了。系统会提示你输入目标机器用户 root的密码。成功之后,你就可以免密码登录到目标机器了。
[root@ansible-server ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.88.56
(4)验证无密钥认证
在ansible-server服务端上可以尝试使用 SSH 命令登录到ansible-client客户端,验证无密钥认证是否配置成功:
[root@ansible-server ~]# ssh 192.168.88.56
Last login: Fri Nov 29 08:41:50 2024 from 192.168.88.51
[root@ansible-client ~]# exit
登出
Connection to 192.168.88.56 closed.
3. Ansible常用模块
3.1 ping模块:
功能:用于测试与远程主机的连通性。主机如果在线,则回复pong。
对指定的单个主机(IP地址为192.168.88.56)执行ping操作:
对inventory文件中定义的所有主机执行ping模块的操作:
[root@ansible-server ~]# ansible 192.168.88.56 -m ping
[root@ansible-server ~]# ansible all -m ping
3.2 command模块:
功能:在远程主机上执行简单的命令,不支持管道符、重定向等特殊字符。
以检查磁盘使用情况为例:对指定的单个主机(IP地址为192.168.88.56)执行df -h /boot命令,显示远程主机上/boot目录的磁盘使用情况。如下所示:
对所有主机(inventory文件中列出的所有主机)执行df -h /boot命令,显示每个远程主机上/boot目录的磁盘使用情况。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m command -a "df -h /boot"
[root@ansible-server ~]# ansible all -m command -a "df -h /boot"
检查远程主机上是否有名为root的用户当前在线(即,是否在who命令的输出中)。由于command模块不支持管道符,因此以下命令会失败:
[root@ansible-server ~]# ansible 192.168.88.56 -m command -a "who | grep root"
command模块尝试将整个字符串"who | grep user1"作为单个命令来执行,导致who命令尝试访问名为who | grep user1的伪终端(tty),这显然是不存在的。
相比之下,shell模块支持管道符。
3.3 shell模块:
功能:在远程主机上执行复杂的命令,支持管道符、重定向等。
shell模块支持管道符,因此上面command模块执行不了的命令会成功执行:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a "who | grep root"
192.168.88.56 | CHANGED | rc=0 >>
root tty1 2024-09-27 08:16
root pts/0 2024-11-28 13:10 (192.168.88.51)
root pts/1 2024-11-28 13:38 (192.168.88.51)
对远程主机 192.168.88.56 执行一个 shell 命令,在 shell 中定义一个变量 a 并赋值为 10086,输出变量 a 的值。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'a=10086;echo $a'
查看远程主机192.168.88.56的系统版本,如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'cat /etc/os-release | grep PRETTY_NAME | cut -d "=" -f2'
3.4 script模块:
功能:在远程主机上执行本地的Shell脚本文件。
在ansible-server控制节点编写一个脚本:
[root@ansible-server ~]# vi check_file.sh
#!/bin/bash
# 要检查的文件路径
FILE_PATH="/etc/yum.conf"
# 使用if语句检查文件是否存在
if [ -e "$FILE_PATH" ]; then
echo "文件 $FILE_PATH 存在。" > /root/test
else
echo "文件 $FILE_PATH 不存在。" > /root/test
fi
让客户端ansible-client节点执行该脚本:
[root@ansible-server ~]# ansible 192.168.88.56 -m script -a '/root/check_file.sh'
查看/root/test文件,检查脚本是否执行成功:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'cat /root/test'
3.5 copy模块:
功能:将本地文件复制到远程主机的指定位置。
常用参数:
owner |
设置目标文件的拥有者。 |
src |
指定要复制到远程目标节点上的本地源文件的路径。 |
group |
设置目标文件的所属组。 |
mode |
设置目标文件的权限。 |
backup |
在覆盖文件之前,先备份目标文件。如果设置为 yes,则 Ansible 会在复制文件之前,将目标文件备份为 .ansible_backup 后缀的文件。 |
content |
直接在命令行中指定要复制到目标文件的内容(而不是从源文件中读取)。这个参数与 src 参数互斥。 |
force |
默认为 yes,表示如果目标文件已经存在,则覆盖它。如果设置为 no,则只有当目标文件不存在时才会复制。 |
(1)复制单个文件(src):
写一个example.txt文件并写入内容,将该文件复制到被管理主机ansible-client节点的/etc目录下。如下所示:
[root@ansible-server ~]# echo "hello" > /root/example.txt
[root@ansible-server ~]# ansible 192.168.88.56 -m copy -a 'src=/root/example.txt dest=/etc/yum.txt'
(2)复制文件并设置权限(mode):
除了复制文件,还可以使用 copy 模块来设置复制后的文件权限。例如,你想要复制 example.txt 文件,并设置它的权限为 755(所有者读写执行,组和其他用户只读写)。
[root@ansible-server ~]# ansible 192.168.88.56 -m copy -a 'src=/root/example.txt dest=/etc/yum.txt mode=644'
(3)复制文件并更改所有者(owner):
有时候,可能需要更改复制后的文件所有者。例如,想要将 example.txt 文件复制到目标节点,并将其所有者更改为 otheruser。
首先通过SSH连接到客户端,然后用useradd命令来创建新用户,最后更改所有者:
(4)备份配置文件(backup):
假设有一个配置文件 yum.conf,您想将其从控制节点复制到目标节点的 /root 目录下,并在复制之前对目标位置上的任何现有文件进行备份。
[root@ansible-server ~]# ansible 192.168.88.56 -m copy -a 'src=/etc/yum.conf dest=/root/config.conf backup=yes'
3.6 file模块:
功能:在远程主机上创建、删除文件或目录,以及修改文件权限和所有权。
常用参数:
path |
指定要操作的文件或目录的路径。这是必需参数。 |
state |
指定文件或目录的期望状态。常用的值包括touch(创建空文件)、directory(创建目录)、link(创建符号链接)、hard(创建硬链接)、absent(删除文件或目录)等。 |
mode |
设置文件或目录的权限。 |
owner |
设置文件或目录的所有者。 |
group |
设置文件或目录的所属组。 |
selevel |
设置文件的SELinux安全级别(如果适用)。 |
setype |
设置文件的SELinux类型(如果适用)。 |
recurse |
当设置为yes时,mode、owner和group参数将递归地应用于目录中的所有文件和子目录。 |
(1)创建一个空文件:
在远程主机ansible-client的/tmp目录下创建一个名为testfile的空文件,如下所示:
root@ansible-server ~]# ansible 192.168.88.56 -m file -a "path=/tmp/testfile state=touch"
(2)删除一个文件:
删除远程主机上之前创建的testfile文件:
[root@ansible-server ~]# ansible 192.168.88.56 -m file -a "path=/tmp/testfile state=absent"
(3)创建目录及其内容的权限:
在远程主机192.168.88.56上,在/root目录下创建test目录,所有者是root用户,所属组是root组,权限是744(所有者有读、写、执行权限,组用户和其他用户有读和执行权限)。如果目录不存在,Ansible将会创建它。
[root@ansible-server ~]# ansible 192.168.88.56 -m file -a 'path=/root/test mode=744 owner=root group=root state=directory'
(4)创建软连接:
在远程主机192.168.88.56上,使用file模块来创建一个符号链接(也称为软链接或symlink):
[root@ansible-server ~]# ansible 192.168.88.56 -m file -a 'path=/opt/test src=/root/test state=link'
3.7 fetch模块:
功能:从远程主机上获取文件,并保存到本地。与copy模块不同,fetch模块会将文件保存到本地的一个以远程主机名命名的子目录中。
常用参数:
src |
指定要获取的文件或目录在远程主机上的路径。这是必需参数。 |
dest |
指定文件或目录被复制到Ansible控制节点上的路径。这也是必需参数。通常,这个路径会包含一个子目录占位符(如%h),它会被替换为远程主机的名称或IP地址。 |
flat |
当设置为yes时,fetch模块不会创建以远程主机名命名的子目录,而是直接将文件或目录复制到dest指定的目录中。默认情况下,这个参数是no。 |
size |
限制抓取文件的大小 |
force |
即使本地文件已经存在了仍旧抓取,默认yes,设置为no只有当远程文件比本地文件新或不同才执行抓取 |
fail_on_missing |
当设置为yes时,如果src指定的文件或目录在远程主机上不存在,则任务会失败。默认情况下,这个参数是yes。如果设置为no,则任务会继续执行,即使文件或目录不存在也不会失败。 |
validate_checksum |
当设置为yes时,fetch模块会在复制文件之前验证其校验和(如果提供了校验和的话)。这可以用于确保文件的完整性。默认情况下,这个参数是no。 |
(1)基本用法:
连接到192.168.88.56远程主机,尝试获取/etc/passwd文件,并将其保存到Ansible控制节点的/tmp/fetched_files/目录中。每个远程主机的文件都将被保存在一个以该主机名命名的子目录中,以保持组织性。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m fetch -a "src=/etc/passwd dest=/tmp/fetched_files/"
(2)使用flat参数:
从 IP 地址为 192.168.88.56 的远程主机上获取 Nginx 的配置文件 /etc/nginx/nginx.conf,并将其直接保存到本地控制节点的 /tmp/logs/ 目录下,而不会创建一个以远程主机名命名的子目录。如下所示:
[root@ansible-server ~]# ssh 192.168.88.56
Last login: Mon Dec 2 13:50:46 2024 from 192.168.88.51
[root@ansible-client ~]# yum install -y nginx
[root@ansible-client ~]# exit
登出
Connection to 192.168.88.56 closed.
[root@ansible-server ~]# ansible 192.168.88.56 -m fetch -a "src=/etc/nginx/nginx.conf dest=/tmp/logs/ flat=yes"
192.168.88.56 | CHANGED => {
"changed": true,
"checksum": "48c051ec43da31e78f5639920824cb98a571eb72",
"dest": "/tmp/logs/nginx.conf",
"md5sum": "3a3cca1b709148cf7d344fde02e69245",
"remote_checksum": "48c051ec43da31e78f5639920824cb98a571eb72",
"remote_md5sum": null
}
(3)处理源文件不存在的情况:
这个命令会尝试从192.168.88.56 的远程主机上的/data/backup/nonexistent_file路径拉取文件(这个文件实际上是不存在的),如果源文件不存在,任务不会失败,并且不会有文件被保存到本地控制节点。如下所示:
[root@ansible-server~]#ansible 192.168.88.56 -m fetch -a "src=/data/backup/nonexistent_file dest=/tmp/backups/ fail_on_missing=no"
(4)验证文件校验和:
从 IP 地址为 192.168.88.56 的远程主机上获取 Nginx 的配置文件 /etc/nginx/nginx.conf,并将其保存到本地控制节点的 /tmp/logs/ 目录下的一个以远程主机名命名的子目录中,同时在文件传输完成后验证文件的校验和以确保文件完整性。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m fetch -a "src=/etc/nginx/nginx.conf dest=/tmp/logs/ validate_checksum=yes"
3.8 cron模块:
功能:在远程主机上管理定时任务(cron jobs)。
常用参数:
name |
指定 cron 作业的名称。这是一个唯一标识符,用于区分不同的 cron 作业。在创建或删除作业时,你需要指定这个名称。 |
minute、hour、day、month、weekday |
这些参数用于指定 cron 作业的执行时间。你可以使用具体的数字、星号(*)表示任意值、逗号(,)分隔多个值、连字符(-)表示范围,或者斜杠(/)表示步长。 |
job |
指定要执行的命令或脚本。 |
state |
指定 cron 作业的状态。可以是 present(默认,表示创建或保持作业存在)或 absent(表示删除作业) |
user |
指定运行 cron 作业的用户。如果不指定,则默认使用 root 用户。 |
cron_file |
指定一个包含 cron 作业的文件的路径。如果指定了这个参数,那么 job 参数将被忽略,并且 cron 模块将只管理该文件中的作业。 |
disabled |
如果设置为 yes,则禁用 cron 作业,但不会删除它。这相当于在 cron 作业的开头添加一个 # 符号。 |
backup |
在修改 cron 作业之前,是否备份原始 cron 配置。如果设置为 yes,则会在 /var/backup/ 目录下创建一个备份文件。 |
(1)创建一个每天凌晨1点执行的备份作业:
在远程主机 192.168.88.56 上创建一个名为 daily_backup 的 cron 作业,它会在每天凌晨1点执行 rsync 命令来备份 /data/ 目录到 /backup/ 目录。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m cron -a "name='daily_backup' hour='1' job='/usr/bin/rsync -avz /data/ /backup/'"
(2)创建一个每分钟执行一次的监控作业:
创建一个名为 system_monitor 的 cron 作业,它会在每分钟执行一次 check_system_status.sh 脚本来监控系统状态。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m cron -a "name='system_monitor' minute='*/1' job='/usr/bin/check_system_status.sh'"
(3)删除一个已存在的作业:
删除远程主机 192.168.88.56 上名为daily_backup的 cron 作业。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m cron -a "name='old_backup_job' state=absent"
(4)备份并修改一个作业:
修改远程主机 192.168.88.56 上名为 existing_job 的 cron 作业的执行命令为 new_command,并在修改之前备份原始的 cron 配置。。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m cron -a "name='existing_job' job='/usr/bin/new_command' backup=yes"
3.9 yum模块:
功能:在远程主机上安装、卸载或更新软件包(适用于基于RPM的系统,如CentOS)。
常用参数:
name |
要安装、升级或删除的软件包名称。可以是一个包名,也可以是一个包含多个包名的列表(在Ansible playbook中使用)。 |
state |
指定软件包的状态。常用的值有: present:确保软件包已安装。如果软件包未安装,则进行安装;如果已安装,则不进行任何操作(除非版本不匹配且update_only为no)。 absent:确保软件包未安装。如果软件包已安装,则进行卸载。 latest:确保安装的软件包是最新版本。如果已安装的版本不是最新版本,则进行升级。 |
update_only |
当state=present时,如果设置为yes,则仅在软件包需要升级时才进行安装或升级操作。默认为no。 |
enablerepo |
指定要启用的YUM仓库ID。可以是一个仓库ID,也可以是一个包含多个仓库ID的列表。 |
disablerepo |
指定要禁用的YUM仓库ID。可以是一个仓库ID,也可以是一个包含多个仓库ID的列表。 |
list |
如果设置为installed、available或repos之一,则列出相应的软件包信息,而不是执行安装、升级或删除操作。 |
conf_file |
指定YUM配置文件的路径。如果未设置,则使用默认的YUM配置文件。 |
disable_gpg_check |
如果设置为yes,则在安装或升级软件包时禁用GPG签名检查。默认为no。 |
(1)安装net-tools软件包:
在IP为192.168.88.56的远程节点上安装net-tools软件包(如果尚未安装)。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m yum -a 'name=net-tools state=present'
(2)使用netstat命令检测是否正确安装并且可以使用:
在IP地址为192.168.88.56的远程主机上执行netstat -ntpl命令,以列出该主机上所有正在监听中的TCP端口及其对应的程序信息。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'netstat -ntpl'
(3)卸载net-tools软件包:
在IP地址为192.168.88.56的远程主机上执行yum模块的任务,以卸载(或确保未安装)名为net-tools的软件包。如下所示:
root@ansible-server ~]# ansible 192.168.88.56 -m yum -a 'name=net-tools state=absent'
(4)检测是否卸载成功:
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'echo $?'
3.10 service模块:
功能:在远程主机上管理服务(如启动、停止、重启服务)。
常用参数:
name |
指定要管理的服务的名称。这是service模块必须提供的参数。 |
state |
指定服务的目标状态。常用的值包括started(启动服务)、stopped(停止服务)、restarted(重启服务)和reloaded(重新加载服务配置)。 |
enabled |
指定服务是否应在系统启动时自动启动。值为yes或no。 |
use |
指定要使用的init系统,如sysvinit、upstart或systemd。通常,Ansible会自动检测并使用正确的管理工具,但在某些情况下,明确指定use选项可能更可靠。 |
daemon_reload |
在使用systemd管理服务时,如果修改了服务的unit文件或创建了新服务,通常需要重新加载systemd管理器配置。此时,可以将daemon_reload设置为yes来强制重新加载配置。 |
关闭IP为192.168.88.56的远程节点的防火墙:
[root@ansible-server ~]# ansible 192.168.88.56 -m service -a 'name=firewalld state=stopped'
[root@ansible-server ~]# ansible 192.168.88.56 -m shell -a 'systemctl status firewalld'
再次启动防火墙:
[root@ansible-server ~]# ansible 192.168.88.56 -m service -a 'name=firewalld state=started'
再次查看防火墙状态:
3.11 user模块:
功能:在远程主机上管理用户账户。
常用参数:
name |
指定要管理的用户的名称。这是user模块必须提供的参数。 |
state |
指定用户的目标状态。常用的值包括present(确保用户存在,如果不存在则创建它)和absent(确保用户不存在,如果存在则删除它)。 |
uid |
指定用户的UID(用户标识符)。如果未指定,系统将自动分配一个唯一的UID。 |
group |
指定用户的主要组。可以是组名或GID(组标识符)。如果未指定,系统将使用默认的主要组。 |
groups |
指定用户所属的附加组。可以是以逗号分隔的组名列表。如果指定了append=yes,则用户将被添加到这些附加组,同时保留其现有的组成员身份。 |
password |
设置用户的密码。密码必须是加密后的哈希值,可以使用openssl passwd或其他加密工具生成。 |
shell |
指定用户的默认登录shell。如果未指定,系统将使用默认的shell。 |
createhome |
如果为yes,则创建用户的家目录。默认为yes。 |
remove |
在删除用户时,如果为yes,则同时删除用户的家目录和邮件文件。默认为no。 |
password_lock |
如果为yes,则锁定用户账户;如果为no,则解锁用户账户。 |
append |
在添加用户到多个组时,如果为yes,则保留用户现有的组成员身份。默认为no(即替换现有组)。 |
(1)创建用户并设置密码:
在IP为192.168.88.56的远程节点主机上创建名为johndoe的用户,并设置密码。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m user -a "name=johndoe password='<hashed_password>'"
(2)创建用户并设置家目录:
在IP为192.168.88.56的远程节点主机上创建名为johndoe的用户,并设置其家目录为/home/johndoe。如果createhome=yes,则会自动创建家目录。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m user -a "name=johndoe home=/home/johndoe createhome=yes"
(3)修改用户属性:
修改名为johndoe的用户的默认shell为/bin/zsh,并添加注释信息'John Doe Developer'。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m user -a "name=johndoe shell=/bin/zsh comment='John Doe Developer'"
(4)锁定用户账户:
锁定名为johndoe的用户账户,使其无法登录。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m user -a "name=johndoe password_lock=yes"
(5)解锁用户账户:
[root@ansible-server ~]# ansible 192.168.88.56 -m user -a "name=johndoe password_lock=no"
3.12 group模块:
功能:在远程主机上管理用户组。
常用参数:
name |
要管理的用户组的名称。这是必需参数。 |
state |
用户组的目标状态。可选值为present(确保用户组存在)和absent(确保用户组不存在)。默认值为present。 |
gid |
用户组的GID(全局唯一标识符)。如果指定了此参数,Ansible将尝试创建具有指定GID的用户组。如果组已经存在但GID不同,则会报错(除非使用了force参数,但请注意force参数可能会删除并重新创建组,从而导致数据丢失)。 |
system |
如果设置为yes,则创建系统组。系统组通常用于系统进程和服务,而不是普通用户。默认值为no。 |
在远程主机192.168.88.56上创建一个名为developers的用户组。如果组已经存在,则不会进行任何更改。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m group -a "name=developers state=present"
3.13 mount模块:
功能:在远程主机上管理文件系统挂载。
常用参数:
name |
挂载点的路径。这是必需参数。 |
src |
要挂载的设备或源路径。对于本地文件系统(如ext4、xfs等),这是设备文件(如/dev/sda1);对于网络文件系统(如NFS、CIFS等),这是远程服务器的地址和导出的路径。 |
fstype |
文件系统类型。例如,ext4、xfs、nfs、cifs等。 |
opts |
挂载选项。这是一个字符串,可以包含多个选项,用逗号分隔。例如,defaults,noatime,ro等。 |
state |
挂载点的目标状态。可选值为mounted(确保挂载点挂载)、unmounted(确保挂载点卸载)、present(确保挂载点存在,但不一定会挂载或卸载)、absent(确保挂载点不存在,通常会卸载并删除挂载点目录,但这不是mount模块的标准行为,可能需要结合其他模块使用)。默认值为mounted。 |
创建一个挂载点目录/mnt/iso,假设你有一个ISO镜像文件/dev/cdrom,并且你想将其挂载到/mnt/iso目录上以便访问其内容。如下所示:
[root@ansible-server ~]# mkdir -p /mnt/iso
[root@ansible-server ~]# ansible 192.168.88.56 -m mount -a "name=/mnt/iso src=/dev/cdrom fstype=iso9660 opts='loop' state=mounted"
3.14 hostname模块:
功能:在远程主机上更改主机名。
常用参数:
name |
指定新的主机名。这是hostname模块的核心参数,用于设置远程主机的新主机名。 |
use |
定义主机名的类型。在某些系统上,可能有多种类型的主机名(例如,静态、瞬态等)。这个参数允许你指定要更改的是哪种类型的主机名。但是,需要注意的是,并不是所有系统都支持这个参数,且其默认值和行为可能因系统而异。因此,在使用时需要根据目标系统的具体情况进行调整。 |
将IP为192.168.88.56的远程主机的主机名更改为new-server。如下所示:
[root@ansible-server ~]# ansible 192.168.88.56 -m hostname -a "name=new-server"
3.15 setup模块:
功能:收集远程主机的系统信息。
常用参数:
filter |
这个参数允许你指定要收集的信息类型。通过提供一个逗号分隔的列表,你可以限制setup模块只返回你感兴趣的信息。例如,如果你只想收集关于操作系统的信息,你可以使用filter=ansible_os_family。 |
gather_subset |
与filter类似,这个参数也用于指定要收集的信息类型,但它提供了更细粒度的控制。你可以指定一个或多个预定义的子集(如all、min、hardware、network、virtual、facter、ohai等),以收集不同范围的信息。 |
fact_path |
这个参数允许你指定一个自定义的路径,用于查找包含额外事实的脚本或文件。这在你想添加自定义事实时非常有用。 |
收集远程主机ansible-client上的所有系统信息,并以JSON格式返回。返回的信息包括操作系统的版本、主机名、IP地址、内存大小、磁盘空间等。
[root@ansible-server ~]# ansible 192.168.88.56 -m setup
更多推荐
所有评论(0)