ansible的脚本和playbook剧本

2023-11-10

playbooks 概述

Playbook介绍

playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbook是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。

ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules)来完成不同的功能的。不管是执行单条命令还是play-book都是基于清单文件。

playbook格式

playbook由YMAL语言编写。YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

一个剧本里面可以有多个play,每个play只能有一个tasks,每个tasks可以有多个name

playbooks 的组成

playbooks 本身由以下各部分组成

1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
2)Variables:变量元素,可传递给Tasks/Templates使用;
3)Templates:模板元素,使用了模板语法的文本文件;
4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
5)Roles:角色元素

playbook的基础组件:

name : 定义playbook或者task的名称(描述信息),每一个play都可以完成一个任务。

hosts : hosts用于指定要执行指定任务的主机.

user : remote_user则用于指定远程主机上的执行任务的用户

tasks : 任务列表play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

vars : 定义变量(如果不使用内部变量需要提前定义)

vars_files : 调用定义变量文件

notify : 任务执行结果如果是发生更改了的则触发定义在handler的任务执行

handlers : 用于当前关注的资源发生变化时采取一定指定的操作

playbook语法有如下特性:
以 --- (三个减号)开始,必须顶行写;
次行开始写Playbook的内容,但是一般要求写明该playbook的功能;
严格缩进,并且不能用Tab键缩进;
缩进级别必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的;
K/V的值可同行写,也可换行写。同行使用 :分隔,换行写需要以 - 分隔;

操作示例一

1.启动httpd

vim test1.yaml
---     #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play     #定义一个play的名称,可省略
  gather_facts: false    #设置不进行facts信息收集,这可以加快执行速度,可省略
  hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔
  remote_user: root    #指定被管理主机上执行任务的用户
  tasks:     #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
   - name: test connection    #自定义任务名称
     ping:     #使用 module: [options] 格式来定义一个任务
   - name: disable selinux
     command: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式
     ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration file for httpd
     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件,我们可以把端口修改一下
     notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted
==========================================================
##Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启
==========================================================
运行playbook

ansible-playbook test1.yaml

2. 修改配置文件并放入/opt/目录下

vim httpd.conf         #在/opt/目录下放入修改之后的配置文件
  
#42行,指定端口
Listen 8080
#95行,指定域名
ServerName www.kkk.com:8080 

3.运行playbook

ansible-playbook test1.yaml
//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook test1.yaml --syntax-check                         #检查yaml文件的语法是否正确
ansible-playbook test1.yaml --list-task                            #检查tasks任务
ansible-playbook test1.yaml --list-hosts                           #检查生效的主机
ansible-playbook test1.yaml --start-at-task='install httpd'        #指定从某个task开始运行

操作实例二:定义、引用变量

- name: second play
  hosts: dbservers
  remote_user: root
  vars:                                                                        #定义变量
    - groupname: mysql                                                         #格式为 key: value
    - username: nginx
  tasks:
    - name: create group
      group: name={{groupname}} system=yes gid=3016                               #使用 {{key}} 引用变量的值
    - name: create user
      user: name={{username}} uid=3066 group={{groupname}}
    - name: copy file
      copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt                  #在setup模块中可以获取facts变量信息
 
 
ansible-playbook test2.yaml -e "username=nginx"         

操作示例三:指定远程主机sudo切换用户

---
- hosts: webservers
remote_user: zhangsan
become: yes     #2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_user: root     #指定sudo用户为root
执行playbook时:ansible-playbook test3.yml -K <密码>  

操作示例四:when条件判断

1.在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务
2.when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务

vim test4.yaml
---
- hosts: all
remote_user: root
tasks:
    - name: shutdown host
    command: /sbin/shutdown -r now
    when: ansible_default_ipv4.address == "192.168.163.136" #when指令中的变量名不需要手动加上 {{}}
    或
    when: inventory_hostname == "<主机名>"
 
ansible-playbook test4.yaml

操作示例五:迭代

Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。

vim test5.yaml
---
- name: play5
  hosts: dbservers
  gather_facts: false
  tasks:
    - name: create directories      ##创建目录。目录名使用with_items里的循环
      file:
        path: "{{item}}"              ##由于值是{{....}} ,所以为了防止被认为是字典,要加上双引号.
        state: directory
      with_items:                   #等同于 loop:
        - /tmp/test1
        - /tmp/test2
   - name: add users                ###使用循环创建用户,并添加附加组
     user: name={{item.name}} state=present groups={{item.groups}}
     with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root
     或
     with_items:
       - {name:'test1', groups:'wheel'}
       - {name:'test2', groups:'root'}
 
