Ansible02-实施playbook

news/2024/7/2 23:13:03

一、编写和运行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


http://lihuaxi.xjx100.cn/news/235882.html

相关文章

P1541 乌龟棋 题解(洛谷,动态规划递推)

题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc.h> #define ll long long using namespace std; ll num[350100]; ll p[5]; ll f[41][41][41][41]; int main() {ios::sync_with_stdio(fa…

【重磅上线】思维导图工具XMind:ZEN基础问题详解合集

XMind是XMind Ltd公司旗下一款出色的思维导图和头脑风暴软件。黑暗的UI设计、独特的ZEN模式、丰富的风格和主题、多分支的颜色等等功能会让你的工作更加便捷与高效。在视觉感官上也会给你带来最佳的体验感。 对于初学者来说&#xff0c;肯定会遇到各种各样的问题&#xff0c;有…

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

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

iOS图像识别

iOS通过摄像头动态识别图像 前言&#xff1a; 目前的计算机图像识别&#xff0c;透过现象看本质&#xff0c;主要分为两大类: 基于规则运算的图像识别&#xff0c;例如颜色形状等模板匹配方法基于统计的图像识别。例如机器学习ML&#xff0c;神经网络等人工智能方法**区别&…

java B2B2C源码电子商务平台 -commonservice-config配置服务搭建

2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server&#xff0c;您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象…

Ansible04-任务控制

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

383. Ransom Note/691. Stickers to Spell Word-- String, Map, back tracking-- 未完待续

383 easy 题&#xff0c;就是建立字母的hash 表 看第一个String 是否能被第二个String 所构建 canConstruct("aa", "aab") -> true 统计 第二个参数中每个字母的频率&#xff0c;可以用一个int[256] 建立hashmap, 然后统计 第一个String 中字母出现的…

你猜猜typeof (typeof 1) 会返回什么值(类型)?!

typeof typeof操作符返回一个字符串&#xff0c;表示未经计算的操作数的类型。 语法&#xff1a; var num a; console.log(typeof (num)); 或console.log(typeof num) 复制代码typeof 可以返回的类型为&#xff1a;number、string、boolean、undefined、null、object、functi…