当前位置: 首页 > 编程日记 > 正文

Ansible02-实施playbook

一、编写和运行playbook

1.1、编写playbook

play 是针对清单中选定的主机运行的一组有序任务。playbook 是一个文本文件,其中包含由一个或多个按特定顺序运行的 play 组成的列表。

playbook 是以 YAML 格式编写的文本文件,通常使用扩展名 .yml 保存。playbook 使用空格字符缩进来表示其数据结构。 YAML 对用于缩进的空格数量没有严格的要求,但有两个基本的规则。这点很像python。

  • 处于层次结构中同一级别的必须具有相同的缩进量。
  • 如果项目属于其他项目的子项,其缩进量必须大于父项。

必须使用空格字符进行缩进,而不能使用制表符。使用 vim 编辑器,可以在 $HOME/.vimrc 文件填写下面的内容,检查到编辑 YAML文件时,按 Tab 时会自动缩进两个空格,并且自动缩进后续行。

" ai=autoindent ts=tabspace sw=shiftwidth et=expandtab
autocmd FileType yaml setlocal ai ts=2 sw=2 et

playbook以 --- 开头,以 ... 结尾(一般省略结尾的...)。中间一般包含name、hosts、tasks三个部分。play 本身是一个键值对集合。同一play 中的键应当使用相同的缩进量。

  • name 将一个任意字符串作为标签与该 play 关联,识了该 play 的用途。
  • hosts 属性,它指定对其运行 play 中的任务的主机。
  • tasks 属性,其值指定要为该 play 运行的任务的列表。

比如,编写名为 web.yml 的 playbook,里面添2个play。第一个 play 对 webservers 组部署 httpd,第二个 play 对 dev 组部署 mariadb-server。然后启动服务并设置为开机自动启动。设置防火墙允许访问这两个服务。

[student@workstation ansible]$ vim cat.yml---
- name: Deploy httpdhosts: webserverstasks:- name: Install httpdyum:name: httpdstate: present- name: Start httpdservice:name: httpdstate: startedenabled: yes- name: Permit httpfirewalld:service: httpstate: enabledpermanent: yesimmediate: yes- name: Create /var/www/html/index.htmlcopy:content: "Added by ansible.\n"dest: /var/www/html/index.html- name: Deploy mariadb-serverhosts: devtasks:- name: Install mariadb-serveryum:name: mariadb-serverstate: present- name: Start mariadbservice:name: mariadbstate: startedenabled: yes- name: Permit mysqlfirewalld:service: mysqlstate: enabledpermanent: yesimmediate: yes

1.2、运行playbook

运行 playbook 用命令 ansible-play 。用 --syntax-check 对playbook进行语法检查。用 --check 对playbook进行空运行。用 -v、-vv、-vvv、-vvvv 提高输出信息详细度,v越多越详细。确认无误以后再进行执行。执行结束后进行验证。

因为ansible是幂等的,所以已经处于正确状态的内容不会重复执行,因此playbook可以安全的多次执行。

[student@workstation ansible]$ ansible-playbook web.yml --syntax-checkplaybook: web.yml[student@workstation ansible]$ ansible-playbook web.yml --check
......
[student@workstation ansible]$ ansible-playbook web.yml 
......
[student@workstation ansible]$ curl serverc
Added by ansible.
[student@workstation ansible]$ curl serverd
Added by ansible.
[student@workstation ansible]$ telnet servera 3306
Trying 192.168.27.133...
Connected to servera.
Escape character is '^]'.

或者我们再写一个名为 web_test.yml 的 playbook,来检查一下。

[student@workstation ansible]$ vim web_test.yml 
---
- name: Test web pagehosts: webserverstasks:- name: Access url get http200uri:url: http://serverc.lab.example.com/status_code: 200return_content: yesregister: web_content- name: Show web pagedebug:var: web_content.content- name: Test mariadbhosts: devtasks:- name: Show databasesshell: 'mysql -uroot -e "show databases;"'register: db_content- name: Show databases resultdebug:var: db_content.stdout_lines

二、playbook或YAML的一些简单语法

2.1、注释

