当前位置:网站首页>Ansible_02_playbook
Ansible_02_playbook
2022-04-21 09:40:00 【爱喝可乐的w】
playbook
playbook:记录Ansibel需配置的服务器和任务列表的文件
1)playbook基于YAML语法构建
2)若首行为“#!/usr/bin/env ansible-palybook”,则playbook文件可直接执行;
//首行为#!被称为shebang语法,会将其后的作为解释器(文件路径作为参数)
基础playbook
play
play:构成playbook的基本组成单位
1)playbook就是包含多个play的列表;
2)play必须包含hosts和tasks选项,其他选项可视情况添加;
paly常用选项如下:
| 选项 | 含义 |
|---|---|
| hosts | 指定适用tasks的服务器/群组 |
| tasks | 指定任务 |
| name | 注释 (Ansibel会在运行play前打印注释) |
| become | 是否以root身份运行每个任务 |
| vars | 定义变量 |
| handler | 条件控制机制 |
| include | 引用其他playbook/task |
hosts
hosts:指定适用于tasks的服务器/群组
1)指定的服务器/群组需存在于inventory文件中;
2)all和*代表所有服务器/群组(默认值all);
Ansible支持以下符号实现服务器的匹配
| 符号 | 含义 |
|---|---|
| : | 并集 |
| :& | 交集 |
| :! | 排除 |
| * | 通配符 |
| 正则表达式 |
1)多种符号可混合使用
变量
vars:定义playbook中变量
1)定义格式(单独占行):变量名:值
2)引用变量格式:“{
{ 变量名 }}”
vars_files:引入包含变量定义的YAML文件
1)引入文件中无需包含vars区段,只需按照格式定义变量;
2)引入文件可被多个playbook文件调用(常用于存储敏感信息);
特殊变量
特殊变量:执行task时由选项产生的变量
(1)register:值为task运行结果
1)通过register语句指定register变量名(由系统赋值);
2)register变量默认为字典类型(根据模块产生对应的键);
//每个模块的返回结果不同(但均为register变量中的键)
如:通过register语句和debug模块输出task执行结果
1)编写playbook文件;
---
- name: show return value of command module
hosts: WebServers
tasks:
- name: capture output of id command
command: id -un
register: login
- debug: var=login
2)运行结果;

//可通过“.”或“[ ]”引用register变量中键的值(包含特殊符号时只能用后者)
(2)ignore_errors:是否忽略task中错误,继续执行(True/False)
1)默认执行task遇到错误时,会停止后续所有的操作并返回结果;
(3)gather_facts:是否收集fact变量(True/False)
1)fact变量:多个变量存储服务器的详细信息(如:IP、CPU和操作系统等)
2)本质:自动调用setup模块收集服务器详细信息(也可手动调用)
3)可在/etc/ansible/facts.d目录下创建每个服务器特殊的fact变量
4)可通过set_fact模块自定fact变量(先定义后使用)
/etc/ansible/facts.d目录需遵循以下要求:
1)文件后缀一般为“.fact”,但格式必须为.ini或JSON
2)通过ansible_local变量获取各个fact变量(获取字典中键的格式)
如:设置本地fact变量,并获取其值
1)在服务器创建本地fact变量;

2)编写playbook获取本地fact变量;

