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

使用ansible的playbook完成以下操作

Ansible Playbook 入门:YAML 语法与实操步骤

一、YAML基础语法

1. 基本规则
  • 文件标识:可选以---开头(声明YAML文件),...结尾。
  • 注释:用#标记,从#到行尾为注释。
  • 字符串:默认无需引号,含特殊字符(空格、冒号等)需用'"包裹。
  • 布尔值
    • 模块参数(如yumupdate_cache):支持yes/no/1/0/true/false(Ansible解析为字符串)。
    • 非模块参数(如变量):遵循YAML规范,支持True/False/yes/no/on/off(不区分大小写)。
2. 核心数据结构
  • 字典(键值对)

    • 普通格式:键: 值(冒号后必须跟空格)。
      web:server: nginxport: 80
      
    • 内嵌块格式:{键1: 值1, 键2: 值2}
      db: {name: mysql, port: 3306}
      
  • 列表(数组)

    • 普通格式:- 元素(短横线+空格前缀)。
      apps:- nginx- mysql
      
    • 内嵌块格式:[元素1, 元素2]
      hosts: [web01, web02]
      
  • 嵌套结构:通过缩进(建议2个空格)表示层级,支持字典与列表嵌套。

    servers:- name: web01ip: 192.168.1.10services: [nginx, php-fpm]
    

二、Ansible Playbook结构

1. 核心要素

每个Playbook由一个或多个play组成,每个play包含:

  • hosts:目标主机/组(来自inventory)。

  • tasks:任务列表(按顺序执行,所有主机完成当前任务后再执行下一个)。

    示例:

    ---
    - name: 部署nginx  # play名称(可选)hosts: webservers  # 目标主机组remote_user: root  # 远程执行用户tasks:- name: 安装nginx  # 任务1yum:name: nginxstate: present  # 确保安装- name: 启动nginx  # 任务2service:name: nginxstate: started  # 启动服务
    
2. 常用扩展字段
  • vars:定义变量(用{{ 变量名 }}引用)。

    vars:pkg_name: nginx
    tasks:- name: 安装{{ pkg_name }}yum: name={{ pkg_name }}
    
  • handlers:触发器(仅在任务发生变化时执行,如配置更新后重启服务)。

    tasks:- name: 复制nginx配置copy:src: /local/nginx.confdest: /etc/nginx/nginx.confnotify: restart nginx  # 触发handlerhandlers:- name: restart nginx  # 与notify名称匹配service: name=nginx state=restarted
    

三、Playbook使用技巧

1. 执行命令
ansible-playbook playbook.yml  # 直接执行
ansible-playbook -C playbook.yml  # 测试执行(不实际修改)
ansible-playbook --list-hosts playbook.yml  # 查看目标主机
2. Tags标签管理
  • 打标签:用tags字段,一个任务可多个标签。

    tasks:- name: intall nginxyum: name=nginxtags: [l1,l2]
    
  • 执行指定标签-t 标签1,标签2

    ansible-playbook -t l1 playbook.yml  # 仅执行install标签任务
    
  • 特殊标签

    • always:必执行(无论是否指定)。
    • never:默认不执行(需显式指定-t never)。
    • tagged:仅执行带标签任务(-t tagged)。
    • untagged:仅执行不带标签任务(含always)。
    • all:执行所有任务(默认)。
  • 查看标签

    ansible-playbook --list-tags playbook.yml
    

通过以上内容,可快速掌握YAML语法及Ansible Playbook的编写与使用核心要点。

练习题

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

1、对node1主机操作,安装httpd服务,网页存放在/www目录中,能够通过curl http://node1访问到网页内容为welcome to luoqi

[student@master ansible]$ vim node1web.yml---
- name: luoqiwebhosts: node1tasks:- name: repo1yum_repository:name: aadescription: aa1baseurl: http://ansible.example.com/rhel9/BaseOSenabled: yesgpgcheck: no- name: repo2yum_repository:name: bbdescription: bb1baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no- name: install httpyum:name: httpdstate: present- name: create /wwwfile:state: directorypath: /wwwmode: 0777- name: create index.htmlcopy:content: "welcome to luoqi \n"dest: /www/index.html- name: set http.cf1replace:path: /etc/httpd/conf/httpd.confregexp: DocumentRoot "/var/www/html"replace: DocumentRoot "/www"- name: set http.cf2replace:path: /etc/httpd/conf/httpd.confregexp: <Directory "/var/www">replace: <Directory "/www">- name: set firwalldfirewalld:port: 80/tcppermanent: yesstate: enabledimmediate: yes- name: set sefcontextsefcontext:target: /www(/.*)?setype: httpd_sys_content_tstate: present- name: restoreconshell:cmd: restorecon -Rv /www/index.html- name: restart httpservice:name: httpdstate: restartedenabled: yes[student@master ansible]$ ansible-playbook node1web.yml
[student@master ansible]$ curl http://node1
welcome to luoqi 