ansible-playbook test5.yaml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ansible的脚本和playbook剧本 的相关文章

  • Git 克隆中的 Ansible 和 Git 权限被拒绝(公钥)

    我有一本剧本 我试图从私人存储库 GIT 克隆到服务器 我已经设置了 ssh 转发 当我 ssh 进入服务器并尝试从同一存储库手动克隆时 它成功工作 但是 当我使用 ansible 将存储库克隆到服务器时 它失败并显示 权限被拒绝公钥 这是
  • 每个数据库名称 Ansible 运行一次任务

    我正在使用 ansible 将多个站点部署到同一服务器 每个站点都是 ansible 中的一个单独的 主机 hosts库存 效果非常好 但是 只有两个数据库 生产数据库和测试数据库 如何确保每个数据库只运行一次数据库迁移任务 我读过grou
  • 如何在 ansible git 模块中使用远程计算机的 SSH 密钥

    我一直在尝试让 Ansible 来配置远程计算机 并且我希望远程计算机能够使用自己的密钥进行设置 并且能够从 Bitbucket 克隆 git 存储库 用户已设置 拥有自己的 id rsa pub 并且密钥已注册到 bitbucket 但是
  • ansible if else 构造

    这是我的 if else Ansible 逻辑 name Check certs exist stat path etc letsencrypt live rootDomain fullchain pem register st inclu
  • Ansible - .env 文件中的环境变量

    我正在尝试设置一个剧本 它将运行命令来检查目标计算机中安装的服务的状态 该命令仅在以下情况下才有效 env file被执行 执行的命令 env file is
  • 获取 Ansible 控制机 IP 地址的最佳方法

    我正在使用 Ansible 和ufw在我的服务器上设置防火墙 作为ufw规则 我希望允许来自 Ansible 控制机的 SSH 但不允许来自其他任何地方 我的问题是 获取控制机本身的 IP 地址以便我可以将其放入规则中的最佳方法是什么 我知
  • 将变量内容复制到事实中后,Ansible 会抛出错误

    我有变量 其中包含带有其他模板引擎标记的字符串 不幸的是它们是三个花括号 如果我直接使用这些变量 一切都很好 如果我将它们复制到事实中以便随后修改它们 Ansible 会抛出错误 示例剧本 hosts localhost connectio
  • ansible 有 yaml 编辑模块吗?

    我需要修改 yaml 文件 施洛德配置 http schleuder2 nadir org documentation v2 2 index html 并且我想从 ansible 剧本中执行此操作 是否有模块可以执行此操作 很难用谷歌搜索这
  • Ansible:从意图文件创建字典

    shell gt cat myfile yml ABC ABC C01 host a1 prefixlen 19 host a2 prefixlen 19 DEF DEF C01 host d1 prefixlen 19 host d2 p
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • Ansible:权限被拒绝(公钥、密码)

    我无法连接到 Ansible 中的主机 这是错误 192 168 1 12 无法到达 gt 改变 假 msg 错误 SSH 在连接过程中遇到未知错误 我们建议您使用 vvvv 重新运行该命令 这会导致 将启用 SSH 调试输出以帮助诊断问题
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • 无法在守护进程模式下运行 Ansible

    我可以运行 Ansible 像守护进程一样管理我的主机吗 例如 我有时会更改我的剧本 但我不想手动运行 ansible playbook main yml 请不要建议 crontab 有一个特定的点 我不能在生产服务器上使用 crontab
  • 使用嵌套 delegate_to 将文件从一台远程服务器复制到另一台远程服务器

    作为用户 我想将文件从节点1复制到节点2 是否可以使用复制模块 delegate to 以下是我试图做的事情 Playbook 从节点 3 运行 Playbook Sample name Gather Facts for all hosts
  • 如何使用Vault在Ansible中运行playbook api

    我有一本带有Vault的剧本 我可以运行它 ansible playbook info yml ask vault pass 现在 我想在 Ansible 中运行我的 playbook api 答案在如何使用Vault在Ansible v2
  • Ansible 循环直到条件匹配。

    我想进行一系列 API 调用 每次调用后检查结果中的特定参数 如果它大于特定值 则将其保存在寄存器中并继续进一步执行剧本 基本上 我正在对 RHEV 进行 API 调用来检查存储域 然后我想检查存储域是否有足够的空间 如果有 则将该存储域i
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • Ansible git clone“权限被拒绝”但直接 git clone 工作

    我在使用 Ansible 时遇到了一个令人不安的问题 我使用当前主机的 ssh 密钥在我的环境中设置 git 克隆 name Add user Public Key copy src Users alexgrs ssh id rsa pub
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den

