Ansible 点对点命令快速入门指南示例
创始人
2024-03-02 06:55:17
0

之前,我们写了一篇有关 Ansible 安装和配置 的文章。在那个教程中只包含了一些使用方法的示例。如果你是 Ansible 新手,建议你阅读上篇文章。一旦你熟悉了,就可以继续阅读本文了。

默认情况下,Ansible 仅使用 5 个并行进程。如果要在多个主机上执行任务,需要通过添加 -f [进程数] 选项来手动设置进程数。

什么是 点对点 ad-hoc 命令?

点对点命令用于在一个或多个受控节点上自动执行任务。它非常简单,但是不可重用。它使用 /usr/bin/ansible 二进制文件执行所有操作。

点对点命令最适合运行一次的任务。例如,如果要检查指定用户是否可用,你可以使用一行命令而无需编写剧本。

为什么你要了解点对点命令?

点对点命令证明了 Ansible 的简单性和强大功能。从 2.9 版本开始,它支持 3389 个模块,因此你需要了解和学习要定期使用的 Ansible 模块列表。

如果你是一个 Ansible 新手,可以借助点对点命令轻松地练习这些模块及参数。

你在这里学习到的概念将直接移植到剧本中。

点对点命令的一般语法:

ansible [模式] -m [模块] -a "[模块选项]"

点对点命令包含四个部分,详细信息如下:

部分描述
ansible命令
模式输入清单或指定组
模块运行指定的模块名称
模块选项指定模块参数

如何使用 Ansible 清单文件

如果使用 Ansible 的默认清单文件 /etc/ansible/hosts,你可以直接调用它。否则你可以使用 -i 选项指定 Ansible 清单文件的路径。

什么是模式以及如何使用它?

Ansible 模式可以代指某个主机、IP 地址、清单组、一组主机或者清单中的所有主机。它允许你对它们运行命令和剧本。模式非常灵活,你可以根据需要使用它们。

例如,你可以排除主机、使用通配符或正则表达式等等。

下表描述了常见的模式以及用法。但是,如果它不能满足你的需求,你可以在 ansible-playbook 中使用带有 -e 参数的模式中的变量。

描述模式目标
所有主机all(或 *对清单中的所有服务器运行 Ansible
一台主机host1只针对给定主机运行 Ansible
多台主机host1:host2(或 host1,host2对上述多台主机运行 Ansible
一组webserverswebservers 群组中运行 Ansible
多组webservers:dbserverswebservers 中的所有主机加上 dbservers 中的所有主机
排除组webservers:!atlantawebservers 中除 atlanta 以外的所有主机
组之间的交集webservers:&stagingwebservers 中也在 staging 的任何主机

什么是 Ansible 模块,它干了什么?

模块,也称为“任务插件”或“库插件”,它是一组代码单元,可以直接或通过剧本在远程主机上执行指定任务。

Ansible 在远程目标节点上执行指定模块并收集其返回值。

每个模块都支持多个参数,可以满足用户的需求。除少数模块外,几乎所有模块都采用 key=value 参数。你可以一次添加带有空格的多个参数,而 commandshell 模块会直接运行你输入的字符串。

我们将添加一个包含最常用的“模块选项”参数的表。

列出所有可用的模块,运行以下命令:

$ ansible-doc -l

运行以下命令来阅读指定模块的文档:

$ ansible-doc [模块]

1)如何在 Linux 上使用 Ansible 列出目录的内容

可以使用 Ansible command 模块来完成这项操作,如下所示。我们列出了 node1.2g.labnod2.2g.lab* 远程服务器上 daygeek 用户主目录的内容。

$ ansible web -m command -a "ls -lh /home/daygeek"

node1.2g.lab | CHANGED | rc=0 >>
total 12K
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Desktop
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Documents
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Downloads
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Music
-rwxr-xr-x. 1 daygeek daygeek 159 Mar  4  2019 passwd-up.sh
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Pictures
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Public
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Templates
-rwxrwxr-x. 1 daygeek daygeek 138 Mar 10  2019 user-add.sh
-rw-rw-r--. 1 daygeek daygeek  18 Mar 10  2019 user-list1.txt
drwxr-xr-x. 2 daygeek daygeek   6 Feb 15  2019 Videos

node2.2g.lab | CHANGED | rc=0 >>
total 0
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Desktop
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Documents
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Downloads
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Music
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Pictures
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Public
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Templates
drwxr-xr-x. 2 daygeek daygeek 6 Nov  9 09:55 Videos

2)如何在 Linux 使用 Ansible 管理文件

