介绍
Ansible是一种现代配置管理工具,可简化设置和维护远程服务器的任务。
这份速查表式指南提供了使用 Ansible 时常用的命令和实践的快速参考。要了解 Ansible 概述以及如何安装和配置它,请查阅我们的指南:如何在Ubuntu 20.04上安装和配置Ansible。
如何使用本指南:
- 本指南采用速查表格式,包含独立的命令行代码片段。
- 跳转到与您正在完成的任务相关的任何部分。
- 当您在本指南的命令中看到
突出显示的文本
时,请记住,这些文本应该是来自您自己清单中的主机、用户名和IP地址。
Ansible 术语表
以下是本指南中广泛使用的一些 Ansible 专用术语:
- 控制机器/节点:安装和配置了 Ansible 以连接和在节点上执行命令的系统。
- 节点:由 Ansible 控制的服务器。
- 库存文件:包含 Ansible 控制的服务器信息的文件,通常位于
/etc/ansible/hosts
。 - Playbook:包含要在远程服务器上执行的一系列任务的文件。
- 角色:一组包含与目标相关的 playbooks 和其他文件的内容,例如安装 web 服务器。
- Play:完整的 Ansible 运行。一个 play 可以包含多个 playbooks 和角色,这些都可以从作为入口点的单个 playbook 中包含进来。
如果您想要实际操作这些命令的示例,请参阅我们的指南 如何使用 Ansible 自动设置 Ubuntu 20.04 上的初始服务器。您至少需要一个远程服务器用作节点。
测试与节点的连接
要测试 Ansible 是否能够连接到节点并在其上运行命令和 playbooks,您可以使用以下命令:
ping
模块将测试您是否具有连接到库存文件中定义的节点的有效凭据,以及测试 Ansible 是否能够在远程服务器上运行 Python 脚本。如果收到 pong 回复,则表示 Ansible 已准备好在该节点上运行命令和 playbooks。
作为不同用户连接
默认情况下,Ansible 尝试以当前系统用户身份连接到节点,使用相应的 SSH 密钥对。要作为不同用户连接,请在命令后附加 -u
标志和所需用户的名称:
对于 ansible-playbook
也是有效的:
使用自定义 SSH 密钥
如果您使用自定义 SSH 密钥连接到远程服务器,您可以在执行时使用 --private-key
选项提供它:
这个选项对于 ansible-playbook
也是有效的:
使用基于密码的认证
如果您需要使用基于密码的认证来连接节点,您需要在 Ansible 命令中附加选项 --ask-pass
。
这将使 Ansible 提示您输入要连接的远程服务器上用户的密码:
此选项对于ansible-playbook
同样有效:
提供sudo
密码
如果远程用户需要提供密码来运行sudo
命令,您可以在您的Ansible命令中包含选项--ask-become-pass
。这将提示您提供远程用户sudo密码:
此选项对于ansible-playbook
同样有效:
使用自定义清单文件
默认清单文件通常位于/etc/ansible/hosts
,但在运行Ansible命令和playbook时,您也可以使用-i
选项指向自定义清单文件。Ansible还支持用于构建动态清单文件的清单脚本,用于处理您的清单经常变化的情况,例如经常创建和销毁服务器。自定义清单文件对于设置每个项目的清单非常有用,并且可以包含在诸如Git之类的版本控制系统中:
相同的选项对于ansible-playbook
同样有效:
运行 临时 命令
要在节点上执行命令,请使用-a
选项,后跟要在引号中运行的命令。
这将在您的清单中的所有节点上执行uname -a
:
也可以使用-m
选项运行Ansible模块。以下命令将在清单中的server1
上安装vim
软件包:
在对节点进行更改之前,可以进行干运行,以预测服务器如何受到您的命令的影响。这可以通过包含--check
选项来完成:
运行剧本
要运行一个剧本并执行其中定义的所有任务,请使用ansible-playbook
命令:
要覆盖剧本中的默认hosts
选项,并将执行限制在特定组或主机,请在命令中包含-l
选项:
获取有关播放的信息
选项--list-tasks
用于列出由播放执行的所有任务,而不对远程服务器进行任何更改:
类似地,可以列出将受到播放影响的所有主机,而不在远程服务器上运行任何任务:
您可以使用标签来限制播放的执行。要列出播放中所有可用的标签,请使用选项--list-tags
:
控制播放簿执行
您可以使用选项--start-at-task
来为您的播放簿定义一个新的入口点。然后,Ansible将跳过指定任务之前的任何内容,并从那一点开始执行播放的剩余部分。此选项需要一个有效的任务名称作为参数:
要仅执行与特定标签相关联的任务,可以使用选项--tags
。例如,如果您只想执行标记为nginx
或mysql
的任务,您可以使用:
如果要跳过所有标记为特定标签的任务,请使用--skip-tags
。以下命令将执行myplaybook.yml
,跳过所有标记为mysql
的任务:
使用 Ansible Vault 存储敏感数据
如果您的 Ansible Playbook 处理像密码、API 密钥和凭据这样的敏感数据,使用加密机制将这些数据安全保存是非常重要的。Ansible 提供了 ansible-vault
用于加密文件和变量。
虽然可以加密任何 Ansible 数据文件以及二进制文件,但更常见的是使用 ansible-vault
加密包含敏感数据的变量文件。使用此工具加密文件后,只能通过提供首次加密文件时定义的相关密码来执行、编辑或查看其内容。
创建新的加密文件
您可以使用以下命令创建新的加密 Ansible 文件:
此命令将执行以下操作:
- 首先,它会提示您输入一个新密码。每当您访问文件内容时,无论是用于编辑、查看还是只是运行使用这些值的playbooks或命令,您都需要提供此密码。
- 接下来,它将打开您的默认命令行编辑器,以便您可以填充文件的所需内容。
- 最后,当您编辑完成时,
ansible-vault
将文件保存为加密数据。
加密现有的 Ansible 文件
要加密现有的 Ansible 文件,您可以使用以下语法:
这将提示您输入一个密码,您需要在访问文件 credentials.yml
时输入该密码。
查看加密文件的内容
如果您想查看以前使用 ansible-vault
加密的文件的内容,并且您不需要更改其内容,您可以使用:
这将提示您提供您首次使用 ansible-vault
加密文件时选择的密码。
编辑加密文件
要编辑之前使用 Ansible Vault 加密的文件内容,请运行:
这将提示您提供首次使用 ansible-vault
加密文件 credentials.yml
时选择的密码。密码验证通过后,将使用您的默认命令行编辑器打开文件的未加密内容,允许您进行更改。完成后,您可以像平常一样保存并关闭文件,更新后的内容将以加密数据形式保存。
解密加密文件
如果您希望永久将之前使用 ansible-vault
加密的文件恢复到其未加密版本,可以使用以下语法:
这将提示您提供首次使用 ansible-vault
加密文件 credentials.yml
时使用的相同密码。密码验证通过后,文件内容将保存到磁盘上作为未加密数据。
使用多个保险库密码
Ansible支持通过不同的保险库ID分组的多个保险库密码。如果您想为不同的环境(如开发、测试和生产环境)设置专用的保险库密码,这将非常有用。
要使用自定义的保险库ID创建一个新的加密文件,需要在--vault-id
选项后面加上一个标签以及ansible-vault
可以找到该保险库密码的位置。标签可以是任何标识符,而位置可以是prompt
,表示命令应提示您输入密码,或者是指向密码文件的有效路径。
这将创建一个名为dev的新保险库ID,该保险库使用prompt
作为密码源。通过将此方法与组变量文件结合使用,您将能够为每个应用程序环境设置单独的ansible保险库:
我们使用dev和prod作为保险库ID,以演示如何为每个环境创建单独的保险库,但您可以创建任意数量的保险库,并且可以使用您选择的任何标识符作为保险库ID。
现在,要查看、编辑或解密这些文件,您需要在ansible-vault
命令中提供相同的保险库ID和密码源:
使用密码文件
如果您需要使用第三方工具自动化使用 Ansible 配置服务器的过程,您需要一种无需提示即可提供保险库密码的方法。您可以通过使用带有 ansible-vault
的 密码文件 来实现这一点。
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
要使用带有 ansible-vault
的密码文件,您需要在运行任何保险库命令时提供密码文件的路径:
Ansible 不区分使用 prompt
或密码文件作为密码来源加密的内容,只要输入密码相同即可。在实际操作中,这意味着可以使用 prompt
加密文件,然后稍后使用密码文件存储与 prompt
方法使用的相同密码。反之亦然:您可以使用密码文件加密内容,然后稍后使用 prompt
方法,在 Ansible 提示时提供相同的密码。
为了获得更灵活和安全的扩展性,而不是将您的保险库密码存储在纯文本文件中,您可以使用 Python 脚本从其他源获取密码。官方的 Ansible 存储库包含了一些 保险库脚本示例,您可以参考这些示例来创建适合您项目特定需求的自定义脚本。
通过 Ansible Vault 加密数据运行 Playbook
每当你运行一个使用之前通过 ansible-vault
加密的数据的 Playbook 时,你需要在 playbook 命令中提供 vault 密码。
如果你在加密此 playbook 中使用的数据时使用了默认选项和 prompt
密码源,你可以使用选项 --ask-vault-pass
来让 Ansible 提示你输入密码:
如果你使用了密码文件而不是提示输入密码,你应该使用选项 --vault-password-file
:
如果你使用了 vault ID 加密数据,你需要提供与首次加密数据时使用的相同的 vault ID 和密码源:
如果在你的 vault ID 中使用了密码文件,你应该提供标签,后跟密码文件的完整路径作为密码源:
如果你的 Play 使用了多个 vaults,你应该为每个 vault 提供一个 --vault-id
参数,顺序不限:
调试
如果在执行 Ansible 命令和剧本时遇到错误,增加输出详细度以获取有关问题的更多信息是一个好主意。您可以通过在命令中包含 -v
选项来实现:
如果您需要更多细节,可以使用 -vvv
,这将增加输出的详细程度。如果无法通过 Ansible 连接到远程节点,请使用 -vvvv
来获取连接调试信息:
结论
本指南涵盖了您在配置服务器时可能使用的一些常见 Ansible 命令,例如如何在节点上执行远程命令以及如何使用各种自定义设置运行剧本。
您可能会发现其他命令变体和标志对您的 Ansible 工作流程有用。要获取所有可用选项的概述,您可以使用 help 命令:
如果您想全面了解 Ansible 及其所有可用的命令和功能,请参阅 官方 Ansible 文档。
如果您想看到另一个 Ansible 的实际示例,请查看我们关于 如何在 Ubuntu 20.04 上使用 Ansible 安装和设置 Docker 的指南。
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide