【playbook】Ansible的脚本----playbook剧本

Ansible的脚本----playbook剧本

  • 1.playbook剧本组成
  • 2.playbook剧本实战演练
    • 2.1 实战演练一:给被管理主机安装Apache服务
    • 2.2 实战演练二:使用sudo命令将远程主机的普通用户提权为root用户
    • 2.3 实战演练三:when条件判断指定的IP地址
    • 2.4 实战演练四:使用with_items迭代循环在远程主机创建文件和目录
    • 2.5 实战演练五:使用with_items迭代循环并调用变量创建指定文件和目录
    • 2.6 实战演练六:在playbook剧本中基于Templates模块安装Apache服务
    • 2.7 实战演练七:在playbook剧本中基于Templates模块创建标签
  • 3.playbook知识点总结

1.playbook剧本组成

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

2.playbook剧本实战演练

2.1 实战演练一:给被管理主机安装Apache服务

在ansible服务器主机,给远程被管理主机制作安装Apache服务的剧本文件demo1.yaml

cd /etc/yum.repos.d/     #制作本地yum源
cd /etc/ansible/playbook/    #将修改后的httpd.conf文件复制到当前目录中

vim /etc/ansible/playbook/demo1.yaml 

- name: the first play for install apache
  gather_facts: false
  hosts: dbservers
  remote_user: root
  tasks:
  - name: disable firewalld
    service: name=firewalld state=stopped enabled=no
  - name: disable selinux
    command: '/usr/sbin/setenforce 0'
    ignore_errors: true
  - name: disable selinux forever
    replace: path=/etc/selinux/config  regexp="enforcing"  replace="disabled"
  - name: mount cdrom
    mount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted
  - name: copy local yum configuration file
    copy: src=/etc/yum.repos.d/repo.bak/local.repo  dest=/etc/yum.repos.d/local.repo
  - name: install apache
    yum: name=httpd state=latest
  - name: prepare httpd configuration file
    copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify: "reload httpd"
  - name: start apache
    service: name=httpd state=started enabled=yes

  handlers:
  - name: reload httpd
    service: name=httpd state=reloaded

在这里插入图片描述
运行playbook

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

在这里插入图片描述
在这里插入图片描述

2.2 实战演练二:使用sudo命令将远程主机的普通用户提权为root用户

准备工作:先在远程主机添加clr用户,然后在ansible服务主机使用clr用户远程主机,提权为root用户;
在这里插入图片描述
指定远程主机sudo切换用户

---
- hosts: dbservers
  remote_user: clr          
  become: yes	                 #2.6版本以后的参数,之前是sudo,意思为切换用户运行
  become_user: root              #指定sudo用户为root

‘

在ansible服务器主机,给远程被管理主机制作使用clr用户登录,然后提权为root用户的剧本文件demo2.yaml

vim /etc/ansible/playbook/demo2.yaml 

- name: second play
  hosts: dbservers
  remote_user: clr
  become: yes
  become_user: root
  vars:
  - username: gzy
  - groupname: Ayu
  - filename: /opt/123.txt
  gather_facts: true
  tasks:
  - name: create group
    group: name={{groupname}}  gid=2800
  - name: create user join group
    user: name={{username}} uid={{uid}} groups={{groupname}}
  - name: copy file
    copy: content="{{ansible_default_ipv4.address}}" dest={{filename}}
  - name: modify username and groupname of file
    file: path={{filename}} owner={{username}}  group={{groupname}}

在这里插入图片描述

ansible-playbook demo2.yaml -k -K -e "uid=8888"

在这里插入图片描述

在这里插入图片描述

2.3 实战演练三:when条件判断指定的IP地址

在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。

//when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务
在这里插入图片描述

在ansible服务器主机,制作剧本文件demo2.yaml,设置使用when进行条件判断

vim /etc/ansible/playbook/demo3.yaml 

- name: third play
  hosts: Ayu
  remote_user: root
  tasks:
  - name: touch file
    file: path=/opt/Ayu.txt state=touch
    #when: ansible_default_ipv4.address != "192.168.80.20"
    when: inventory_hostname == "192.168.80.80"

