当前位置: 首页 > news >正文

35.Ansible的yaml语法与playbook的写法

Ansible的yaml语法与playbook的写法

例:给所有受控主机配置yum仓库

[student@master ansible]$ vim repo.yml
---         #开头三个-表明是yaml文件,不写也没有影响
- name: repo       hosts: alltasks:                  #每个playbook都有一个hosts和tasks tasks下定义的是子任务,hosts定义的是主机清单(inventory)里面的受控主机- name: baseos         #-后空一格,然后:后空一格写,此处写的是yum仓库的文件名称yum_repository:			#此处写的是模块name: aa            #yum仓库的名称description: aa1	  #yum仓库的描述信息baseurl: http://ansible.example.com/rhel9/BaseOS    enabled: yesgpgcheck: no- name: AppStreamyum_repository:name: bbdescription: bb1baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no

yaml中的字符串通常不⽤加任何引号,但有些情况下,必须加引号,最常见的是在引⽤变量的时候

关于布尔值的书写格式,playbook中的布尔值类型⾮常灵活,接受yes/on/1/true/no/off /0/false

ansible-playbook用于运行剧本,-C 测试运行结果,并不是真的执行任务

[student@master ansible]$ ansible-playbook repo.yml -C

在这里插入图片描述

测试1:

1、 安装httpd,在node1执行

2、 开机自启

3、 给/var/www/html目录创建软链接/www

4、 从http://ansible.example.com/index.html下载至/www

5、 能够访问该web站点

[student@master ansible]$ vim httpd.yml
---
- name: httpdhosts: node1tasks:- name: httpd install    #安装httpdyum:name: httpdstate: present- name: html			#创建软链接file:src: /var/www/htmldest: /wwwstate: link- name: get html		#下载网页get_url:url: http://ansible.example.com/index.htmldest: /wwwsetype: http_sys_content_t		#注意,如果不能访问,可能是context值有误- name: firewalld allow httpd		#防火墙允许httpd服务通过firewalld:service: httppermanent: yesstate: enabledimmediate: yes- name: restart httpd				#重启httpd服务service:name: httpdstate: restartedenabled: yes

在这里插入图片描述

测试2:

notify handlers用法(当完成….任务时,则进行….任务)

[student@master ansible]$ vim test.yml
---
- name: testhosts: node1tasks:- name: user1user:name: user1state: present- name: user2user:name: user2state: presentnotify:- aahandlers:- name: aafile:path: /tmp/caistate: touchmode: 0644

handlers永远是最后执行的,即使写在开头也是最后执行;如果notify所在的任务没有发生改变,则不会触发handlers

测试3:

1、 写一个剧本galaxy.yml,只对node1操作

2、 创建用户aa,该用户不能用于登录,家目录/www

3、 在/www创建一个文件html

4、 每次执行该剧本时,将系统的当前时间输入到html文件中。

5、 如果html中的时间发生变化,那么创建/tmp/kk的文件

[student@master ansible]$ vim galaxy.yml
---
- name: timehosts: node1tasks:- name: useruser:name: aashell: /sbin/nologinhome: /www1- name: create filefile:path: /www1/htmlstate: touch- name: dateshell:cmd: date > /www1/htmlnotify:- bbhandlers:- name: bbfile:path: /tmp/bbstate: touch

tags用法:给任务打标签,一个任务可以有多个标签,ansible-playbook -t 来指定需要指定的任务标签。

- always:除非明确跳过(–skip-tags always),否则总是执行。

- never:永远不会执行,除非明确指定(–tags never)。

- tagged:只执行有标签的任务(不包括never标签,除非明确指定)。

- untagged:只执行没有标签的任务(不包括always标签,因为always标签的任务是有标签的)。

- all:所有任务都执行(默认行为)

ansible-playbook playbook.yml -t 标签

ansible-playbook --skip-tags 跳过

ansible-playbook --tags always 只执行always