注释采用 # 开头的一行。

# This a comment.

2.2、字符串

YAML 字符串用 'string' 或 "string" 表示。YAML 格式允许定义多行字符串。使用竖线运算符 (|) 保留换行符(打印出来有换行符),或使用大于运算符 (>) 来将换行符换为空格(打印出来没有换行符,被替换成了空格)。

[student@workstation ansible]$ cat copylines.yml ---
- name: Copy 1-3 linehosts: devtasks:- name: One linecopy:content: >Ansible is agentless.Ansible manage hosts via ssh.Ansible is easy to use.dest: /tmp/line1.txt- name: Three linescopy:content: |Ansible is agentless.Ansible manage hosts via ssh.Ansible is easy to use.dest: /tmp/line3.txt

检查结果

[student@workstation ansible]$ ansible dev -a "cat /tmp/line1.txt"
servera.lab.example.com | CHANGED | rc=0 >>
Ansible is agentless. Ansible manage hosts via ssh. Ansible is easy to use.[student@workstation ansible]$ ansible dev -a "cat /tmp/line3.txt"
servera.lab.example.com | CHANGED | rc=0 >>
Ansible is agentless.
Ansible manage hosts via ssh.
Ansible is easy to use.

2.3、YAML字典

YAML字典的两种格式,第一种比较常用也好写。注意键值对之间冒号后面有空格,否则是语法错误。

web_pkg: httpd
web_service: httpd
web_rule: httpdb_pkg: mariadb-server
db_service: mariadb
db_rule: mysql
{web_pkg: httpd, web_service: httpd, web_rule: http, db_pkg: mariadb-server, db_service: mariadb, db_rule: mysql}

2.4 、YAML列表

YAML列表举例,db_list.yml列表文件里存放了一个名为 databases 的列表,列表有3个元素,每个元素是一个YAML字典,记录了数据库名和数据库用户名。

[student@workstation ansible]$ cat db_list.yml ---
databases:- name: discuss_dbuser: discuss_user- name: foo_dbuser: foo_db- name: wordpress_dbuser: wordpress_user

相关文章:

linux下解压缩文件中文乱码问题的解决

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划&a…

ROS知识点总结

1、ROS功能包的目录下不能有中文 2、 WorkSpace --- 自定义的工作空间|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库…

Effective Java:对于全部对象都通用的方法

前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书。可以把我们的Java功底提升一个档次,我还是比較推荐的。这里我主要就关于覆盖equals、hashCode和toString方法来做一个笔记总结。希望可以与君共勉。 概述: 这一章主要是说明一些对…

HashSet中的add()方法( 一 )(详尽版)

让我们用例子来理解add()方法的底层代码吧&#xff0c;Let’s go&#xff1a; import java.util.HashSet;public class Test {public static void main(String[] args) {HashSet<String> names new HashSet<String>();names.add("Jim");//向HashMap集合…

Ansible03-管理变量、加密、事实

目录 一、管理变量 1.1、变量的基本用法 1.2、使用已注册变量捕获命令输出 二、管理加密 2.1、ansible-vault常用场景 三、管理事实 3.1、事实基本用法 3.2、创建自定义事实 3.3、魔法变量hostvars、group_names、groups、inventory_hostname 一、管理变量 1.1、变量…

HashSet中的add()方法( 零 )(详尽版)

我们知道在使用HashSet集合时&#xff0c;也就是在用HashMap集合&#xff0c;这是因为HashSet的底层是HashMap&#xff0c; public HashSet() {map new HashMap<>(); }在详述HashSet中的add()方法之前&#xff0c;我们要知道HashMap中的hash&#xff0c;因为在add()的底…

layui上传图片接口

mvc中 前台调用接口 url&#xff1a;"../upload/uploadfiles/" 然后开始接口 代码&#xff1a; string a ""; try { HttpFileCollection file context.Request.Files;//获取选中的文件 for (int i 0; i < file.Count; i) { string cFileName Path.G…

shell与 .sh文件与 .bash文件

