ansible剧本快速上手

playbook剧本介绍

  • 是什么:能户长期保存,且能实现批量配置、部署…的文件
  • 格式:yaml格式。用 空格 冒号 头号 句号
  • 语法检测:ansible-playbook --syntax-check install-zabbix.yaml或则 -C检测
  • 取消默认任务:gather_facts: no
剧本ans ad-hoc
共同点批量管理,使用了模块
区别重复使用一次性使用
应用场景大规模部署服务用于少量测试
ansible命令说明
-C | --syntax-check语法检测
–step单步运行,每次输入yes进入下一步
-t + 自定义的步骤名称只运行指定的步骤
---
- hosts: all
  tasks:
    - name: 01 one
      shell: echo 01 >/tmp/one.log
    - name: 02 secend
      shell: echo 02 >/tmp/two.log
    - name: 03 three
      shell: echo 03 >/tmp/two.log

在这里插入图片描述

使用案例

file和copy

1.在客户端创建/test/dir1

2.把本地hosts文件放入创建好的目录

这是一种简单的写法:

- hosts: all
  tasks:
    - name: 01 create director
      file: path=/test/dir1 state=directory
    - name: 02 flader file
      copy: src=/etc/hosts dest=/test/dir1

第2中写法,最常用:

- hosts: all
  tasks:
    - name: 01 create director
      file:
        path: /test/dir1 
        state: directory
    - name: 02 flader file。
      # copy 远端主机的文件到指定目录
      copy:
        src: /etc/hosts
        dest: /test/dir1

3.执行剧本,以方式2为例

ansible-playbook role.yaml -i hosts

查看文件

cat /test/dir1/hosts 

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# 这是ansible主机传过来的文件

安装软件

validate_certs: no,不检查证书

- hosts: all
  tasks:
    - name: 01下载安装软件
      get_url:
        url: "https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.3/rhel/7/x86_64/zabbix-agent-6.4.1-rc2.release1.el7.x86_64.rpm"
        dest: /tmp/
        validate_certs: no
    - name: 02yum安装
      yum:
        name: /tmp/zabbix-agent-6.4.1-rc2.release1.el7.x86_64.rpm
        state: present
    - name: 03配置zabbix
      debug:
        msg: "进行配置zabbix"
    - name: 04启动zabbix
      systemd:
        name: zabbix-agent
        enabled: yes
        state: started

部署nfs并挂载

- hosts: nfs
  tasks:
    - name: 01下载nfs
      yum:
        name: nfs-utils,rpcbind
        state: installed
    - name: 02修改配置文件
      lineinfile:
        path: /etc/exports
        line: "/backup-nfs 172.16.1.0/24(rw,all_squash,anonuid=666,anongid=666)"
        create: true
      #也还可以用copy模块
      #copy:
  		  #content: "/backup-nfs 172.16.1.0/24(rw,all_squash,anonuid=666,anongid=666)"
	  	  #dest: /etc/exports
    - name: 02-1创建组www
      group:
        name: www
        gid: 666
        state: present
    - name: 02-2创建用户www
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: no
        state: present
    - name: 03创建共享目录
      file:
        path: /backup-nfs
        state: directory
        owner: www
        group: www
    - name: 04-1启动rpncbind
      systemd:
        name: rpcbind
        enabled: yes
        state: started
    - name: 04-2启动nfs
      systemd:
        name: nfs
        enabled: yes
        state: started        
- hosts: web
  tasks:
    - name: 01安装nfs
      yum:
        name: nfs-utils
        state: present
    - name: 02挂载
      mount:
        src: 172.16.1.31:/backup-nfs
        path: /mnt
        fstype: nfs
        state: mounted

剧本中的变量

自定义变量

手动在剧本中定义

1.在剧本中定义一个目录变量,此变量只会在当前剧本中生效

- hosts: all
  # 自定义一个关于目录的变量
  vars:
    dir: /wzy/wzy/wzy
  tasks:
    - name: 创建变量中的目录
      file:
        path: "{{dir}}"
        state: directory
    - name: debug测试变量空格问题
      debug:
        msg: "变量内容:{{ dir }}"

引用变量时,什么时候加引号?

1️⃣加引号:应用的变量单独开头时,如上方:path: “{{dir}}”