ansible-playbook --tags never test2.yml 执行never标签和always标签

ansible-playbook --tags untagged test2.yml 执行不带标签的任务,always标签也要执行

ansible-playbook --tags tagged test2.yml 执行带标签的任务 ,不执行never

写法为:

tags:

always


练习

使用ansible的playbook完成以下操作
node1 属于 test01 主机组
node2 属于 test02 主机组
node3 和 node4 属于 web 主机组
node5 属于 test05 主机组
web 组属于 webtest 主机组

主机清单
[student@master ansible]$ vim inventory
[test01]
node1[test02]
node2[web]
node3
node4[test05]
node5[webtest:children]
web

1.给所有主机配置yum仓库

[student@master ansible]$ vim yum.yml
---
- name: yum_repositoryhosts: alltasks:- name: baseosyum_repository:name: aa1description: aabaseurl: http://ansible.example.com/rhel9/BaseOSenabled: yesgpgcheck: no- name: appstreamyum_repository:name: bbdescription: bb1baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no

2.对node1主机操作,安装httpd服务

[student@master ansible]$ vim httpd1.yml
---
- name: httphosts: node1tasks:- name: httpd installyum:name: httpdstate: present- name: replace httpd.cfgreplace:path: /etc/httpd/conf/httpd.confregexp: /var/www/htmlreplace: /www- name: repalcereplace:path: /etc/httpd/conf/httpd.confregexp: /var/wwwreplace: /www- name: firewalld allowfirewalld:service: httppermanent: yesstate: enabledimmediate: yes- name: create wwwfile:path: /wwwstate: directorysetype: httpd_sys_content_t- name: crate webcopy:content: welcome to luoqidest: /www/index.htmlsetype: httpd_sys_content_t- name: restart httpdservice:name: httpdstate: restartedenabled: yes

在这里插入图片描述

3.对node2主机操作,创建一个1000MiB的分区,格式化成ext4的文件系统,并挂载到/testdir目录下

[student@master ansible]$ vim test1.yml---
- name: partedhosts: node2tasks:- name: parted vdbparted:device: /dev/vdbnumber: 1part_type: primarypart_start: 10MiBpart_end: 1010MiBstate: present- name: mkfsfilesystem:dev: /dev/vdb1fstype: ext4- name: mkdir testdirfile:path: /testdirstate: directory- name: mountmount:path: /testdirsrc: /dev/vdb1fstype: ext4state: mounted

在这里插入图片描述

4.对node3主机操作创建卷组datastorage,逻辑卷database,大小为800M,格式化为xfs的文件系统,并挂载到/lv目录下
使用ansible node3 -m shell -a 'df -Th’验证

---
- name: lvhosts: node3tasks:- name: partedparted:device: /dev/vdbnumber: 1part_type: primarypart_start: 10MiBpart_end: 1000MiBstate: present- name: yum lvm2yum:name: lvm2state: present- name: lvglvg:vg: datastoragepvs: /dev/vdb1- name: lvollvol:lv: databasesize: 800vg: datastorage- name: mkfsfilesystem:dev: /dev/datastorage/databasefstype: xfs- name: mkdir /lvfile:path: /lvstate: directory- name: mountmount:path: /lvsrc: /dev/datastorage/databasefstype: xfsstate: mounted 

在这里插入图片描述

5.创建名为/home/student/ansible/tools.yml 的 playbook,能够实现以下目的:
1)将 php 和 tftp 软件包安装到 test01、test02 和 web 主机组中的主机上
2)将 RPM Development Tools 软件包组安装到 test01 主机组中的主机上
3)将 test01 主机组中的主机上所有软件包升级到最新版本

[student@master ansible]$ vim tools.yml
---
- name:  toolshosts: test01,test02,webtasks:- name: php tftp installyum:name: php,tftpstate: present- name: test01yum:name: "@RPM Development Tools"state: present- name: upyum:name: "*"state: latest