随机推荐

  • CMD命令

    打开命令提示符 1 添加服务 输入 sc create 服务名称 binPath 目录的绝对路径 exe 2 删除服务 输入 sc delete 服务名称 3 修改服务描述 输入 sc description 服务名称 描述
  • 过拟合以及解决办法

    过拟合 先谈谈过拟合 所谓过拟合 指的是模型在训练集上表现的很好 但是在交叉验证集合测试集上表现一般 也就是说模型对未知样本的预测表现一般 泛化 generalization 能力较差 如图所示 图片来源 coursera 吴恩达机器学习公
  • D0822-API01

    Math类 工具类有 Math Objects Arrays LocalDateTime Period Duration DateTimeFormatter Math类中包含一些对数据进行数学运算的方法 而该类中的方法全都是静态的 像这样的
  • 函数的相关和卷积

    1 卷积的定义 卷积满足交换律 分配律 结合律 也具有位移不变性以及缩放性质 2 互相关的定义 变量替换后有 上述两式完全等价 性质 1 互相关是两个函数间存在相似性的量度 2 由上述 2 式可得 3 相关运算和卷积运算的区别 对相关来说
  • 【STM32】DHT11温湿度模块传感器详解&代码

    一 DHT11产品介绍 DHT11是数字温湿度传感器 测量范围 湿度20 95 温度0 50 广泛应用于加湿器 温湿度计 空调 汽车等领域 二 典型应用电路 如上图DATA引脚用于MCU与DHT11之间的通讯和同步 采用单总线数据格式 一次
  • Swing:使用顶层容器

    介绍Swing顶层容器 翻译Using Top Level Containers url http java sun com docs books tutorial uiswing components toplevel html url
  • 如何查看iphone的uuid_如何查找Mac,iPhone和iPad的UUID

    Mac iPhone和iPad都分配了通用唯一标识符 UUID 这些代码是特定于每个设备的 类似于序列号 开发人员使用它们来分别标识每个代码 这是您需要知道的 UUID是由字母和数字组成的字符串 形成唯一的模式 您的Mac iPhone和i
  • (z)无杂散动态范围SFDR--影响通信机性能的因素

    无杂散动态范围SFDR Spurious Free Dynamic range 已经成为一个重要的性能指标 直接影响到通信系统的等级水平 尤其是对数字化的VHF UHF宽频段接收机 SFDR这个指标 越来越受到设计者与质量监督人员的重视 一
  • STM32 基础系列教程 36 - Lwip_dns

    前言 域名系统 英文 DomainNameSystem 缩写 DNS 是互联网的一项服务 它作为将域名和IP地址相互映射的一个分布式数据库 能够使人更方便地访问互联网 DNS使用TCP和UDP端口53 当前 对于每一级域名长度的限制是63个
  • 内存泄漏

    2017 09 23 有一件事情 以后也一定要注意 那就是注意释放内存 这次的教训就是 哈希表每次清理的时候 直接就是计数清零了 但是却忘了把拉出来的链表给好好清理一下 2018 03 27 在写控制端口服务端的时候 使用了链表来进行控制
  • 制作ghost镜像

    本篇主要是制作镜像步骤 后面会有ghost镜像安装系统的博文出来 敬请关注 准备工作 1 使用正常的系统 一般c盘作为系统盘 2 下载PE工具 并安装 老毛桃 大白菜 u深度均可 3 一个空U盘 制作成PE盘 制作老毛桃PE为例 选择默认模
  • Conclusion about Scene Change Detection

    Refer to error concealment there are lost of research paper Today I want to conclude some paper about scene change detec
  • stm32f103最小系统

    STM32F103 最小系统是指使用 STM32F103 系列微控制器构建的最简单的系统 它通常包括 STM32F103 微控制器 外部存储器 如 flash 存储器或 EEPROM 外部晶振以及最少的电路元件 如电阻 电容和开关 最小系统
  • 【华为OD机试 2023 B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 7_spring-cloud-config-center

    文章目录 配置中心 使用 匹配规则 具体节点从配置中心读取配置 刷新配置 单个刷新 批量刷新 bus 使用 配置中心 spirng cloud config github 搭建 服务比较多 下发配置文件比较麻烦 服务启动时 从公共服务拉取配
  • 属于服务器操作系统的有,属于服务器操作系统的有

    属于服务器操作系统的有 内容精选 换一换 将外部镜像文件注册成云平台的私有镜像后 您可以使用该镜像创建新的云服务器 或对已有云服务器的系统进行重装和更换 本节介绍使用镜像创建云服务器的操作 您可以按照通过镜像创建云服务器中的操作指导创建弹性
  • MySQL中如何正确存储IP地址

    一 IP地址应该怎么存 在MySQL中 当存储IPv4地址时 应该使用32位的无符号整数 UNSIGNED INT 来存储IP地址 而不是使用字符串 用UNSIGNED INT类型存储IP 地址是一个4字节长的整数 如果是字符串存储IP 地
  • Firefox打不开https(SSL)加密链接的原因之一

    直接上图 firefox出现此种提示很多次了 在网上搜了很多方法 什么改配置参数 什么重新安装都没用 打开官方帮助说明一样没解决问题 后来 终于发现原来是卡巴斯基 KIS 2016 的原因 如图 KIS 设置中 附加 网络设置 扫描加密连接
  • 交叉编译工具链中GUN常用命令简介

    一 交叉编译工具链前缀 arm none linux gnueabi 二 常用命令 注 此处以汇编点亮led灯代码为例 重点掌握 1 gcc 编译命令 arm none linux gnueabi gcc c S或 c o o eg arm
  • ansible的脚本和playbook剧本

    playbooks 概述 Playbook介绍 playbook是ansible用于配置 部署 和管理被控节点的剧本 通过playbook的详细描述 执行其中的tasks 可以让远端主机达到预期的状态 playbook是由一个或多个 pla