//ansible_local是字典(其facts.d目录下所有文件均为其键)
内置变量
| 变量 | 说明 |
|---|---|
| hostvars | 字典形式存储所有服务器的主机名 (每个键代表一个服务器,且获取其详细信息) |
| inventory_hostname | 主机被Ansible识别的名字 (包含域名) |
| inventory_hostname_short | 主机被Ansible识别的名字 (不包含域名) |
| group_names | 列表形式存储所有群组名 |
| groups | 字典形式存储所有群组和服务器对应的关系 (两个特殊群组:all和ungrouped) |
| ansible_check_mode | 是否开启check_mode |
| ansible_play_batch | 列表形式存储批量执行的inventory主机名 |
| ansible_play_hosts | 列表形式存储play涉及的inventory主机名 |
| ansible_version | 字典形式存储Ansible版本信息 |
1)若未收集fact变量,则hostvars不可访问fact变量;
tasks
tasks:构成play的基本组成单位
1)每个task最少包含一个键值对(键是模块名,值是传给模块的参数);
2)默认按照字符串格式处理参数(而非字典);
3)建议添加name键,作为注释;
//添加name键后,ansible-playbook可通过–strat-at-task选项指定任务处开始运行
执行task后返回两种结果含义:
1)ok:服务器状态与模块参数相匹配(不会执行task)
2)changed:服务器状态与模块参数不匹配(执行task)
常用选项
(1)add_host/group_by:执行playbook时,向inventory中添加服务器/群组
1)add_host/group_by选项仅在执行playbook时生效(不修改inventory文件);
(2)become:是否以root身份运行该task
1)优先级高于play中的become选项;
(3)become_user:是否以指定用户执行该task
1)需指定用户名(且该用户需具有执行该task的足够权限);
(4)environment:添加/设置变量
1)需以字典形式添加/设置(且可使用已有变量定义新变量)
2)变量定义格式:变量名:值
(5)when:条件判断语句
1)若指定的变量/值为True,则执行该task(反之跳过)
(6)delegate_to:仅在指定服务器上运行该task
1)获取变量相关值时,仍是原服务器/群组的;
(7)run_once:该task是否仅执行一次
1)常用于控制play层级的local_action;
(8)async:最大可执行时间(秒)
1)超过该时间,则自动终止该task相关的所有进程;
2)必须同时使用register选项记录async的结果;
(9)poll:指定task的重试时间间隔
1)若设置为0,则异步执行task(执行下个task);
handler
handler:执行特定task后并改变服务器状态,将触发执行的特殊task
1)特定task:含有notify键值对(值为handlers的name键的值);
2)handler仅在所有task成功执行后再执行,且只执行一次;
3)handler按照play中定义顺序执行(非通知顺序);
//handlers无法跨play被触发
如:配置Nginx的playbook(带有TLS)
---
- name: Configure WebServer with nginx and tls
hosts: WebServers
become: True
vars:
key_file: /etc/nginx/ssl/nginx.key
cert_file: /etc/nginx/ssl/nginx.crt
conf_file: /etc/nginx/sites-available/default
server_name: localhost
tasks:
- name: Install nginx
apt: name=nginx update_cache=yes cache_valid_time=3600
- name: create directories for TLS certificates
file: path=/etc/nginx/ssl state=directory
- name: copy TLS key
copy: src=files/nginx.key dest={
{
key_file }} owner=root mode=0600
notify: restart nginx
- name: copy TLS certificate
copy: src=files/nginx.crt dest={
{
cert_file }}
notify: restart nginx
- name: copy nginx config file
template: src=templates/nginx.conf.j2 dest={
{
conf_file }}
notify: restart nginx
- name: enable configuration
file: dest=/etc/nginx/sites-enabled/default src={
{
conf_file }} state=link
notify: restart nginx
- name: copy index.html
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644
handlers:
- name: restart nginx
service: name=nginx state=restarted
handler在每部分task执行完毕后将被触发执行
1)pre_tasks、tasks和post_tasks三者作为3个不同部分的task;
2)先执行完上部分触发的handler,再继续执行下部分tasks;
高级handler
(1)meta:flush_handlers
1)使该task之前触发的handler立刻执行,再继续执行后续tasks(task层级)
(2)listen:字符串
1)定义event,多个handler可同时监听一个evnet(原理等同于notify);
2)listen可解决依赖关系闭关问题(防止出现未定义handler错误);
//常用于解决执行部分handler之前,执行其他task
版权声明
本文为[爱喝可乐的w]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45686105/article/details/124015933
边栏推荐
- 1166: rounding of real numbers (pointer topic)
- #全网首发#SixTool-多功能多合一代挂助手,支持Bilibili,运动步数等功能,可运营版本开源发布!!!-星泽V社
- [DL image classification]
- [Yugong series] April 2022 wechat applet - aggregation of the use of maps
- 【笔记】Package.xml 文件语法记录
- 【手拉手 带你准备电赛】单色块识别(基于openmv)
- 1148: 组合三位数之一
- How to improve the ability of programming? What is the most important thing about learning programming? Please see how mortals learn C
- 组合总和-Leetcode
- [pycharm plugins] download online to install the translation plug-in
猜你喜欢

【手拉手 带你准备电赛】使用定时器中断更改PWM占空比
![[summary] 1296 - summarize 12 common mobile terminal H5 and hybrid development problems](/img/4d/c3216ead34b286bae58c030c3c4c00.jpg)
[summary] 1296 - summarize 12 common mobile terminal H5 and hybrid development problems

Yuanshu training dance room, cyberpunk cool style, waiting for you to dance

2022年A特种设备相关管理(电梯)考试试题模拟考试平台操作
![Kali:sqlmap :[10:39:37] [CRITICAL] unable to connect to the target URL](/img/bf/123e6f5eadb8d502e135a7cff9b120.png)
Kali:sqlmap :[10:39:37] [CRITICAL] unable to connect to the target URL

操作系统 - 线程安全 - 学习

CC00019. CloudJenkins—————————————

事务的隔离级别与MVCC

Responsive layout to realize the static page of ghost blog home page

How to improve the ability of programming? What is the most important thing about learning programming? Please see how mortals learn C
随机推荐
[Yugong series] wechat applet - API related function case of map use in April 2022
C#字符串提供的各种方法
【栈和队列】C语言简单应用 ⌊栈和队列互相实现,循环队列⌉
Common commands of MySQL in Linux
What are the products of Guangzhou futures exchange?
Promise处理复杂异步
1157: 连续的n个1
元术练舞室,赛博朋克酷炫风格等你来畅跳
【云驻共创】华为云数据库之数据库原理及应用课程11、数据库系统控制
复旦大学-华盛顿大学EMBA校友:将"她力量"变成"我们的力量"
1146: eat candy
Esp32 tracing module test
[跟着官方文档学Junit5][一][Overview][学习笔记]
1152: binary search
Actf2020 freshman tournament upload 1
广州期货交易所的产品有哪些呢?
[probability theory and mathematical statistics] 1.4 conditional probability
JS——70行完成五子棋布局
Question brushing record (leetcode)
正则表达式语法及常用正则表达式