当前位置: 首页 > news >正文

ansible剧本

一、ansible playbook

1、概述

1、什么是playbook

  • 一系列ad-hoc的集合,剧本可以同时执行多个任务

  • 定义主机组执行一系列模块的操作

  • 里面可以定义多个任务,多个ad-hoc,比较的方便

  • 剧本发生了错误,会立刻停止执行,修改后,继续执行,之前执行过的任务,不会有影响

2、yaml语言

playbook里面都是yaml语言定义的

  • yaml特性

    • 很高的可读性

    • 极强的扩展性

    • 较强的易用性

  • 严格的要求

    • 严格区分大小写

    • 使用空格来作为缩进项,不能使用tab,相同层级的元素要对齐

    • 使用-表示列表,key:value 的键值对表示字典

2、playbook的组成部分

1、基础部分

  • hosts:定义被控主机列表

  • variables: 定义调用的变量

  • tasks: 指定被执行的任务,是一个任务列表

  • templates:模块,内部嵌套,对playbook中的变量进行渲染成具体的值

  • hadnlers和notify:配合使用,用于任务配置触发条件(触发特定条件,handlers是一组特殊任务,notify是监听器)

  • tags: 是任务标签,可以通过标签选择执行特定的任务

[devops@server ansible]$ cat test1.yml 
- name: test play1hosts: node1  # 定义被控节点vars:  # 定义变量use_name: bobage: 123tags: u1   # 定义标签tasks: # 定义一系列任务,因此后面使用模块时,前面都需要有-表示列表- name: use msgdebug:  # 使用模块msg: "{{use_name}}"  # 模块的参数- name: use vardebug:var: age

2、handlers字段

是ansible一个特殊的任务与tasks层级一样

  • 当剧本中所有的tasks任务执行完成后,最后才会执行这个handlers定义的任务

  • 且监听的模块必须是chaged的状态才行

[devops@server ansible]$ cat test3.yml 
- hosts: node1tasks:- shell: "touch /opt/123.txt"  notify: get_status  # 监听的任务- shell: "ls /opt"handlers: # handlers定义的任务- name: get_status  shell: "ls /opt"[devops@server ansible]$ ansible-playbook test3.yml PLAY [node1]  在node1 上面执行 ***************************************************************************TASK [Gathering Facts] 收集事实变量,默认是开启*****************************************************************
ok: [node1]TASK [shell]  第一个任务 ***************************************************************************
changed: [node1]  # 都是chaged状态TASK [shell]  第二个任务 ***************************************************************************
changed: [node1]RUNNING HANDLER [get_status] 执行这个handlers任务,因为这个监听的是chaged状态 ***********************************************************
changed: [node1]PLAY RECAP *****************************************************************************
node1                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

思考一个问题,如果当剧本中发生了错误,handlers是一个什么样的情况呢?

  • 会立刻停止执行,不会执行handlers任务
[devops@server ansible]$ cat test3.yml 
- hosts: node1tasks:- shell: "touch /opt/123.txt"notify: get_status  # 状态是chaged- shell: "ls /op"  # 出现错误,会立刻停止执行handlers:  # 会触发这个handlers任务,但是了,因为前面出现了错误,就会直接终止- name: get_statusshell: "ls /opt"

即使出现了错误,也能执行handlers任务吗?

  • 可以的,使用这个force_handlers: true 执行
[devops@server ansible]$ cat test3.yml 
- hosts: node1force_handlers: true  # 即使出现了错误,也会执行handlers任务tasks:- shell: "touch /opt/123.txt"notify: get_status- shell: "ls /op"  # 出现了错误handlers:- name: get_statusshell: "ls /opt"# 如果第一个shell和第二个shell交换顺序,不会执行handlers任务,因为剧本出现了错误就会立刻终止# 上面的之所以会执行handlers任务,因为监听的状态是chaged,即使后面剧本出现了错误,也能执行handlers任务# 得出一个结论,监听的任务放在前面才行
  • handlers任务

    • 监听的模块必须是chaged状态,才能触发handlers任务

    • 除了监听的模块之外出现了错误的话,就需要force_handlers来强制执行

3、tags标签

就是一个剧本中定义了多个tasks任务时,可以选择一些来执行,并不是全部要执行的

[devops@server ansible]$ cat test4.yml 
- hosts: node1tags:  # 定义第一个任务的标签- u12tasks:- debug:msg: "u1"tags: u1  # 定义模块的标签- debug:msg: "u2"tags: u2
- hosts: node1tags:- u34  # 定义第二个任务的标签tasks:- debug:msg: "u3"tags: u3- debug:msg: "u4"tags: u4

执行指定的标签

# 只执行这个u1标签的模块内容
[devops@server ansible]$ ansible-playbook -t u1 test4.yml 

执行多个标签

