ad hoc 命令行简介
Ansible ad hoc 命令使用 /usr/bin/ansible
命令行工具在一个或多个托管节点上自动执行单个任务。临时命令快速简便,但不可重用。那么,为什么要学习临时命令呢?临时命令展示了 Ansible 的简单性和功能。您在这里学习的概念将直接移植到剧本语言。
为什么使用临时命令
临时命令非常适合您很少重复的任务。例如,如果您想在圣诞节假期关闭实验室中的所有机器,您无需编写剧本即可在 Ansible 中执行快速单行说明。
临时命令如下所示:
1
ansible [pattern] -m [module] -a "[module options]"
对于更复杂的选项结构,
-a
选项通过key=value
语法或以{
开头和以}
结尾的 JSON 字符串接受选项。
临时任务用例
临时任务可用于重新启动服务器、复制文件、管理软件包和用户等。您可以在临时任务中使用任何 Ansible 模块。临时任务,如剧本,使用声明模型,计算和执行达到指定最终状态所需的操作。他们通过在开始前检查当前状态来获得某种形式的幂等性,除非当前状态与指定的最终状态不同,否则什么都不做。
重启服务器
Ansible 命令行实用程序的默认模块是 ansible.builtin.command
模块。您可以使用临时任务调用命令模块,并重新启动 Atlanta 的所有Web服务器,一次10个。在 Ansible 做到这一点之前,您必须在库存中将 Atlanta 的所有服务器列在一个名为 [Atlanta]
的组中,并且您必须拥有该组中每台机器的工作 SSH 凭据。
重新启动
[Atlanta]
组中的所有服务器1
ansible atlanta -a "/sbin/reboot"
默认情况下,Ansible 仅同时使用 5 个进程。如果您的主机超过分叉计数的值设置,Ansible 会与他们交谈,但这需要更长的时间。要使用 10 个并行分叉重新启动
[Aalanta]
服务器1
ansible atlanta -a "/sbin/reboot" -f 10
/usr/bin/ansible
将默认从您的用户帐户运行。要以其他用户身份连接:1
ansible atlanta -a "/sbin/reboot" -f 10 -u username
重新启动可能需要权限升级。您可以使用 become 关键字连接到服务器,并以 root 用户身份运行命令:
1
ansible atlanta -a "/sbin/reboot" -f 10 -u username --become [--ask-become-pass]
如果您添加
--ask-become-pass
或-K
,Ansible 会提示您密码用于特权升级(sudo/su/pfexec/doas/etc)。
注意: 命令模块不支持管道和重定向等扩展shell语法(尽管shell变量始终有效)。如果您的命令需要特定于shell的语法,请使用 shell 模块。到目前为止,我们所有的示例都使用了默认的 “command” 模块。要使用其他模块,请通过
-m
作为模块名称。例如,要使用ansible.builtin.shell
模块:1
ansible raleigh -m ansible.builtin.shell -a 'echo $TERM'
使用 Ansible ad hoc CLI(而不是Playbooks)运行任何命令时,请特别注意 shell 引用规则,以便本地 shell 保留变量并将其传递给 Ansible。例如,在上面的示例中使用双引号而不是单引号将计算您所用框上的变量。
管理文件
临时任务可以利用 Ansible 和 SCP 的力量并行将许多文件传输到多台机器。
要将文件直接传输到
[Atlanta]
组中的所有服务器:1
ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"
如果您计划重复这样的任务,请使用剧本中的
ansible.builtin.template
模块。ansible.builtin.file
模块允许更改文件的所有权和权限。这些相同的选项也可以直接传递到copy
模块:1
2ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600"
ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"file
模块还可以创建类似于mkdir -p
的目录1
ansible webservers -m ansible.builtin.file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
删除目录(递归)和删除文件
1
ansible webservers -m ansible.builtin.file -a "dest=/path/to/c state=absent"
管理包
还可以使用临时任务使用软件包管理模块(如 yum)在托管节点上安装、更新或删除软件包。软件包管理模块支持安装、删除和一般管理软件包的常见功能。软件包管理器的某些特定功能可能不存在于 Ansible 模块中,因为它们不是一般软件包管理的一部分。
为了确保在不更新软件包的情况下安装它:
1
ansible webservers -m ansible.builtin.yum -a "name=acme state=present"
为了确保安装软件包的特定版本
1
ansible webservers -m ansible.builtin.yum -a "name=acme-1.5 state=present"
为了确保软件包处于最新版本
1
ansible webservers -m ansible.builtin.yum -a "name=acme state=latest"
为确保未安装软件包,请按照以下步骤操作:
1
ansible webservers -m ansible.builtin.yum -a "name=acme state=absent"
Ansible 有用于在许多平台下管理软件包的模块。如果您的软件包管理器没有模块,您可以使用 command 模块安装软件包或为您的软件包管理器创建模块。
管理用户和组
您可以通过临时任务在托管节点上创建、管理和删除用户帐户:
1
2
3ansible all -m ansible.builtin.user -a "name=foo password=<crypted password here>"
ansible all -m ansible.builtin.user -a "name=foo state=absent"有关所有可用选项的详细信息,请参阅 ansible.builtin.user 模块文档,包括如何操作组和组成员资格。
管理服务
确保在所有 webservers 上启动服务
1
ansible webservers -m ansible.builtin.service -a "name=httpd state=started"
或者,在所有 webservers 上重新启动服务
1
ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted"
确保服务已停止
1
ansible webservers -m ansible.builtin.service -a "name=httpd state=stopped"
收集 Facts
facts 代表一个系统的发现变量。您可以使用 Facts 来实现任务的有条件执行,但也只是为了获取有关您系统的临时信息。
查看所有 facts
1
ansible all -m ansible.builtin.setup
您还可以过滤此输出以仅显示某些 facts,有关详细信息,请参阅 ansible.builtin.setup 模块文档。
Ansible 命令行工具选项
大多数用户都熟悉 Ansible 和 Ansible-playbook,但这些并不是 Ansible 提供的唯一实用程序。以下是 Ansible 公用事业的完整列表。每个页面都包含实用程序的描述和支持参数的列表。
- ansible: 是一个 /farework/API 用于做 “远程事物” 的超简单工具 。此命令允许您针对一组主机定义和运行单个任务 “剧本”
- ansible-config: 配置命令行类
- ansible-console: 一个 REPL,允许从内置选项卡完成(基于 dominis 的 ansible-shell)的漂亮外壳中对选定的 inventory 运行临时任务。
- ansible-doc: 显示有关 Ansible 库中安装的模块的信息。它显示插件及其简短描述的简洁列表,提供文档字符串的打印输出,并且可以创建一个简短的“片段”,可以粘贴到 playbook 中。
- ansible-galaxy: 管理 Ansible 角色和集合的命令。
- ansible-inventory: 用于在 Ansible 看到时显示或转储配置的 inventory
- ansible-playbook: 运行 Ansible 剧本的工具,这是一个配置和多节点部署系统。
- ansible-pull: 用于在每个托管节点上提取 sible 的远程副本,每个设置都通过 cron 运行,并通过源存储库更新 playbook 源。这将 ansible 的默认推送架构反转为拉取架构,该架构具有近乎无限的缩放潜力。
- ansible-vault: 可以加密 Ansible 使用的任何结构化数据文件。这可以包括
group_vars/
或host_vars/
库存变量,include_vars
或vars_files
加载的变量,或使用-e @file.yml
或-e @file.json
在 ansible-playbook 命令行上传递的变量文件。角色变量和默认值也包括在内!