在这里插入图片描述

ansible-playbook .yaml

在这里插入图片描述
在这里插入图片描述

2.4 实战演练四:使用with_items迭代循环在远程主机创建文件和目录

vim /etc/ansible/playbook/demo4.yaml 

- name: fouth play
  hosts: dbservers
  remote_user: root
  vars:
    myfile:
    - /opt/a
    - /opt/b
    - /opt/c
    - /opt/d
  tasks:
  - name: touch directory
    with_items: "{{myfile}}"
    file: path={{item}} state=directory

  - name: touch file
    with_items:
    - /root/a
    - /root/b
    - /root/c
    - /root/d
    file:
      path: "{{item}}"
      state: touch

在这里插入图片描述

 ansible-playbook demo4.yaml 

在这里插入图片描述
在这里插入图片描述

2.5 实战演练五:使用with_items迭代循环并调用变量创建指定文件和目录

vim /etc/ansible/playbook/demo5.yaml 

- name: fifth play
  hosts: dbservers
  remote_user: root
  tasks:
  - name: touch file
    with_items:
    - {filename: /opt/a, username: clr, groupname: video}
    - {filename: /opt/b, username: gzy, groupname: Ayu}
    file: path={{item.filename}}  owner={{item.username}} group={{item.groupname}} state=touch

  - name: create dir
    with_items:
    - filename: /opt/cd
      username: clr
      groupname: Ayu
    - filename: /opt/ef
      username: gzy
      groupname: video
    file:
      path: "{{item.filename}}"
      owner: "{{item.username}}"
      group: "{{item.groupname}}"
      state: directory

在这里插入图片描述
在这里插入图片描述

2.6 实战演练六:在playbook剧本中基于Templates模块安装Apache服务

(1)先准备一个以 .j2为后缀的template模板文件,设置引用的变量

cp /etc/httpd/conf/httpd.conf /etc/ansible/playbook/httpd.conf.j2

vim /etc/ansible/playbook/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

在这里插入图片描述

(2)修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

vim /etc/ansible/hosts       
[webservers]
192.168.80.50 ip_port=192.168.80.50:8050 host_name=www.accp.com:8050 root_dir=/var/www/html/accp
192.168.80.60 ip_port=192.168.80.60:8060 host_name=www.benet.com:8060 root_dir=/var/www/html/benet

在这里插入图片描述
(3)编写playbook

vim /etc/ansible/playbook/demo6.yaml 

- name: sixth play
  hosts: webservers
  remote_user: root
  vars:
  - pkg: httpd

  tasks:
  - name: disable firewalld
    service: name=firewalld state=stopped enabled=no
  - name: disable selinux
    command: '/usr/sbin/setenforce 0'
    ignore_errors: true
  - name: disable selinux forever
    replace: path=/etc/selinux/config  regexp="enforcing"  replace="disabled"
    ignore_errors: true
  - name: mount cdrom
    mount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted
    ignore_errors: true
  - name: install apache
    yum: name=httpd state=latest
  - name: create root dir
    file: state=directory path={{item}}
    with_items:
    - /var/www/html/accp
    - /var/www/html/benet
  - name: create index.html in www.accp.com
    copy: content="<h1>this is accp web</h1>" dest=/var/www/html/accp/index.html
    when: ansible_default_ipv4.address == "192.168.80.50"
  - name: create index.html in www.benet.com
    copy: content="<h1>this is benet web</h1>" dest=/var/www/html/benet/index.html
    when: inventory_hostname == "192.168.80.60"
  - name: prepare configuration file
    template: src=/etc/ansible/playbook/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
    notify: "reload apache"
  - name: start apache
    service: name={{pkg}} state=started enabled=yes

  handlers:
  - name: reload apache
    service: name={{pkg}} state=reloaded                                                

在这里插入图片描述

ansible-playbook demo6.yaml

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.7 实战演练七:在playbook剧本中基于Templates模块创建标签

可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用–tags选项能实现仅运行指定的tasks。
playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

