手机培训网站建设,wordpress acf插件,合肥找工作最新招聘信息,空间制作网站目录 写在前面5. Ansible Playbook 剧本5.1 YAML语法5.1.1 语法规定5.1.2 示例5.1.3 YAML数据类型 5.2 Playbook组件5.3 Playbook 案例5.3.1 Playbook语句5.3.2 Playbook1 分发hosts文件5.3.3 Playbook2 分发软件包#xff0c;安装软件包#xff0c;启动服务5.3.3.1 任务拆解… 目录 写在前面5. Ansible Playbook 剧本5.1 YAML语法5.1.1 语法规定5.1.2 示例5.1.3 YAML数据类型 5.2 Playbook组件5.3 Playbook 案例5.3.1 Playbook语句5.3.2 Playbook1 分发hosts文件5.3.3 Playbook2 分发软件包安装软件包启动服务5.3.3.1 任务拆解5.3.3.2 步骤变模块5.3.3.3 编写playbook5.3.3.4 测试并运行playbook 5.3.4 Playbook3 nfs服务5.3.4.1 任务拆解5.3.4.2 步骤变模块5.3.4.3 编写playbook5.3.4.4 测试并运行 写在前面 这是Ansible系列第三篇内容为Ansible Playbook的介绍、使用 序号连续上篇笔记 Ansible02-Ansible Modules模块详解 回顾一下Ansible架构 5. Ansible Playbook 剧本
Playbook剧本即Ansible中的脚本。用于配置、部署、管理被控节点。 就如同这个名字Ansible会一步步执行Playbook中的内容并相应返回OK,Changed,False,Skipped等反馈。 Ad-hoc的执行方式在多Modules时过于繁琐而为Ad-hoc编写shell脚本又有点本末倒置。 Playbook语法尊崇yaml语法格式文件名以.yaml或.yml为后缀。
5.1 YAML语法
一种类似XML、JSON的标记性语言。强调以数据为中心号称“一种人性化的数据格式语言”我没觉得多人性化
5.1.1 语法规定
严格区分大小写使用缩进标识层级关系缩进不可用tab只使用空格。空格数量没有要求但同一层级需要保持一致。#标识注释后需要有一个空格多段YAML配置放在一个文件用---分割 YAML转JSON语法网站可用于验证yaml语法是否正确 http://json2yaml.com/convert-yaml-to-json 5.1.2 示例
#xml
zhangsanage30/ageaddresstianjin/addressdianha132xxxxxx/dianhayouxiangxx163.com/youxiang
/zhangsan#yaml
yunwei:chengyuan: 10gangwei: weihu---
kaifa:chengyuan: 25gangwei: kaifa---
ceshi:chengyuan: 5gangwei: ceshi5.1.3 YAML数据类型
纯量(布尔值、整数、浮点数、Null、时间、日期、字符串)
#布尔类型
c1: true真false假#整数
c2: 123#浮点型小数
c3: 123.1#null类型使用~表示null
c4: ~#日期类型日期必须使用ISO 8601格式即yyyy-MM-dd
c5: 2024-05-28#时间类型时间使用ISO 8601格式时间和日期之间使用T连接最后使用代表时区
c6: 2024-05-28T08:34:2008:00#字符串类型简单写法直接写值即可如果字符串中间有特殊字符必须使用单引或双引括起来
c7: thi*!$hello#字符串类型字符串过多的情况可以使用引号拆成多行每一行会被转化成一个空格
c8: hello word xxxxxxxxxx对象键值对
#对象形式一推荐
zhangsan:age: 25address: beijing#对象形式二了解
zhangsan: {age: 25,address: beijing}数组列表
#数组形式一推荐
lisi:age: 24address: - nanjing- beijing#数组形式二了解address: [nanjing,beijing]5.2 Playbook组件
playbook是由一个或者多个play组成的列表可以让这些列表按事先编排的机制执行 task是调用ansible的具体模块在模块参数中可以使用变量。模块执行是幂等性的意味着多次执行结果相同。
hosts执行的远程主机列表remote_user: 指定以远程主机哪个用户的身份执行命令tasks任务集variables内置变量或自定义变量在playbook中调用tempaltes 模板可替换文件中的变量并实现一些简单逻辑的文件handles 处理程序和notify结合使用由特定条件触发的操作满足条件方执行否则不执行tags标签指定某条任务执行用于选择运行playbook中的部分代码。
5.3 Playbook 案例
5.3.1 Playbook语句
#运行剧本,playbook以yml或yaml结尾皆可
ansible-playbook xxx.yaml/xxx.yml#--syntax-check 用于检测playbook语法是否正确如果正确只返回playbook名称
ansible-playbook --syntax-check xxx.yaml/xxx.yml#--check 用于模拟执行playbook
ansible-playbook --check xxx.yaml/xxx.yml5.3.2 Playbook1 分发hosts文件
# 编写playbook
[rootmanager playbook]# cat 02.fenfa.yaml
- hosts: front,dockertasks:- name: 01.create the directory# file: path/server/files statedirectoryfile:path: /server/filesstate: directory- name: 02.send the filecopy:src: /etc/hostsdest: /server/files解释
## Playbook 文件02.fenfa.yaml
这个Playbook 指定了两个任务这些任务将在名为 front 和 docker 的主机上执行。### 主机Hosts
- front,docker这些是目标主机的名称Playbook 将会在这两个主机上执行定义的任务。### 任务列表Tasks
#### 任务 1: 创建目录 (01.create the directory)
- **名称**: 01.create the directory — 此任务的描述性名称。
- **模块**: file — Ansible 的文件模块用于文件和目录的管理。
- **参数**:- path: /server/files — 指定了要创建的目录的路径。- state: directory — 确保指定路径被创建为一个目录。#### 任务 2: 发送文件 (02.send the file)
- **名称**: 02.send the file — 此任务的描述性名称。
- **模块**: copy — Ansible 的复制模块用于将文件从本地复制到远程主机。
- **参数**:- src: /etc/hosts — 指定了要复制的源文件的路径这里是本地的 /etc/hosts 文件。- dest: /server/files — 指定了复制文件到远程主机上的目标路径。### 特殊说明
- 注释掉的行以 # 开头表示该行被注释不会执行。在这个例子中file 模块的一行被注释了这意味着实际执行时将使用未注释的 file 模块的配置。这个Playbook 的目的是在 front 和 docker 这两个主机上创建一个名为 /server/files 的目录并将本地的 /etc/hosts 文件复制到该目录中。# 执行语法检查若成果只返回文件名
[rootmanager playbook]# ansible-playbook --syntax-check 02.fenfa.yaml
playbook: 02.fenfa.yaml# 模拟运行只会返回结果而不会真实运行
[rootmanager playbook]# ansible-playbook --check 02.fenfa.yamlPLAY [front,docker] **************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.100.148]
ok: [192.168.100.141]TASK [01.create the directory] ***************************************************************************************
ok: [192.168.100.148]
changed: [192.168.100.141]TASK [02.send the file] **********************************************************************************************
changed: [192.168.100.141]
changed: [192.168.100.148]PLAY RECAP ***********************************************************************************************************
192.168.100.141 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.100.148 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0#真正的playbook运行
[rootmanager playbook]# ansible-playbook 02.fenfa.yamlPLAY [front,docker] **************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.100.148]
ok: [192.168.100.141]TASK [01.create the directory] ***************************************************************************************
ok: [192.168.100.148]
changed: [192.168.100.141]TASK [02.send the file] **********************************************************************************************
changed: [192.168.100.148]
changed: [192.168.100.141]PLAY RECAP ***********************************************************************************************************
192.168.100.141 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.100.148 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0# 检查运行结果是否正确
[rootmanager playbook]# ansible docker,front -m shell -a tree /server/files; cat /server/files/hosts
192.168.100.141 | CHANGED | rc0
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.151 manager
192.168.100.150 storage
192.168.100.149 backup
192.168.100.148 front
192.168.100.141 docker192.168.100.148 | CHANGED | rc0
/server/files
└── hosts0 directories, 1 file
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.151 manager
192.168.100.150 storage
192.168.100.149 backup
192.168.100.148 front
192.168.100.141 docker
5.3.3 Playbook2 分发软件包安装软件包启动服务 以zabbix-agent为例 5.3.3.1 任务拆解
下载
wget https://mirrors.aliyun.com/zabbix/zabbix/6.5/centos/8/x86_64/zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpm安装
yum install -y zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpm配置(略) 启动开机 5.3.3.2 步骤变模块
wget - get_url yum - yum 配置 - debug模拟 systemctl - systemd
5.3.3.3 编写playbook
- hosts: front,dockertasks:- name: 01.download the zabbix-agentget_url:url: https://mirrors.aliyun.com/zabbix/zabbix/6.5/centos/8/x86_64/zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpmdest: /tmp/validate_certs: no #关闭校验- name: 02.yum install zayum:name: /tmp/zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpmstate: presentdisable_gpg_check: yes #关闭gpgcheck- name: 03.配置debug:msg: 模拟配置zabbix-agent- name: 04.startupsystemd:name: zabbix-agentenabled: yesstate: started
5.3.3.4 测试并运行playbook
#测试语法合格
[rootmanager playbook]# ansible-playbook --syntax-check 03.install-zabbix-agent.yamlplaybook: 03.install-zabbix-agent.yaml#模拟测试运行
[rootmanager playbook]# ansible-playbook --check 03.install-zabbix-agent.yaml#运行
[rootmanager playbook]# ansible-playbook 03.install-zabbix-agent.yamlPLAY [front,docker] **************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.100.148]
ok: [192.168.100.141]TASK [01.download the zabbix-agent] **********************************************************************************
ok: [192.168.100.148]
ok: [192.168.100.141]TASK [02.yum install za] *********************************************************************************************
changed: [192.168.100.141]
changed: [192.168.100.148]TASK [03.配置] *******************************************************************************************************
ok: [192.168.100.148] {msg: 模拟配置zabbix-agent
}
ok: [192.168.100.141] {msg: 模拟配置zabbix-agent
}TASK [04.startup] ****************************************************************************************************
changed: [192.168.100.148]
changed: [192.168.100.141]PLAY RECAP ***********************************************************************************************************
192.168.100.141 : ok5 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.100.148 : ok5 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
5.3.4 Playbook3 nfs服务
5.3.4.1 任务拆解
服务端backup
部署nfs-utilsrpcbind修改配置文件创建共享目录并修改所有者启动服务rpcbind、nfs
客户端front
安装nfs-utils配置挂载
5.3.4.2 步骤变模块
服务端
部署 - yum配置文件 - lineinfile创建共享目录 - file启动服务 - systemd
客户端
安装 - yum挂载 - mount
5.3.4.3 编写playbook
- hosts: backuptasks:- name: 1. 部署nfs-utilsrpcbindyum:name: nfs-utils,rpcbindstate: present- name: 2. 修改配置文件lineinfile:path: /etc/exportsline: /backup-nfs *(rw,all_squash)create: true- name: 3. 创建共享目录并修改所有者file:path: /backup-nfsstate: directoryowner: nobodygroup: nobody- name: 4. 启动服务rpcbindsystemd:name: rpcbindenabled: yesstate: started- name: 5. 启动服务nfssystemd:name: nfs-serverenabled: yesstate: started- hosts: fronttasks:- name: 1. 安装nfs-utilsyum:name: nfs-utilsstate: present- name: 2. 配置挂载mount:src: 192.168.100.149:/backup-nfspath: /ans-upload#挂载点不存在会自动创建fstype: nfsstate: mounted
5.3.4.4 测试并运行
# 语法测试
[rootmanager playbook]# ansible-playbook --syntax-check 04.deploy_nfs.yamlplaybook: 04.deploy_nfs.yaml#运行
[rootmanager playbook]# ansible-playbook 04.deploy_nfs.yamlPLAY [backup] ********************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.100.149]TASK [1. 部署nfs-utilsrpcbind] *************************************************************************************
ok: [192.168.100.149]TASK [2. 修改配置文件] ***********************************************************************************************
ok: [192.168.100.149]TASK [3. 创建共享目录并修改所有者] ***********************************************************************************
ok: [192.168.100.149]TASK [4. 启动服务rpcbind] ********************************************************************************************
ok: [192.168.100.149]TASK [5. 启动服务nfs] ************************************************************************************************
ok: [192.168.100.149]PLAY [front] *********************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.100.148]TASK [1. 安装nfs-utils] **********************************************************************************************
ok: [192.168.100.148]TASK [2. 配置挂载] ***************************************************************************************************
changed: [192.168.100.148]PLAY RECAP ***********************************************************************************************************
192.168.100.148 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.100.149 : ok6 changed0 unreachable0 failed0 skipped0 rescued0 ignored0