news 2026/6/9 21:03:04

ansible作业: Playbook 编写指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ansible作业: Playbook 编写指南

1、使用debug模块,显示当前受管主机的dns服务器的ip地址。

[devops@master chap03]$ vim show_dns.yml --- - name: show dns ip hosts: master gather_facts: yes tasks: - name: show dns by debug debug: var: ansible_facts.dns.nameservers
[devops@master chap03]$ ansible-playbook show_dns.yml PLAY [show dns ip] ******************************************************************************* TASK [Gathering Facts] *************************************************************************** ok: [master] TASK [show dns by debug] ************************************************************************* ok: [master] => { "ansible_facts.dns.nameservers": [ "114.114.114.114" ] } PLAY RECAP *************************************************************************************** master : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescue=0 ignored=0

Ansible 会自动收集受管主机的 facts ,其中 ansible_facts.dns.nameservers 包含 /etc/resolv.conf 中配置的所有 DNS 服务器地址。

debug 模块的 var 参数直接输出变量内容,执行后即可看到114.114.114.114 。

2、将example.conf文件复制到/etc/httpd/conf.d/目录,example.conf文件内容如下:

<virtualhost *:80> servername 0.0.0.0 documentroot /var/www/html </virtualhost> <directory /var/www/html> allowoverride none require all granted </directory>

如果/etc/httpd/conf.d/目录下的文件更新,则重启httpd服务。配置/var/www/html/index.html文件内 容如下:

zuoye
[devops@master chap03]$ vim http_setup.yml - hosts: all become: yes tasks: - file: path: /var/www/html state: directory - file: path: /etc/httpd/conf.d state: directory - copy: src: ./index1.html dest: /var/www/html/index.html - copy: src: ./example.conf dest: /etc/httpd/conf.d/example.conf notify: restart httpd handlers: - name: restart httpd service: name: httpd state: restarted
[devops@master chap03]$ vim example.conf <virtualhost *:80> servername 0.0.0.0 documentroot /var/www/html </virtualhost> <directory /var/www/html> allowoverride none require all granted </directory> ~
[devops@master chap03]$ vim index1.html zuoye
[devops@master chap03]$ ansible-playbook http_setup.yml PLAY [all] *************************************************************************************** TASK [Gathering Facts] *************************************************************************** ok: [node02] ok: [master] ok: [node01] TASK [file] ************************************************************************************** ok: [node02] ok: [master] ok: [node01] TASK [file] ************************************************************************************** ok: [node02] ok: [master] ok: [node01] TASK [copy] ************************************************************************************** ok: [node02] ok: [master] ok: [node01] TASK [copy] ************************************************************************************** ok: [node02] ok: [master] ok: [node01] PLAY RECAP *************************************************************************************** master : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 node01 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 node02 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

使用 notify 和 handlers 实现 “文件变更则重启” 的幂等逻辑:只有 copy 任务实际修改了目标文件时,才会触发 restart httpd 处理器。

file 模块确保 /var/www/html 目录存在,避免 node02 上因目录缺失而失败。

3、向受管主机的/home/file文件里面写入内容如下:

hostname=当前主机的名字 memory=当前主机的内存大小 BIOS version=当前主机的bios的版本 distribution=当前linux主机的发行版本信息 Size of disk device is 当前主机的磁盘大小
[devops@master chap03]$ vim content.yml --- - name: select content hosts: master tasks: - file: path: /home/file state: directory - copy: src: ./content.conf dest: /home/file
[devops@master chap03]$ vim content.conf hostname={{ ansible_hostname }} memory={{ ansible_memtotal_mb }} MB BIOS version={{ ansible_bios_version }} distribution={{ ansible_distribution }} {{ ansible_distribution_version }} Size of disk device is {{ ansible_devices.sda.size }}
[devops@master chap03]$ ansible-playbook content.yml PLAY [select content] **************************************************************************** TASK [Gathering Facts] *************************************************************************** ok: [master] TASK [file] ************************************************************************************** changed: [master] TASK [copy] ************************************************************************************** changed: [master] PLAY RECAP *************************************************************************************** master : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

4.使用file.j2模板文件向受管主机的/home/file文件里面写入内容如下:

hostname=当前主机的名字 memory=当前主机的内存大小 BIOS version=当前主机的bios的版本 distribution=当前linux主机的发行版本信息 Size of disk device is 当前主机的磁盘的大小
[devops@master chap03]$ vim file2.yml --- - name: select content hosts: master tasks: - file: path: /home/file state: directory - template: src: file2.j2 dest: /home/file
[devops@master chap03]$ vim file2.j2 hostname={{ ansible_hostname }} memory={{ ansible_memtotal_mb }} MB BIOS version={{ ansible_bios_version }} distribution={{ ansible_distribution }} {{ ansible_distribution_version }} Size of disk device is {{ ansible_devices.sda.size }}
[devops@master chap03]$ ansible-playbook file2.yml PLAY [select content] **************************************************************************** TASK [Gathering Facts] *************************************************************************** ok: [master] TASK [file] ************************************************************************************** ok: [master] TASK [template] ********************************************************************************** changed: [master] PLAY RECAP *************************************************************************************** master : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