[devops@server ansible]$ ansible-playbook -t "u1,u3" test4.yml 
  • always标签,当任务打上了这个标签的话,无论用户是否指定标签,以及指定标签是否与这个一致,这个任务都会执行,因此always将其始终执行的任务

  • never标签,无论用户是否执行,永远不执行该任务,除非指定了never标签才会执行

[devops@server ansible]$ cat test5.yml 
- hosts: node1tasks:- debug:msg: "u1"tags: always- debug:msg: "u2"tags: never- debug:msg: "u3"tags: u3# 执行always和u1标签,不会执行never标签
[devops@server ansible]$ ansible-playbook -t u3 test5.yml# 执行never标签,同时也会执行always标签
[devops@server ansible]$ ansible-playbook -t never test5.yml 

3、ansible-playbook常用选项

列出s所有任务和标签

# 列出所有play,以及paly中的任务和标签,never标签不会显示
[devops@server ansible]$ ansible-playbook test5.yml --list-tasksplaybook: test5.ymlplay #1 (node1): node1	TAGS: []tasks:debug	TAGS: [always]debug	TAGS: [u3]

列出剧本中的主机

[devops@server ansible]$ ansible-playbook test5.yml --list-hostsplaybook: test5.ymlplay #1 (node1): node1	TAGS: []pattern: ['node1']hosts (1):node1

列出剧本中的所有的tags


[devops@server ansible]$ ansible-playbook test5.yml --list-tagsplaybook: test5.ymlplay #1 (node1): node1	TAGS: []TASK TAGS: [always, u3]

测试检查,剧本是否有语法错误, --syntax-check

[devops@server ansible]$ ansible-playbook test5.yml --syplaybook: test5.yml

测试运行,不会影响这个被控端

[devops@server ansible]$ ansible-playbook test5.yml -C

从剧本中指定某个任务开始执行剧本

[devops@server ansible]$ cat test5.yml 
- hosts: node1gather_facts: falsetasks:- name: uu1debug:msg: "u1"- name: uu2debug:msg: "u2"# 从uu2这里开始执行剧本
[devops@server ansible]$ ansible-playbook --start-at-task "uu2" test5.yml 

指定剧本运行的主机,只在node1上面运行

[devops@server ansible]$ cat test5.yml 
- hosts: all gather_facts: falsetasks:- name: uu1debug:msg: "u1"- name: uu2debug:msg: "u2"# 指定node1运行主机
[devops@server ansible]$ ansible-playbook --limit node1 test5.yml 
[devops@server ansible]$ ansible-playbook --help
usage: ansible-playbook [-h] [--version] [-v] [-k] [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT][--ssh-common-args SSH_COMMON_ARGS] [--sftp-extra-args SFTP_EXTRA_ARGS] [--scp-extra-args SCP_EXTRA_ARGS][--ssh-extra-args SSH_EXTRA_ARGS] [--force-handlers] [--flush-cache] [-b] [--become-method BECOME_METHOD][--become-user BECOME_USER] [-K] [-t TAGS] [--skip-tags SKIP_TAGS] [-C] [--syntax-check] [-D] [-i INVENTORY][--list-hosts] [-l SUBSET] [-e EXTRA_VARS] [--vault-id VAULT_IDS][--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES] [-f FORKS] [-M MODULE_PATH] [--list-tasks][--list-tags] [--step] [--start-at-task START_AT_TASK]playbook [playbook ...]Runs Ansible playbooks, executing the defined tasks on the targeted hosts.positional arguments:playbook              Playbook(s)optional arguments:--ask-vault-pass      ask for vault password--flush-cache         clear the fact cache for every host in inventory--force-handlers      run handlers even if a task fails--list-hosts          outputs a list of matching hosts; does not execute anything else--list-tags           list all available tags--list-tasks          list all tasks that would be executed--skip-tags SKIP_TAGSonly run plays and tasks whose tags do not match these values--start-at-task START_AT_TASKstart the playbook at the task matching this name--step                one-step-at-a-time: confirm each task before running--syntax-check        perform a syntax check on the playbook, but do not execute it--vault-id VAULT_IDS  the vault identity to use--vault-password-file VAULT_PASSWORD_FILESvault password file--version             show program's version number, config file location, configured module search path, module location, executablelocation and exit-C, --check           don't make any changes; instead, try to predict some of the changes that may occur-D, --diff            when changing (small) files and templates, show the differences in those files; works great with --check-M MODULE_PATH, --module-path MODULE_PATHprepend colon-separated path(s) to module library(default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules)-e EXTRA_VARS, --extra-vars EXTRA_VARSset additional variables as key=value or YAML/JSON, if filename prepend with @-f FORKS, --forks FORKSspecify number of parallel processes to use (default=5)-h, --help            show this help message and exit-i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORYspecify inventory host path or comma separated host list. --inventory-file is deprecated-l SUBSET, --limit SUBSETfurther limit selected hosts to an additional pattern-t TAGS, --tags TAGS  only run plays and tasks tagged with these values-v, --verbose         verbose mode (-vvv for more, -vvvv to enable connection debugging)Connection Options:control as whom and how to connect to hosts--private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILEuse this file to authenticate the connection--scp-extra-args SCP_EXTRA_ARGSspecify extra arguments to pass to scp only (e.g. -l)--sftp-extra-args SFTP_EXTRA_ARGSspecify extra arguments to pass to sftp only (e.g. -f, -l)--ssh-common-args SSH_COMMON_ARGSspecify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)--ssh-extra-args SSH_EXTRA_ARGSspecify extra arguments to pass to ssh only (e.g. -R)-T TIMEOUT, --timeout TIMEOUToverride the connection timeout in seconds (default=10)-c CONNECTION, --connection CONNECTIONconnection type to use (default=smart)-k, --ask-pass        ask for connection password-u REMOTE_USER, --user REMOTE_USERconnect as this user (default=devops)Privilege Escalation Options:control how and which user you become as on target hosts--become-method BECOME_METHODprivilege escalation method to use (default=sudo), use `ansible-doc -t become -l` to list valid choices.--become-user BECOME_USERrun operations as this user (default=root)-K, --ask-become-passask for privilege escalation password-b, --become          run operations with become (does not imply password prompting)