2️⃣不加引号:变量前有参数了。path: /test/{{dir}}

  • 案例2,定义多个变量
- hosts: nfs
  vars:
    - p1: tree
    - p2: sl
  tasks:
    - name: 安装软件
      yum:
        name:
          - "{{ p1 }}"
          - "{{ p2 }}"
        state: present
  • 案例3一个变量含有多个值
- hosts: web
  vars:
  - pk:
    - 'sl'
    - 'cowsay'
  tasks:
    - name: 安装软件
      yum:
        name: "{{ pk }}"
        state: present

使用变量文件定义

  • 变量文件是:供其他剧本文件调用其中的变量

1.写一个变量文件vars.yaml

user: www
dir: /tmp/wzy/wzy/wzy
file: /etc/hosts

2.写一个普通的yaml文件

- hosts: all
  vars_files: ./vars.yaml
  tasks:
  - name: 引用变量文件中的变量
    file:
      path: "{{dir}}"
      state: directory
  - name:
    copy:
      src: "{{file}}"
      dest: /tmp/

分组变量

  • 分组变量的特点:自动寻找属于改组的变量

1.准备组变量文件

[root@gitlabansible]# cat group_vars/web/vars.yaml 
user: web_user
[root@gitlabansible]# cat group_vars/db/vars.yaml 
user: db_user

2.书写剧本

cat 12-group_variable.yaml 
- hosts: web
  gather_facts: false
  tasks:
  - name: 测试web组变量是否可用
    debug:
      msg: "web组的user变量值是{{ user }}"

- hosts: db
  gather_facts: false
  tasks:
  - name: 测试db组变量是否可用
    debug:
      msg: "db组的user变量值是{{ hostvars['10.0.0.51']['user'] }}"

  - name: 获取db组的主机列表
    debug:
      msg: "db组的主机是{{ groups['db'] }}"

3.host列表如下:

[root@gitlabansible]# cat hosts
[web]
10.0.0.62

[db]
10.0.0.51

4.执行剧本

PLAY [web] 

TASK [测试web组变量是否可用] 
ok: [10.0.0.62] => {
    "msg": "web组的user变量值是web_user"
}

PLAY [db] 

TASK [测试db组变量是否可用] 
ok: [10.0.0.51] => {
    "msg": "db组的user变量值是db_user"
}

TASK [获取db组的主机列表] 
ok: [10.0.0.51] => {
    "msg": "db组的主机是[u'10.0.0.51']"
}

register注册变量

  • 本质是 `反引号` ,把结果赋值给了register
  • 通过命令获取的内容都会存放到 Register 变量中

1.使用shell模块把当前时间注册为一个变量

- hosts: all
  tasks:
    - name: 定义一个shell,获取时间
      shell: date +%F
      register: result
    - name: 打印出date变量
      debug:
        msg: "date变量结果是{{result}}"

2.运行后发现结果是一堆json格式的数据。在,回车分隔原始数据后:

也叫键|值,也就是原变量|变量值

ok: [10.0.0.7] => {
    "msg": "date变量结果是{'stderr_lines': [], 
    u'changed': True, 
    u'end': u'2024-04-29 17:08:36.889077', 
    'failed': False, 
    u'stdout': u'2024-04-29', 
    u'cmd': u'date +%F', 
    u'rc': 0, 
    u'start': u'2024-04-29 17:08:36.873612', 
    u'stderr': u'', 
    u'delta': u'0:00:00.015465', 
    'stdout_lines': [u'2024-04-29']}"
}

3.若要取出单独的时间,需要改为 msg: "date变量结果是{{result.stdout}}" ,即要标出输出

在这里插入图片描述

facts变量

  • facts变量相当于是ansible内置变量,存放被管理机器的基本信息

  • 当管理不同的主机 CentOS、Ubuntu 时,可以使用 when 判断配合 facts 变量实现不同的操作

  • 用于记录主机信息的变量,关闭facts变量后可以加速剧本的执行

  • 默认开启,关闭方法:gather_facts: no

    • - hosts: web
        gather_facts: false
      
  • 查看主机的facts变量:ansible -i hosts web -m setup

在这里插入图片描述

2.使用facts变量查看主机信息