template 模块会对 file.j2 进行 Jinja2 渲染,将所有 {{ }} 变量替换为受管主机的实际值,这是与 copy 模块的本质区别。

5、如果当前受管主机的根分区容量大于1G,则安装httpdmariadb-server软件包,如果httpd和mariadb服务未运行则运行该服务。

[devops@master chap03]$ vim partition.yml --- - name: partition hosts: master become: yes tasks: - name: Install httpd and mariadb-server yum: name: "{{ item }}" state: present loop: - httpd - mariadb-server when: (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first | int) > 1073741824 - name: Start httpd and mariadb service: name: "{{ item }}" state: started loop: - httpd - mariadb when: (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first | int) > 1073741824
[devops@master chap03]$ ansible-playbook partition.yml PLAY [partition] ********************************************************************************* TASK [Gathering Facts] *************************************************************************** ok: [master] TASK [Install httpd and mariadb-server] ********************************************************** ok: [master] => (item=httpd) ok: [master] => (item=mariadb-server) TASK [Start httpd and mariadb] ******************************************************************* ok: [master] => (item=httpd) ok: [master] => (item=mariadb) PLAY RECAP *************************************************************************************** master : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

6、创建一个playbook,要求如下:

该playbook运行在所有受控节点 该playbook覆盖/etc/message文件的内容 在dev主机组的主机上,内容是:Development 在test主机组的主机上,内容是:Test
[devops@master chap03]$ vim content1.yml --- - name: select content hosts: master become: yes tasks: - name: Set /etc/message for dev group copy: content: "Development" dest: /etc/message when: "'dev' in group_names" - name: Set /etc/message for test group copy: content: "Test" dest: /etc/message when: "'test' in group_names"
[devops@master chap03]$ ansible-playbook content1.yml PLAY [select content] **************************************************************************** TASK [Gathering Facts] *************************************************************************** ok: [master] TASK [Set /etc/message for dev group] ************************************************************ skipping: [master] TASK [Set /etc/message for test group] *********************************************************** skipping: [master] PLAY RECAP *************************************************************************************** master : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:56:01

机器学习项目:MonkeyCode帮我快速搭建模型

机器学习项目&#xff1a;MonkeyCode帮我快速搭建模型我所在的公司上个月全面引入了MonkeyCode&#xff0c;效果怎么样&#xff1f;看数据说话…## 效率对比实测我选取了三个典型任务进行对比测试&#xff1a;| 任务类型 | 传统方式 | 使用MonkeyCode | 效率提升 ||----------|…

作者头像 李华
网站建设 2026/6/9 20:55:03

脉冲调制器

冲调制器 2.5.1 为什么雷达必须"间歇式"工作 想象你在深夜的丛林中搜寻目标。如果持续打开强光手电,你的位置会立刻暴露给所有观察者;但如果采用"快闪"策略——瞬间点亮、瞬间熄灭——你既能看清目标,又大幅降低被反侦察的概率。这就是脉冲雷达与连续…

作者头像 李华
网站建设 2026/6/9 20:55:01

第二届化学工程与生物科学国际学术会议(CEBS 2026)

第二届化学工程与生物科学国际学术会议&#xff08;CEBS 2026&#xff09;将于2026年7月10-12日在中国大理召开。本次大会旨在汇聚全球顶尖科学家、工程师及行业专家&#xff0c;共同探讨化学工程与生物科学领域的最新进展与未来趋势。随着科技的飞速发展&#xff0c;化学工程和…

作者头像 李华
网站建设 2026/6/9 20:54:54

告别‘无法下载’!Win7老电脑装VS2019,这两个补丁文件是关键

告别“无法下载”&#xff01;Win7老电脑装VS2019&#xff0c;这两个补丁文件是关键 在Windows 7系统上安装Visual Studio 2019时&#xff0c;许多开发者会遇到一个令人抓狂的问题&#xff1a;安装程序能够启动&#xff0c;却在下载组件阶段卡住&#xff0c;反复提示网络错误。…

作者头像 李华
网站建设 2026/6/9 20:53:56

3步实现JimuReport扩展开发:从权限控制到自定义组件实战

3步实现JimuReport扩展开发&#xff1a;从权限控制到自定义组件实战 【免费下载链接】JimuReport 免费的AI可视化报表。一句话描述需求&#xff0c;AI 自动生成报表与数据大屏&#xff1b;同时提供类 Excel 拖拽设计器&#xff0c;兼容 30 余种数据源&#xff0c;轻松应对各类复…

作者头像 李华
网站建设 2026/6/9 20:43:53

深入解析S12 CPU指令队列与异常处理机制

1. 项目概述&#xff1a;指令队列与异常处理&#xff0c;嵌入式CPU的“心脏”与“神经系统”在嵌入式微控制器&#xff08;MCU&#xff09;的开发中&#xff0c;我们常常关注于外设驱动、算法实现和系统架构&#xff0c;但决定整个系统执行效率和响应能力的&#xff0c;往往是C…

作者头像 李华