4、剧本出现错误补救方式

http://www.jsqmd.com/news/435872/

相关文章:

  • leetcode-爬楼梯
  • 2026年废气治理行业实力推荐:郑州熙诚环保科技,PP环保设备废气净化全方案提供商 - 品牌推荐官
  • 全国知名的字画回收机构盘点:专业合规,让名家字画安心传承 - 品牌排行榜单
  • 标准modelbus=有网络头无CRC
  • 【计算机毕设】厨艺交流平台设计与实现
  • 2026年电极片厂家实力推荐:郑州康宜健医疗器械,透药/中医定向/乳腺/理疗电极片全品类覆盖 - 品牌推荐官
  • 双模式统一渲染引擎深度解析:如何破解数字孪生“不可能三角”?
  • 一个晚上学会调适应同步电机的变频器
  • 2026钢结构工程实力厂家推荐:河南天墨钢结构工程有限公司,厂房/桥梁/办公楼一站式服务 - 品牌推荐官
  • 并行计算 性能优化 cuda异构开发
  • 【计算机毕设】java-springboot+vue广场舞团信息系统
  • 2026年上海审计事务所推荐:基于多行业需求评价,针对民营与科创企业痛点精准指南 - 品牌推荐
  • 全场景适配|陕西秦泵——西安供水设备优质厂家,直供定制一站式无忧 - 朴素的承诺
  • 2026年烧结银材料厂家推荐:善仁新材料无压烧结银/纳米烧结银浆/低温烧结银膏全品类供应 - 品牌推荐官
  • 2026年深圳会计师事务所推荐:基于多行业场景深度评测,直击企业融资与资质申报核心需求 - 品牌推荐
  • 2026真空氢气炉市场格局解析:4大品牌技术实力与选型指南 - 品牌推荐大师1
  • 可靠的PCB打样公司
  • 2026年土工材料厂家推荐:仪征康顺土工材料有限公司,复合土工膜/土工格栅/土工布全系供应 - 品牌推荐官
  • 湖北好用的实木板材加工品牌,云松木业口碑如何 - 工业设备
  • 2026年气化器设备推荐:山东中能智华能源装备科技,液氮/氮气/LNG/氧气等气化器全系供应 - 品牌推荐官
  • 2026年名酒回收推荐:茅洋名酒回收,高价回收洋酒/老酒/名酒,全国上门服务 - 品牌推荐官
  • 2026年郑州婚介服务推荐:芳草婚介相亲找对象/脱单/婚恋网/找另一半服务全解析 - 品牌推荐官
  • Claude Code接入GLM5 Coding Plan教程(安装与模型切换详解) GLM Coding Plan 体验
  • 272_尚硅谷_管道的细节和课堂练习
  • 2026年深圳会计师事务所推荐:资本市场审计能力排名,涵盖高新资质与专项服务场景 - 品牌推荐
  • 2026年北京老房改造装修公司推荐:基于多场景实测评价,针对结构安全与环保痛点精准指南 - 品牌推荐
  • Highcharts径向条形图(Radial Bar Chart)完全指南:环形数据可视化的艺术与实践
  • 动力是释放制动是控制:1999年WRC的工程启蒙 - RF_RACER
  • Highcharts范围系列图表(Range Series)完全指南:展示数据波动与区间的可视化利器
  • 2026年上海审计事务所推荐:基于多行业需求评价,针对高新认定与税务痛点精准指南 - 品牌推荐