- hosts: web
  tasks:
    - name: 收集主机信息
      debug:
        msg: |
            你的系统版本是{{ansible_distribution}}
            你的主机名是{{ansible_hostname}}
            你的CPU架构是{{ansible_architecture}}
            你的eth0 IP是{{ansible_eth0.ipv4.address}}

运行结果如下:

ok: [10.0.0.7] => {
    "msg": "你的系统版本是CentOS\n你的主机名是web01\n你的CPU架构是x86_64\n你的eth0 IP是10.0.0.7\n"
}

.j2 模版

  • 假设一个文件中含有变量,host=ansible_hostname,传输过去时要体现出host=web01,要怎么实现呢?
  • 实现:传输变量文件.j2,不要用copy,而是template

1.编辑 motd.j2 文件

host={{ ansible_hostname }}

2.准备yaml

- hosts: web
  gather_facts: false
  tasks:
  - name: copy motd.j2 到/tmp 下
    copy:
      src: motd.j2
      dest: /tmp/motd
      backup: false

- hosts: ub
  gather_facts: false
  tasks:
  - name: copy motd.j2 到/root 下
    template:
      src: motd.j2
      dest: /root
      backup: false

3.1查看 web主机:web01/tmp/motd.j2 ,变量没有生效,文件内容依旧是字符串,并没有把内置的facts变量解析出来

[root@web01~]# cat /tmp/motd.j2 
host: {{ ansible_hostname }}

3.2查看Ubuntu/root/motd.j2,j2变量已经生效,显示出了主机名

root@U-Desk:~# cat /root/motd.j2 
host: U-Desk

案例2 .j2配合vars传输配置文件

  • 使用方法:
    • templates/conf.j2:{{ 变量1 }}
      acts: false
      tasks:
    • name: copy motd.j2 到/root 下
      template:
      src: motd.j2
      dest: /root
      backup: false

3.1查看 web主机:web01/tmp/motd.j2 ,变量没有生效,文件内容依旧是字符串,并没有把内置的facts变量解析出来

