ansible实践02-ansible高级用法-playbook介绍和使用


1. ansible核心组件Playbook

1)playbook前言

    Playbook:使用yaml格式进行表示。用来描述对应的远程主机需要执行的任务的一种表达方法。

2)了解YAML

    YAML(/?j?m?l/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy d?t Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。

    

3)YAML语法格式

基本数据结构:
标量,数组(清单),关联数组。
1.playbook核心元素:
Hosts:主机(关联到的主机,由谁来唱这出戏)
Tasks:任务列表(要唱哪些戏)
Variables:(有些数据变量需要重复使用)
Templates:包含了模板语法的文本文件。
Handlers:由特定条件触发的任务。

Roles

2. Playbook基础组件

Hosts:运行指定任务的目标主机
remote_user:在远程主机上执行任务的用户
sudo_user:如果切换用户,sudo到哪个用户执行
tasks:任务列表
模块,模块参数
格式:
1)action: module arguments
2) module: arguments

3. playbook运行方法

a. playbook测试

ansible-playbook --check
只检测可能会发生的改变,但不真正执行此操作。

ansible-playbook --list-hosts
列出运行任务的主机

b. 正式执行playbook

handlers:任务,在特定条件下触发。
notify: handler task name,接收到其它任务的通知时被触发。

4. playbook实例

实例1-安装nginx,启动nginx

需要注意,接下来的实例都是以此实例为基础进行测试和修改。

[root@elk01 playbooks]# cat playbook01.yaml
- hosts: test03
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=installed
- name: start nginx
service: name=nginx state=started

检查是否有语法错误:
ansible-playbook --syntax-check playbook01.yaml

查看执行任务的主机列表和具体执行哪些任务
ansible-playbook --list-hosts --list-tasks playbook01.yaml


预测试,不会改变目标主机的任何设置。
ansible-playbook -C playbook01.yaml

执行playbook
ansible-playbook playbook01.yaml

实例2-批量修改nginx配置文件,拷贝配置文件到远程主机,触发执行对应任务加载配置

[root@elk01 playbooks]# cat playbook01-20220329bak.yaml
- hosts: test03
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=installed
- name: copy nginx configue file
copy: src=/playbooks/nginx.conf dest=/etc/nginx/nginx.conf
notify: restart nginx
- name: start nginx
service: name=nginx state=started
handlers:
- name: restart nginx
service: name=nginx state=restarted

实例3-批量修改nginx配置文件,然后只拷贝配置文件到远程主机,不做其他操作

方法:加标签,tags, -t对应指定标签。

[root@elk01 playbooks]# cat playbook01-20220329bak02tags.yaml
- hosts: test03
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=installed
- name: copy nginx configue file
copy: src=/playbooks/nginx.conf dest=/etc/nginx/nginx.conf
notify: restart nginx
tags: configfile
- name: start nginx
service: name=nginx state=started
handlers:
- name: restart nginx
service: name=nginx state=restarted

[root@elk01 playbooks]# ansible-playbook -t configfile playbook01.yaml

实例4-批量修改nginx配置文件,拷贝配置文件到远程主机,只执行指定配置标签的任务

先在本地修改nginx,然后执行,这样安装和启动任务等其他任务就不会执行,只执行对应标签的任务。
[root@elk01 playbooks]# ansible-playbook -t configfile playbook01.yaml