一、自动化运维

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 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