vim /etc/ansible/playbook/demo7.yaml 

- name: seventh play
  hosts: dbservers
  remote_user: root
  tasks:
  - name: create abc.txt
    file: path=/opt/abc.txt  state=touch
    tags:
    - clr
    - gzy

  - name: create 123.txt
    file: path=/opt/123.txt  state=touch
    tags:
    - always

  - name: create gzy.txt
    copy: content="gzy like mygirl"  dest=/opt/wangdian.txt
    tags:
    - gzy

在这里插入图片描述

 ansible-playbook demo7.yaml --tags="gzy"

在这里插入图片描述
在这里插入图片描述

3.playbook知识点总结

playbook剧本

vim  XXX.yaml
- name:                      #指定play名称
  hosts:                     #指定主机组
  remote_user:               #执行用户 
  gather_facts: true|false   #是否收集远程主机facts信息
  vars:                      #定义变量
  tasks:                     #定义task任务列表
  - name:                 #定义task任务名称
    模块:                 #定义任务使用的模块和参数
    with_items:           #定义循环列表
    when:                 #定义判断条件(== != >= > <= <),true则执行任务,否则不执行任务
	ignore_errors: true   #忽略任务失败
    notify:               #定义task任务changed状态时触发的任务名
    tags:                 #指定标签,ansible-playbook --tags 仅执行拥有指定 tags 标签的任务(always标签总会执行)
  handlers:                  #定义notify触发的任务列表

task任务模块语法格式

横向格式:
模块名: 参数选项1=值  参数选项2={{变量名}}  ...

纵向格式:
模块名:
  参数选项1: 值
  参数选项2: "{{变量名}}"
  ...

with_items和变量的语法格式

横向格式:
with_items: ["值1", "值2", "值3"]

值为对象(键值对字段)时:
with_items:
- {key1: value1, key2: value2, ...}
- {key1: value3, key2: value4, ...}

纵向格式:
with_items:
- 值1
- 值2
- 值3

值为对象(键值对字段)时:
with_items:
- key1: value1
  key2: value2
- key1: value3
  key2: value4

template模板模块

(1)先要准备一个xxx.j2模板文件,在文件中使用 {{变量名}} 引用主机变量 或者 vars 自定义的变量 及 facts 字段的值
(2)在playbook中的tasks中定义template模板配置  template: src=xxx.j2  dest=xxx

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

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

相关文章

SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤–【思维导图知识范围】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具&#xff1a;必要的知识深层一些的知识 上效果图在Spring Boot里使用ErrorPage还要注意的是 配套资源作业&#xff…

使用Windbg分析从系统应用程序日志中找到的系统自动生成的dump文件去排查问题

目录 1、尝试将Windbg附加到目标进程上进行动态调试&#xff0c;但Windbg并没有捕获到 2、在系统应用程序日志中找到了系统在程序发生异常时自动生成的dump文件 2.1、查看应用程序日志的入口 2.2、在应用程序日志中找到系统自动生成的dump文件 3、使用Windbg静态分析dump文…

Mysql的锁

加锁的目的 对数据加锁是为了解决事务的隔离性问题&#xff0c;让事务之前相互不影响&#xff0c;每个事务进行操作的时候都必须先加上一把锁&#xff0c;防止其他事务同时操作数据。 事务的属性 &#xff08;ACID&#xff09; 原子性 一致性 隔离性 持久性 事务的隔离级别 锁…

大数据课程D4——hadoop的YARN

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解YARN的概念和结构&#xff1b; ⚪ 掌握YARN的资源调度流程&#xff1b; ⚪ 了解Hadoop支持的资源调度器&#xff1a;FIFO、Capacity、Fair&#xff1b; ⚪ 掌握YA…

jenkins自定义邮件发送人姓名

jenkins发送邮件的时候发送人姓名默认的&#xff0c;如果要自定义发件人姓名&#xff0c;只需要修改如下信息即可&#xff1a; 系统管理-system-Jenkins Location下的系统管理员邮件地址 格式为&#xff1a;自定义姓名<邮件地址>

三分钟白话RocketMQ系列—— 核心概念