在这里插入图片描述

6.编写剧本/home/student/ansible/jihua.yml
1)在 test02 组中的被管理主机运行
2)为用户 student 创建计划任务: student 用户每隔 5 分钟执行 echo “hello tarena”

[student@master ansible]$ vim jihua.yml
---
- name: jihuahosts: test02tasks:- name: studentcron:user: studentname: aaminute: "*/5"job: echo hello tarena

在这里插入图片描述

7.创建剧本/home/student/ansible/webdev.yml,满足下列要求:
1)在 test01 主机组运行
2)创建目录/webdev,属于 webdev 组,权限为 rwxrwxr-x,具有 SetGID 特殊权限
3)使用符号链接/var/www/html/webdev 链接到/webdev 目录
4)创建文件/webdev/index.html,内容是 It’s works!
5)查看 test01 主机组的 web 页面 http://node1/webdev/将显示 It’s works!

[student@master ansible]$ vim webdev.yml
---
- name: webdevhosts: test01tasks:- name: groupgroup:name: webdevstate: present- name: directory createfile:path: /webdevgroup: webdevmode: 2775state: directory- name: linkfile:src: /webdevdest: /var/www/html/webdevstate: linksetype: httpd_sys_content_t- name: touchcopy:content: lt's works!dest: /webdev/index.htmlsetype: httpd_sys_content_t- name: firefirewalld:service: httppermanent: yesstate: enabledimmediate: yes- name: replacereplace:path: /etc/httpd/conf/httpd.confregexp: <Directory "/www">replace: <Directory "/var/www">- name: replace1replace:path: /etc/httpd/conf/httpd.confregexp: DocumentRoot "/www"replace: DocumentRoot "/var/www/html"- name: restart httpservice:name: httpdstate: restarted

在这里插入图片描述

http://www.dtcms.com/a/358957.html

相关文章:

  • Java基础知识(十)
  • 【软考架构】面向服务的体系结构(SOA)深度解析
  • 记IsaacSim中抓取物体的质量物理属性的影响
  • 【智能体】零代码学习 Coze 智能体(2)创建智能体的完整步骤
  • 直线与椭圆相交弦长计算公式
  • K8s服务日志收集方案文档
  • LeetCode 92. 反转链表 II - 算法解析
  • 微服务-ruoyi-cloud部署
  • 《动手学深度学习v2》学习笔记 | 2.3 线性代数
  • 吴恩达机器学习(三)
  • 第7.5节:awk语言 switch 语句
  • 【C++】掌握string类操作:高效处理字符串
  • k230 按键拍照后,将摄像头拍照的1920*1080分辨率的图片以jpg文件格式,保存到板载TF存储卡的指定文件夹目录中
  • MinerU本地化部署
  • Java的Optional实现优雅判空新体验【最佳实践】
  • 做一个实用的节假日工具
  • MQTT 连接建立与断开流程详解(一)
  • sunset: decoy靶场渗透
  • 20250830_Oracle 19c CDB+PDB(QMS)默认表空间、临时表空间、归档日志、闪回恢复区巡检手册
  • day42-Ansible
  • 动态规划--Day05--最大子数组和--53. 最大子数组和,2606. 找到最大开销的子字符串,1749. 任意子数组和的绝对值的最大值
  • 微信小程序开发教程(三)
  • java如何保证线程安全
  • RLPD——利用离线数据实现高效的在线RL:不进行离线RL预训练,直接应用离策略方法SAC,在线学习时对称采样离线数据
  • 【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)
  • 【pandas】.loc常用操作
  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • 【运维篇第三弹】《万字带图详解分库分表》从概念到Mycat中间件使用再到Mycat分片规则,详解分库分表,有使用案例
  • DAEDAL:动态调整生成长度,让大语言模型推理效率提升30%的新方法
  • 基于SpringBoot的电脑商城系统【2026最新】