一、playbook 概述
1.1 Ansible脚本—playbook剧本
1、playbook由YMAL语言编写。YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。
2、通过tasks调用ansible的模板将多个play组织在一个playbook中运行。
1.2 playbook的核心组件
剧本 | playbook |
---|---|
场地 | 主机组:hosts |
演员 | 授权执行的用户:remote_user |
故事情节 | 执行的任务:tasks(调用的是各种ansible模块) |
1.3 playbook的组成结构
playbooks本身由以下各部分组成
(1)Tasks∶任务,即调用模块完成的某操作;
(2)Variables∶变量;
(3)Templates; 模板;
(4)Handlers:处理器,当某条件满足时,触发执行的操作;
ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。
格式
ansible-playbook 【yaml文件名】
例如∶ ansible-playbook ping.yml
常用测试命令
ansible-play play.yaml --syntax-check #检查语法
ansible-play play.yaml --list-task #检查task任务
ansible-play play.yaml --list-hosts #检查生效的主机
ansible-play play-yaml --start-at-task='ensure is runnning' #从某个任务开始执行
参数 (免密登录)∶
-k(-ask-pass)用来交互输入ssh密码
-K(-ask-become-pass) 用来交互输入sudo密码
-u 指定用户
hosts和users差别
hosts: webserver 指定主机组,可以是一个或多个组。
remote user: root 指定远程主机执行的用户名
二、playbook的语言: YAML
2.1 YAML介绍
YAML:是一种非标记语言。是用来写配置文件的语言,非常简洁和强大。
YAML语法和其他语言类似,也可以表达散列表、标量等数据结构。
结构通过空格来展示;序列里配置项通过 - 来代表; Map里键值用 : 来分隔;YAML的扩展名为 yaml
2.2 基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
2.3 YAML支持的数据结构
-
对象:键值对的集合,又称为映射(mapping) /哈希(hashes) /字典(dictionary)
例如:
name:Example Developer
变量名:对象名 属性 -
数组: 一组按次序排列的值,又称为序列(sequence) / 列表(list)
例如:
-Apple
-Orange -
纯量: 单个的,不可再分的值
例如:
number: 12.30
sure: true
变量名:数值
2.4 环境部署
设备:
管理端master: 192.168.40.11
被管理端node1:192.168.40.12
被管理端node2:192.168.40.13
1.重命名
[root@server1 ~]# hostnamectl set-hostname master
[root@server1 ~]# su
[root@client1 ~]# hostnamectl set-hostname node1
[root@client1 ~]# su
[root@client2 ~]# hostnamectl set-hostname node2
[root@client2 ~]# su
2.关闭防火墙
面向所有设备
systemctl stop firewalld
setenforce 0
3.ansible部署流程
详见
https://blog.csdn.net/Mr_XHC/article/details/112483379
三、playbook 剧本配置
写一个简单脚本(上手)
新手易错点:
‘-’ 不加
‘-’和‘:’后的空格不加
格式一定要对齐,不能随便缩进,缩进表示层级关系
tab键不要用,不识别
3.1 设置连通性脚本
[root@master ~]# vim aa.yaml
- hosts: webserver
remote_user: root
tasks:
- name: test connection
ping:
remote_user: root #指定远程主机执行tasks的运行用户为root
[root@master ~]# ansible-playbook aa.yaml --syntax-check 检查语法
[root@master ~]# ansible-playbook