一、shell和bash shell是LInux系统下的解释器&#xff0c;类似于windows下的cmd。shell对用户输入到窗口中的命令行进行解释&#xff0c;输入到内核。 bash同样是Linux系统下的解释器&#xff0c;是bash的改进版。 二、.sh文件与.bash文件 .sh文件和.bash文件都是脚本文件&a…

php session存入redis

一、 安装phpredis扩展php连接redis需要安装phpredis扩展。下载地址&#xff1a;https://github.com/phpredis/phpredis/releases&#xff0c;选用相应版本。笔者用的是php5.6.29&#xff0c;下载了phpredis-3.0.0安装出了问题&#xff0c;于是换成phpredis-2.2.8&#xff0c;正…

Ansible04-任务控制

目录 一、循环 二、条件 三、handlers 四、失败的处理 一、循环 使用 loop 关键字对一组项目迭代任务&#xff0c;循环变量 item 保存每个迭代过程中使用的值。 [studentworkstation ansible]$ vim loop.yml --- - name: Test loophosts: devgather_facts: novars:num:- …

HashSet中的add()方法( 三 )(详尽版)

上接HashSet中的add()方法( 二 )&#xff08;详尽版&#xff09; &#xff0c;前两篇说的是泛型为String类的add()方法的具体执行过程&#xff0c;此后三篇说说泛型为自定义类的add()方法的具体执行过程&#xff1a; 首先让我们来自定义一个学生类&#xff1a; public class …

mono修改配置

当前mono安装目录为:/home/mono&#xff0c;安装成功后修改配置需进入这个路径&#xff1a; cd /home/mono 1.修改TcpBinaryFrameManager.cs文件 cd /home/mono/mono-2.10.8 vim mcs/class/System.ServiceModel/System.ServiceModel.Channels.NetTcp/TcpBinaryFrameManager.cs …

[Java in NetBeans] Lesson 01. Java Programming Basics

这个课程的参考视频在youtube。 主要学到的知识点有&#xff1a; Create new project, choose Java Application.one .jar file/ package(.jar name with the same as package), one package can contains mutiple .java files.Comment mutiple lines by using "/* */&quo…

ubuntu中常用指令

常用指令 清空命令行 CtrlL Conda 创建虚拟环境 conda create -n 虚拟环境名称 python3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环境 conda activate 虚拟环境名 退出虚拟环境 conda deactivate 虚拟环境名称 安装功能包 conda install 功能包名称 卸载功能包 con…

Ansible05-部署文件

目录 一、部署文件的常用模块 二、使用jinja2文件部署自定义文件 一、部署文件的常用模块 部署文件常用模块有 file 创建、删除文件或目录&#xff0c;修改selinux上下文。copy 复制文件到受控节点上&#xff0c;也可以直接在受控结点上创建文件。fetch 从受控结点获取文件…

HashSet中的add()方法( 四 )(详尽版)

上接 HashSet中的add()方法( 三 )&#xff08;详尽版&#xff09; &#xff0c;我们重写一下Student类中的hashCode()方法来看看是否还能不能添加重复的学号了&#xff0c; 在学生类中重写hashCode()方法&#xff1a; public class Student {private String id;public Studen…

Laravel框架中的event事件操作

有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑&#xff0c;比如说系统服务下的授权和事件&#xff0c;这些功能服务的应用场景是什么&#xff0c;其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情&#xff0c;但是当我们在工作中多加思考会发现有时候这些服务…

yolact_ros出坑记录

教程&#xff1a;https://github.com/Eruvae/yolact_ros 下载通信中的话题msg 创建虚拟环境 conda create -n yolact python3.7.10 conda activate yolact 配置yolact环境 https://github.com/dbolya/yolact 运行效果如下所示&#xff1a; 在虚拟环境中安装需要的包 conda …

堡垒机高危命令正则表达式

堡垒机可以设置高危命令阻断&#xff0c;防止操作人员误操作造成删库跑路。但是什么是高危命令&#xff0c;需要管理员通过配置正则表达式&#xff0c;进行命令匹配。 今天2021年8月6日先匹配最常见的删库跑路命令 rm -rf / &#xff0c;以下几种表达式联合起来就可以阻断这类…

