运行 playbook
1. 配置 Playbook 执行的输出详细程度
ansible-playbook
命令提供的默认输出不提供详细的任务执行信息。ansible-playbook -v
命令提供了额外的信息,总共有四个级别:
选项 | 描述 |
---|---|
-v | 显示任务结果。 |
-vv | 任务结果和任务配置都会显示。 |
-vvv | 包含关于与受管主机连接的信息。 |
-vvvv | 增加了连接插件相关的额外详细程度选项,包括受管主机上用于执行脚本的用户,以及所执行的脚本。 |
例如,CentOS上运行以下命令来显示详细的执行结果:
ansible-playbook -vvv playbook.yml
该命令会输出关于任务配置和与受管主机连接的详细信息。
2. 语法验证
在执行 playbook 之前,最好要进行验证,确保其内容的语法正确无误。ansible-playbook
命令提供了一个 --syntax-check
选项,可用于验证 playbook 的语法。下面演示了一个 playbook 成功通过语法验证。
ansible-playbook --syntax-check webserver.yml
playbook: webserver.yml
CentOS上运行此命令可以确保 webserver.yml
文件语法正确。
3. 执行空运行
可以使用 -C
选项对 playbook 执行空运行。这会使 Ansible 报告在执行 playbook 时将会发生什么更改,但不会对受管主机进行任何实际的更改。下面演示了一个 playbook 的空运行,它包含单项任务,可确保在受管主机上安装了最新版本的 httpd
软件包。注意该空运行报告此任务会对受管主机产生的更改。
ansible-playbook -C playbook.yml
例如,CentOS上运行以下命令来执行空运行:
ansible-playbook -C install_httpd.yml
4. 编写多个 Play
Playbook 是一个 YAML 文件,含有由一个或多个 play 组成的列表。记住一个 play 按顺序列出了要对清单中的选定主机执行的任务。因此,如果一个 playbook 中含有多个 play,每个 play 可以将其任务应用到单独的一组主机。
---
# This is a simple playbook with two plays
- name: first play
hosts: web.example.com
tasks:
- name: first task
yum:
name: httpd
state: present
- name: second task
service:
name: httpd
enabled: true
- name: second play
hosts: database.example.com
tasks:
- name: first task
service:
name: mariadb
enabled: true
创建一个名为 multi_playbook.yml
的文件,内容如下:
---
- name: 安装 httpd
hosts: webservers
tasks:
- name: 安装 httpd 包
yum:
name: httpd
state: present
- name: 启动和启用 mariadb
hosts: dbservers
tasks:
- name: 启用 mariadb 服务
service:
name: mariadb
enabled: true
5. 提权执行任务
如果不想在配置文件中指定提权等相关参数,playbook 中也可以结合提权相关参数进行使用。
- name: /etc/hosts is up to date
hosts: datacenter-west
remote_user: automation
become: yes
tasks:
- name: server.example.com in /etc/hosts
lineinfile:
path: /etc/hosts
line: '192.0.2.42 server.example.com server'
state: present
创建一个名为 update_hosts.yml
的文件,内容如下:
---
- name: 更新 /etc/hosts 文件
hosts: datacenter-west
remote_user: admin
become: yes
tasks:
- name: 添加 server.example.com 记录
lineinfile:
path: /etc/hosts
line: '192.0.2.43 server.example.com'
state: present