介绍
Ansible是一款现代化的配置管理工具,可简化设置和维护远程服务器的任务,旨在让用户快速启动和运行,它允许您从一个中心位置控制一到数百个系统,使用播放簿或特例命令。
虽然 Ad hoc 命令允许您在存储文件中注册的服务器上运行一次性任务,但播放书通常用于自动化设置服务和部署应用程序到远程服务器的任务序列。
这个简短的指南展示了如何执行 Ansible 播放本来自动化服务器设置,使用一个示例播放本来设置一个 Nginx 服务器,使用单个静态 HTML 页面。
前提条件
为了遵循这个指南,你需要:
- ** 一个可逆控制节点** 。 本指南假定您控制节点是一台Ubuntu 20.04机,安装并配置了Ansible,以便使用SSH密钥连接您的Ansible主机. 如我们[Initial Server setup (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04) 指南所解释的,确保控制节点有具有sudo权限的正则用户并启用防火墙. 要设置Ansible,请遵循我们的指南:[如何在Ubuntu 20.04上安装和配置Ansible (https://andsky.com/tech/tutorials/how-to-install-and-configure-ansible-on-ubuntu-20-04).
- 一个或一个以上的Ansible主机**。 Ansible 主机是任何配置到自动化的Ansible控制节点的机器. 本指南假设您的 Ansible 主机是远程 Ubuntu 20.04 服务器 。 确保每个Ansible主机有:
- Ansible控制节点的SSH公用钥匙添加到系统用户的`授权'钥匙上。 这个用户可以是root,也可以是拥有sudo权限的正则用户. 要设置此功能,您可以跟随[Ubuntu 20.04上如何设置SSH密钥的第2步 (https://andsky.com/tech/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04).
- ** Ansible控制节点上设置的库存文件** 。 确定您有包含所有 Ansible 主机的工作目录文件 。 要设置这一系统,请参考关于[如何设置可安放清单]的指南(https://andsky.com/tech/tutorials/how-to-set-up-ansible-inventories)。 .
一旦满足了这些前提条件,请按照我们关于如何使用 Ansible Ad Hoc 命令管理多个服务器的指南(https://andsky.com/tech/tutorials/how-to-manage-multiple-servers-with-ansible-ad-hoc-commands)所述,运行 连接测试,以确保您能够在远程节点上连接和执行 Ansible 指令。
创建一个测试游戏书
要尝试本指南中描述的示例,您将需要一个 Ansible 播放簿. 我们将设置一个测试播放簿,安装 Nginx,并在远程服务器上设置一个 index.html
页面。
如果你遵循了我们如何创建库存文件的指南,这应该是一个名为ansible
的文件夹在你的主目录里:
1cd ~/ansible
2nano playbook.yml
下面的播放簿有一个单一的 play 并在您的库存文件中的所有主机上运行,默认情况下. 这是由文件开始时的 hosts: all
指令定义的。
它定义了两个任务:一个是安装所需的系统包,另一个是将index.html
文件复制到远程主机,并将其保存到 Nginx 的默认文档根位置,即/var/www/html
。
将以下内容复制到您的playbook.yml
文件:
1[label ~/ansible/playbook.yml]
2---
3- hosts: all
4 become: true
5 tasks:
6 - name: Install Packages
7 apt: name={{ item }} update_cache=yes state=latest
8 loop: [ 'nginx', 'vim' ]
9 tags: [ 'setup' ]
10
11 - name: Copy index page
12 copy:
13 src: index.html
14 dest: /var/www/html/index.html
15 owner: www-data
16 group: www-data
17 mode: '0644'
18 tags: [ 'update', 'sync' ]
完成后,在同一目录中创建一个新的 index.html
文件,并将以下内容放入其中:
1[label ~/ansible/index.html]
2<html>
3 <head>
4 <title>Testing Ansible Playbooks</title>
5 </head>
6 <body>
7 <h1>Testing Ansible Playbooks</h1>
8 <p>This server was set up using an Nginx playbook.</p>
9 </body>
10</html>
不要忘了保存和关闭文件。
运行一个Playbook
要在您的库存文件中列出的所有服务器上执行测试播放簿,我们将在本指南中将其称为库存
,您可以使用以下命令:
1ansible-playbook -i inventory playbook.yml
这将使用当前系统用户作为远程SSH用户,以及当前系统用户的SSH密钥认证到节点. 如果这些不是访问服务器的正确证书,则您需要在命令中加入一些其他参数,例如-u'定义远程用户或
--私人-键'定义您想要连接的正确的SSH keypair. 如果远程用户使用sudo
操作命令需要密码,则需要提供-K
选项,以便Ansible提示您使用sudo
密码.
有关连接选项的更多信息可以在我们的 Ansible Cheatsheet 指南中找到。
Playbook 任务列表
如果您想列出播放簿中包含的所有任务,而不执行任何任务,则可以使用--list-tasks
参数:
1ansible-playbook -i inventory playbook.yml --list-tasks
1[secondary_label Output]
2playbook: nginx.yml
3
4 play #1 (all): all TAGS: []
5 tasks:
6 Install Packages TAGS: [setup]
7 Copy index page TAGS: [sync, update]
Playbook 标签列表
任务通常具有标签,允许您对播放本执行情况进行扩展控制. 若要在播放本中列出当前可用的标签,您可以使用--list-tags
参数如下:
1ansible-playbook -i inventory playbook.yml --list-tags
1[secondary_label Output]
2playbook: nginx.yml
3
4 play #1 (all): all TAGS: []
5 TASK TAGS: [setup, sync, update]
按 Tag 执行任务
若要只执行标记为特定标签的任务,您可以使用--标签
参数,以及您想要触发的标签:
1ansible-playbook -i inventory playbook.yml --tags=setup
按 Tag 跳过任务
若要跳过具有特定标签的任务,您可以使用 --exclude-tags
参数,以及您想要排除执行的标签名称:
1ansible-playbook -i inventory playbook.yml --exclude-tags=setup
在特定的任务中开始执行
控制播放书的执行流的另一种方法是通过在特定任务开始播放,这是当播放书的执行过早结束时有用的,在这种情况下,您可能想要重新运行。
1ansible-playbook -i inventory playbook.yml --start-at-task=Copy index page
限制执行目标
许多播放簿默认设置他们的目标为所有
,有时你想限制该设置的目标组或单个服务器。
1ansible-playbook -l dev -i inventory playbook.yml
控制输出语
如果在运行 Ansible 播放簿时遇到错误,您可以增加输出语音,以获取有关您遇到的问题的更多信息。
1ansible-playbook -i inventory playbook.yml -v
如果您需要更多细节,可以使用-vv
或-vvv
代替,如果您无法连接到远程节点,请使用-vvvv
获取连接调试信息:
1ansible-playbook -i inventory playbook.yml -vvvv
结论
在本指南中,您已经了解了如何执行 Ansible 播放本来自动化服务器设置,我们还了解了如何获取有关播放本的信息,如何使用标签操纵播放本的执行流程,以及如何调整输出语音度以获取播放中详细的调试信息。