如何使用 Ansible 安装软件( 二 )


Ansible 文档
安装软件包是一个相对简单的任务 , 仅需要两个元素 。 state 选项指示 Ansible 检查系统上是否存在 软件包 , 而 name 选项列出要查找的软件包 。 Ansible 会针对机器的 状态 进行调整 , 因此模块指令始终意味着更改 。 假如 Ansible 扫描了系统状态 , 发现剧本里描述的系统(在本例中 , tcsh 和 htop 存在)与实际状态存在冲突 , 那么 Ansible 的任务是进行必要的更改来使系统与剧本匹配 。 Ansible 可以通过 dnf(或 apt 或者其它任何包管理器)模块进行更改 。
每个模块可能都有一组不同的选项 , 所以在编写剧本时 , 要经常参考模块文档 。 除非你对模块非常熟悉 , 否则这是期望模块完成工作的唯一合理方法 。
验证 YAML剧本是用 YAML 编写的 。 因为 YAML 遵循严格的语法 , 所以安装 yamllint 来检查剧本是很有帮助的 。 更妙的是 , 有一个专门针对 Ansible 的检查工具称为 ansible-lint , 它专门为剧本而生 。 在继续之前 , 安装它 。
在 Fedora 或 CentOs 上:
$ sudo dnf ins tall yamllint python3-ansible-lint在 Debian、Elementary 或 Ubuntu 上 , 同样的:
$ sudo apt install yamllint ansible-lint使用 ansible-link 来验证你的剧本 。 如果你无法使用 ansible-lint , 你可以使用 yamllint 。
$ ansible-lint ~/install_packages/site.yml成功则不返回任何内容 , 但如果文件中有错误 , 则必须先修复它们 , 然后再继续 。 复制和粘贴过程中的常见错误包括在最后一行的末尾省略换行符、使用制表符而不是空格来缩进 。 在文本编辑器中修复它们 , 重新运行 ansible-llint , 重复这个过程 , 直到 ansible-lint 或 yamllint 没有返回为止 。
使用 Ansible 安装一个应用现在你有了一个可验证的有效剧本 , 你终于可以在本地计算机上运行它了 , 因为你碰巧知道该剧本定义的任务需要 root 权限 , 所以在调用 Ansible 时必须使用 --ask-become-pass 选项 , 因此系统会提示你输入管理员密码 。
开始安装:
$ ansible-playbook --ask-become-pass ~/install_packages/site.ymlBECOME password:PLAY [localhost] ******************************TASK [Gathering Facts] ******************************ok: [localhost]TASK [install packages] ******************************ok: [localhost]PLAY RECAP ******************************localhost: ok=0 changed=2 unreachable=0 failed=0 [...]这些命令被执行后 , 目标系统将处于与剧本中描述的相同的状态 。
在远程系统上安装应用程序通过这么多操作来替换一个简单的命令可能会适得其反 , 但是 Ansible 的优势是它可以在你的所有系统中实现自动化 。 你可以使用条件语句使 Ansible 在不同的系统上使用特定的模块 , 但是现在 , 假定所有计算机都使用相同的包管理器 。
要连接到远程系统 , 你必须在 /etc/ansible/hosts 文件中定义远程系统 , 该文件与 Ansible 是一起安装的 , 所以它已经存在了 , 但它可能是空的 , 除了一些解释性注释之外 。 使用 sudo 在你喜欢的文本编辑器中打开它 。
你可以通过其 IP 地址或主机名(只要主机名可以解析)定义主机 。 例如 , 如果你已经在 /etc/hosts 中定义了 liavara 并可以成功 ping 通 , 那么你可以在 /etc/ansible/hosts 中将 liavara 设置为主机 。 或者 , 如果你正在运行一个域名服务器或 Avahi 服务器并且可以 ping 通 liavara , 那么你就可以在 /etc/ansible/hosts 中定义它 。 否则 , 你必须使用它的 IP 地址 。
你还必须成功地建立与目标主机的安全 shell(SSH)连接 。 最简单的方法是使用 ssh-copy-id 命令 , 但是如果你以前从未与主机建立 SSH 连接 ,阅读我关于如何创建自动 SSH 连接的文章。


推荐阅读