目录 关键字摘要 Q1&#xff1a;RocketMQ是什么&#xff1f; Q2: 作为消息中间件&#xff0c;RocketMQ和kafka有什么区别&#xff1f; Q3: RocketMQ的基本架构是怎样的&#xff1f; Q4&#xff1a;RocketMQ有哪些核心概念&#xff1f; 总结 RocketMQ是一个开源的分布式消…

测试|测试分类

测试|测试分类 文章目录 测试|测试分类1.按照测试对象分类&#xff08;部分掌握&#xff09;2.是否查看代码&#xff1a;黑盒、白盒灰盒测试3.按开发阶段分&#xff1a;单元、集成、系统及验收测试4.按实施组织分&#xff1a;α、β、第三方测试5.按是否运行代码&#xff1a;静…

SpringMVC程序开发

1.什么是Spring MVC? Spring Web MVC是基于Servlet API构建的原始的Web框架&#xff0c;从一开始是就包含在Spring框架中。它的正式名称“Spring Web MVC"来自其源模板的名称&#xff08;Spring-webmvc)&#xff0c;但通常被称为“Spring MVC" 从上述的定义我们可…

Unity游戏源码分享-ARPG游戏Darklight.rar

Unity游戏源码分享-ARPG游戏Darklight.rar 玩法 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88105464

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Sc 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…

在腾讯云服务器OpenCLoudOS系统中安装mysql(有图详解)

1. 创建MySQL安装目录 mkdir -p app/soft//mysql 2. 进入MySQL安装目录&#xff0c;下载&#xff0c;安装 cd /app/soft/mysql/ wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 得到安装包&#xff1a; 解压安装包&#xff1a; 查看系统是否自带…

ts一些常用符号

非空断言操作符(!) 具体是指在上下文中当类型检查器无法断定类型时&#xff0c;一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非 undefined 类型。具体而言&#xff0c;x! 将从 x 值域中排除 null 和 undefined 。 1. 赋值时忽略 undefined 和 null function…

JVM源码剖析之JIT工作流程

版本信息&#xff1a; jdk版本&#xff1a;jdk8u40思想至上 Hotspot中执行引擎分为解释器、JIT及时编译器&#xff0c;上篇文章描述到解释器过度到JIT的条件。JVM源码剖析之达到什么条件进行JIT优化 这篇文章大致讲述JIT的编译过程。在JDK中javac和JIT两部分跟编译原理挂钩&a…

游游的排列构造

示例1 输入 5 2 输出 3 1 5 2 4 示例2 输入 5 3 输出 2 1 4 3 5 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e55; int n,k; int main(){scanf("%d%d",&n,&k);int xn-k1;int yn-k;int f1;for(int i1;i&l…

【前端】javascript+html+css 家具销售网站(代码+报告)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

工业RFID读写器在食品饮料加工生产的应用!

当前食品饮料加工行业快速发展&#xff0c;得益于科技的应用&#xff0c;科技不仅提高了生产效率&#xff0c;还提升了食品生产质量和食品安全水平。其中&#xff0c;RFID技术在食品饮料行业中的应用对于加工生产帮助很大&#xff0c;RFID技术未来在食品饮料行业仍有巨大的潜力…

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…

明晚直播:可重构计算芯片的AI创新应用分享!

大模型技术的不断升级及应用落地&#xff0c;正在推动人工智能技术发展进入新的阶段&#xff0c;而智能化快速增长和发展的市场对芯片提出了更高的要求&#xff1a;高算力、高性能、灵活性、安全性。可重构计算区别于传统CPU、GPU&#xff0c;以指令驱动的串行执行方式&#xf…

5.开发DAO组件 -- Spring Data JPA

开发DAO组件 作用&#xff1a;用来访问数据库 持久化技术&#xff1a;Spring Data, JPA, Mybaits&#xff0c;jOOQ 等 Spring Boot为常见持久化技术提供了支持。 现在使用 Spring Data JPA Spring Data JPA 使用Spring Data JPA来访问数据库&#xff0c;需要再项目添加两个…