实验吧 速度爆破

题目链接&#xff1a;http://ctf5.shiyanbar.com/ppc/sd.php 这道题很简单呀&#xff0c;一点斜的歪的都没有&#xff0c;只是我一个小菜鸟在完成时会遇到一些小麻烦&#xff0c;几度想去看wp&#xff0c;最后还是忍住了。。。 思路很简单 1、 先抓取页面里生成的hash值 2、 循…

返回一个二维整数数组中的最大的子数组和

一。题目&#xff1a; 1、输入一个二维整形数组&#xff0c;数组里有正数有负数。 2、二维数组中连续的一个子矩阵组成一个子数组。 3、求所有子数组的和的最大值。 二.设计思想&#xff1a; .定义一个二维数组&#xff0c;使用二重循环对其进行赋值&#xff0c;对其进行遍历&a…

HashSet中的add()方法( 五 )(详尽版)

上接 HashSet中的add()方法( 四 )&#xff08;详尽版&#xff09; &#xff0c;我们再重写一下equals()方法来看看是否可以不能存入相同的id&#xff1a; 在学生类中再重写equals()方法&#xff1a; public class Student {private String id;public Student(String id) {thi…

ROS话题通信中创建自定义数据类型的两种方式

一、在同一个功能包下创建.msg文件 1、在功能包目录下创建msg文件夹 2、在文件夹中创建.msg文件 3、在该功能包的package.xml文件中加入&#xff1a; <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>4、在…

2542513 - AS Java fails to start - Initialization of destination UMEBackendConnection failed

今天发现SAP As Java 开发机无法启动&#xff0c;根据 Note 2542513 处理该问题并记录。 今天发现SAP EPBPM服务器不能正常启动&#xff0c;jstart.exe进程显示 some process running 的黄灯状态。重启也不管用。到SAP官网 https://wiki.scn.sap.com/wiki/display/ASJAVA/%28J…

WordCount扩展与优化

合作者&#xff1a;201631062327&#xff0c;201631062128码云地址&#xff1a;https://gitee.com/LIUJIA6/WordCount3 一&#xff1a;项目说明 本次项目是在上次作业WorldCount的基础上&#xff0c;利用结对编程的思想&#xff0c;完成对WorldCount项目的功能扩展 -s 递归处理…

进制转换 位运算(包括补码、原码、反码、~0等一些零碎东西一次说清)

我发现网上关于标题上的内容介绍的都很零碎&#xff0c;因此为了方便查找、也为了本人对这一部分的充分理解&#xff0c;就想着写一篇这样的博客&#xff08;我分成了几个部分&#xff0c;以便查找&#xff09;&#xff1a; 一、进制转换 让我们先来看看各个进制的定义&#…

第三方物流是什么

​​第三方物流是指生产经营企业为集中精力搞好主业&#xff0c;把原来属于自己处理的物流活动&#xff0c;以合同方式委托给专业物流服务企业&#xff0c;同时通过信息系统与物流企业保持密切联系&#xff0c;以达到对物流全程管理的控制的一种物流运作与管理方式。 第三方物流…

ROS中cv_bridge如何用python3进行编译

最近遇到了个问题&#xff0c;cv_bridge实现了opencv和ros中图像数据类型的转换&#xff0c;但ros-melodic默认python版本是python2。在配置yolact环境的时候&#xff0c;要求是python3。 这就导致在ros自带的cv_bridge是python2版本&#xff0c;想使用python3的话需要自己去编…

Ansible06-管理roles

目录 一、roles的结构 二、RHEL系统roles 三、创建角色 四、部署角色 随着 playbook 的增多&#xff0c;有很多代码重用的机会。ansible 提供了一种方式——roles&#xff0c;只需将 roles 从一个项目复制到另一个项目&#xff0c;然后用 play 调用即可实现代码重用。这里的…

用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)

不废话&#xff0c;上代码&#xff1a; 先创建一个Student类&#xff1a; public class Student {private String id;private String name;private String mobile;private String address;public String getId() {return id;}public void setId(String id) {this.id id;}pub…