Ansible 的 copy 模块将文件从本地系统复制到远程系统。使用 Ansible command 模块将文件移动或复制到远程计算机。

$ ansible web -m copy -a "src=/home/daygeek/backup/CentOS7.2daygeek.com-20191025.tar dest=/home/u1" --become

node1.2g.lab | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
    "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
    "gid": 0,
    "group": "root",
    "md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 30720,
    "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.474042-118186643704900/source",
    "state": "file",
    "uid": 0
}

node2.2g.lab | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
    "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
    "gid": 0,
    "group": "root",
    "md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 30720,
    "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.4793239-237229399335623/source",
    "state": "file",
    "uid": 0
}

我们可以运行以下命令进行验证:

$ ansible web -m command -a "ls -lh /home/u1" --become

node1.2g.lab | CHANGED | rc=0 >>
total 36K
-rw-r--r--. 1 root root 30K Jan 22 14:56 CentOS7.2daygeek.com-20191025.tar
-rw-r--r--. 1 root root  25 Dec  9 03:31 user-add.sh

node2.2g.lab | CHANGED | rc=0 >>
total 36K
-rw-r--r--. 1 root root 30K Jan 23 02:26 CentOS7.2daygeek.com-20191025.tar
-rw-rw-r--. 1 u1   u1    18 Jan 23 02:21 magi.txt

要将文件从一个位置复制到远程计算机上的另一个位置,使用以下命令:

$ ansible web -m command -a "cp /home/u2/magi/ansible-1.txt /home/u2/magi/2g" --become

移动文件,使用以下命令:

$ ansible web -m command -a "mv /home/u2/magi/ansible.txt /home/u2/magi/2g" --become

u1 用户目录下创建一个名为 ansible.txt 的新文件,运行以下命令:

$ ansible web -m file -a "dest=/home/u1/ansible.txt owner=u1 group=u1 state=touch" --become

u1 用户目录下创建一个名为 magi 的新目录,运行以下命令:

$ ansible web -m file -a "dest=/home/u1/magi mode=755 owner=u2 group=u2 state=directory" --become

u1 用户目录下的 ansible.txt* 文件权限更改为 777,运行以下命令:

$ ansible web -m file -a "dest=/home/u1/ansible.txt mode=777" --become

删除 u1 用户目录下的 ansible.txt 文件,运行以下命令:

$ ansible web -m file -a "dest=/home/u2/magi/ansible-1.txt state=absent" --become

使用以下命令删除目录,它将递归删除指定目录:

$ ansible web -m file -a "dest=/home/u2/magi/2g state=absent" --become

3)用户管理

你可以使用 Ansible 轻松执行用户管理活动。例如创建、删除用户以及向一个组添加用户。

$ ansible all -m user -a "name=foo password=[crypted password here]"

运行以下命令删除用户:

$ ansible all -m user -a "name=foo state=absent"

4)管理包

使用合适的 Ansible 包管理器模块可以轻松地管理安装包。例如,我们将使用 yum 模块来管理 CentOS 系统上的软件包。

安装最新的 Apache(httpd):

$ ansible web -m yum -a "name=httpd state=latest"

卸载 Apache(httpd) 包:

$ ansible web -m yum -a "name=httpd state=absent"

5)管理服务

使用以下 Ansible 模块命令可以在 Linux 上管理任何服务。

停止 httpd 服务:

$ ansible web -m service -a "name=httpd state=stopped"

启动 httpd 服务:

$ ansible web -m service -a "name=httpd state=started"

重启 httpd 服务:

$ ansible web -m service -a "name=httpd state=restarted"

via: https://www.2daygeek.com/ansible-ad-hoc-command-quick-start-guide-with-examples/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

ansible完全攻略
ansible完全攻略 ansible安装: apt安装: apt...
2025-05-31 03:08:02
不在运行中的EC2实例上运...
是的,可以在不运行中的EC2实例上运行Terraform/Ansi...
2025-01-11 16:31:42
不使用Vagrant的情况...
要在不使用Vagrant的情况下使用Ansible和Virtual...
2024-12-29 12:31:06
不使用ansible_ho...
在Ansible中,可以使用inventory_hostname来...
2024-12-28 10:00:32
不使用 -u 标志的Ans...
要在不使用 -u 标志的情况下实现Ansible特权升级,可以使用...
2024-12-28 07:01:52
不明确的ansible变量...
在Ansible中,可以使用default过滤器来处理不明确的变量...
2024-12-26 22:31:12

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...