```bash
[root@web01~]# cat /tmp/motd.j2 
host: {{ ansible_hostname }}

3.2查看Ubuntu/root/motd.j2,j2变量已经生效,显示出了主机名

root@U-Desk:~# cat /root/motd.j2 
host: U-Desk

案例2 .j2配合vars传输配置文件

  • 使用方法:
    • templates/conf.j2:{{ 变量1 }}
    • vars/main.yml: 变量1: 变量值1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode每日一题】——434.字符串中的单词数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时空频度】八【代码实现】九【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 434.字符串中的单词数 四【题目描述】 统计字符串中的单词个…

C++ OpenGL学习笔记(1、Hello World空窗口程序)

终于抽出时间系统学习OpenGL 教程,同时也一步一步记录怎样利用openGL进行加速计算。 目录 1、环境准备1.1、库的下载1.2、库的选择及安装 2、OpenGL第一个项目,Hello World!2.1、新建hello world控制台项目2.2、配置openGL环境2.2.1 包含目录配置2.2.2 …

MySQL复制问题和解决

目录 环境介绍 一,主库执行delete,从库没有该数据 模拟故障 修复故障 二,主库执行insert,从库已存在该数据 模拟故障 故障恢复 三,主库执行update,从库没有该数据 模拟故障 故障恢复 四&#xf…

AWTK 在树莓派 pico 上的移植笔记

1. 配置文件 (awtk_config.h) pico 和 stm32f103 的配置差不多,虽然 pico 的内存要大不少,但是也不足提供一个完整的 FrameBuffer,所以只能使用片段 LCD。 我们在 awtk-stm32f103 的配置 基础稍作修改即可。 /* 使用片段 LCD */#define FRA…

构建MacOS应用小白教程(打包 签名 公证 上架)

打包 在package.json中,dependencies会被打进 Electron 应用的包里,而devDependencies则不会,所以必要的依赖需要放到dependencies中。files中定义自己需要被打进 Electron 包里的文件。以下是一个完整的 mac electron-builder的配置文件。 …

flink sink doris

接上文&#xff1a;一文说清flink从编码到部署上线 网上关于flink sink drois的例子较多&#xff0c;大部分不太全面&#xff0c;故本文详细说明&#xff0c;且提供完整代码。 1.添加依赖 <!--doris cdc--><!-- 参考&#xff1a;"https://doris.apache.org/zh-C…

GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录

文章目录 论文背景Spectre-PHT&#xff08;Transient Execution &#xff09;Concurrency BugsSRC/SCUAF和实验条件 流程Creating an Unbounded UAF WindowCrafting Speculative Race ConditionsExploiting Speculative Race Conditions poc修复flush and reload 论文 https:/…

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案

随着科技高速发展&#xff0c;视频信号经过数字压缩&#xff0c;通过互联网宽带或者移动4G网络传递&#xff0c;可实现远程视频监控功能。将这一功能运用于施工现场安全管理&#xff0c;势必会大大提高管理效率&#xff0c;提升监管层次。而这些&#xff0c;通过Liveweb监控系统…

AS-REP Roasting离线爆破攻击

针对一个域内用户&#xff0c;其账户选项有个设置叫作 “不要求 kerberos 预身份验证”&#xff0c;它默认是关闭的。 当 “不要求 kerberos 预身份验证” 选项被勾选&#xff0c;会出现以下效果&#xff1a; as-req 报文中不需要添加用户 hash 加密的时间戳&#xff0c;自动返…

python中的局部变量、全局变量问题的思考(对比于c语言)

今天在运行python时遇到了局部变量和全局变量的问题&#xff0c;令我很迷惑。 首先&#xff0c;我在学习python之前先学习了c语言&#xff0c;所以c语言的一些东西影响了我对这个问题的思考。 在c语言中 局部变量和全局变量的区别就在于作用域的范围大小。在c语言中&#xf…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…

文件,IO流

目录 一 java 1. IO流 1&#xff09;输入输出&#xff08;以程序的视角判断 &#xff09; 1.1 IO流的分类 1&#xff09;字符流效率高于字节流 1.2 流和文件的关系 2. inputstream--字节输入流 2.1 fileinputstream 2.1.1常用方法&#xff1a; 1&#xff09;单个字符…

pymssql-2.1.4.dev5-cp37-cp37m-win_amd64.whl 安装

pip install pymssql 安装pymssql出现下面的问题 error: Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools 因为要使用python连接sqlserver数据库&#xff0c;需要pymssq…

vue中验证码的实现方式

在写登录页的时候有的系统会让你也进行一下验证码绘制&#xff0c;那么验证码如何实现的呢&#xff1f;我在写登录页的时候通过将登录框&#xff0c;验证码分开页面来写&#xff0c;最后将它们变成标签来导入到我的样式页面中&#xff0c;这样写不仅方便&#xff0c;更容易修改…

致远互联OA使用问题及解决方法记录(个人)

1、更换设备登录账号出现绑定要求 解决&#xff1a;后台管理员账号——M3安全管理——安全设置——删除绑定 2、审批消息错误回退 解决&#xff1a;协同工作——一已办事项——取回——重新审批/流程监督里撤回/流程索道节点回退 3、签章图片在表单上显示过大 解决&#x…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天&#xff0c;p9-p27 总结&#xff0c;总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是&#xff1a;c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum am…

java_章节作业

第1题 package com.hspedu.homework;/*** author:寰愬悏瓒&#xfffd;* date:2024/12/19 version:1.0*/ public class Homework01 {public static void main(String[] args) {//初始化Person对象数组&#xff0c;有3个Person对象&#xff1b;Person[] persons new Person[3];…

Audiocraft智能音频和音乐生成工具部署及使用

1、概述 Facebook开源了一款名为AudioCraft的AI音频和音乐生成工具。 该工具可以直接从文本描述和参考音乐生成高质量的音频和音乐。AudioCraft包含MusicGen、AudioGen和EnCodec三个模型&#xff0c;分别实现音乐生成、音频生成和自定义音频模型构建。 2、项目地址 https://…

华为云计算HCIE笔记02

第二章&#xff1a;华为云Stack规划设计 交付总流程 准备工作&#xff1a;了解客户的基本现场&#xff0c;并且对客户的需求有基本的认知。 HLD方案BOQ报价设备采购和设备上架 2.安装部署流程 硬件架构设计 硬件设备选配 设备上架与初始化配置 准备相关资料&#xff08;自动下载…