2、对node2主机操作,创建一个1000MiB的分区,格式化成ext4的文件系统,并挂载到/testdir目录下。
使用ansible node2 -m shell -a 'df -Th’验证

[student@master ansible]$ vim node2parted.yml  
---
- name: node2partedhosts: node2tasks:- name: create partedparted:device: /dev/vdbnumber: 1part_type: primarypart_start: 10MiBpart_end: 1010MiBstate: present- name: filesystemext4filesystem:dev: /dev/vdb1fstype: ext4- name: mountmount:src: /dev/vdb1path: /testdirfstype: ext4state: mounted[student@master ansible]$ ansible-playbook node2parted.yml [student@master ansible]$ ansible node2 -m shell -a 'df -Th' 
node2 | CHANGED | rc=0 >>
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs          tmpfs     733M     0  733M   0% /dev/shm
tmpfs          tmpfs     294M  4.3M  289M   2% /run
/dev/vda3      xfs        17G  1.2G   16G   7% /
/dev/vda1      xfs      1014M  182M  833M  18% /boot
tmpfs          tmpfs     147M     0  147M   0% /run/user/1000
/dev/vdb1      ext4      966M   24K  900M   1% /testdir

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

[student@master ansible]$ vim node3lvm.yml ---
- name: node3lvmhosts: node3tasks:- name: install lvm2yum:name: lvm2state: present- name: create partedparted:device: /dev/vdbstate: presentnumber: 1part_type: primarypart_start: 10MiBpart_end: 1010MiB- name: create vglvg:vg: datastoragepvs: /dev/vdb1- name: create lvmlvol:vg: datastoragelv: databasesize: 800Mstate: present- name: filesystem xfsfilesystem:fstype: xfsdev: /dev/datastorage/database- name: mount lvmount:src: /dev/datastorage/databasepath: /lvfstype: xfsstate: mounted[student@master ansible]$ ansible-playbook node3lvm.yml   [student@master ansible]$ ansible node3 -m shell -a 'df -Th' 
node3 | CHANGED | rc=0 >>
Filesystem                       Type      Size  Used Avail Use% Mounted on
devtmpfs                         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                            tmpfs     733M     0  733M   0% /dev/shm
tmpfs                            tmpfs     294M  4.3M  289M   2% /run
/dev/vda3                        xfs        17G  1.2G   16G   8% /
/dev/vda1                        xfs      1014M  182M  833M  18% /boot
tmpfs                            tmpfs     147M     0  147M   0% /run/user/1000
/dev/mapper/datastorage-database xfs       794M   38M  757M   5% /lv

4、创建名为/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: install php tftpyum:name: php,tftpstate: present- name: install RPM Development Toolsyum:name: "@RPM Development Tools"state: present- name: updateyum:name: '*'state: latest[student@master ansible]$ ansible-playbook tools.yml

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

[student@master ansible]$ vim jihua.yml---
- name: jihuahosts: test02tasks:- name: croncron:name: 111user: studentminute: " */5"job:  echo "hello tarena"[student@master ansible]$ ansible-playbook jihua.yml 

6、创建剧本/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: groupaddgroup: name: webdevstate: present- name: create /webdevfile:path: /webdevmode: '2775'group: webdevstate: directory- name: ln /webdevfile:src: /webdevdest: /var/www/html/webdevstate: link- name: create index.htmlcopy:content: It's works!dest: /webdev/index.html- name: restart httpservice:name: httpdstate: restartedenabled: yes- name: set firewalldfirewalld:port: 80/tcppermanent: yesstate: enabledimmediate: yes- name: set sefcontextsefcontext:target: /webdev(/.*)?setype: httpd_sys_content_tstate: present- name: restoreconshell:cmd: restorecon -Rv /webdev/index.html[student@master ansible]$ ansible-playbook webdev.yml 
[student@master ansible]$ curl http://node1/webdev/ 
It's works!
http://www.dtcms.com/a/360864.html

相关文章:

  • TFS-2010《Fuzzy PCA-Guided Robust k-Means Clustering》
  • macOS中Homebrew安装PHP的详细步骤(五)
  • React学习教程,从入门到精通, React 入门指南:创建 React 应用程序的语法知识点(7)
  • 反物质量子比特初探
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【iOS】关键字复习
  • 【iOS】折叠cell
  • 量子電腦組裝
  • FunASR开源部署中文实时语音听写服务(CPU)
  • 配送算法19 Two Fast Heuristics for Online Order Dispatching
  • windows10专业版系统安装本地化mysql服务端
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析