自动生成并收集HTML文件:Ansible Playbook应用实例

文摘   2024-08-31 16:51   北京  
在现代系统管理和运维中,自动化是提升效率的关键。本文介绍了一个简单的Ansible Playbook示例,通过该Playbook,我们可以自动在每个客户端生成一个包含最后一次命令输出的HTML文件,并将这些文件收集到Ansible控制节点,最终将它们移动到Web服务器目录中进行展示。这不仅展示了Ansible强大的自动化能力,也提供了一个有用的实践场景。

1、生成HTML文件

Playbook的第一部分是在每个客户端上生成HTML文件。我们使用echo命令创建一个基本的HTML模板,其中包含了last命令的输出。last命令显示了最近登录的用户信息,这个信息被嵌入到HTML的<pre>标签中,保证了输出格式的正确性。为了确保生成的文件能够被正确地处理,我们将HTML文件保存到/tmp目录下,以每台主机的名称作为文件名,避免文件冲突。
- name: Generate HTML files on each client and collect them  hosts: all  become: yes  tasks:    - name: Generate HTML file with last command output      shell: |        echo "<!DOCTYPE html>        <html>        <head>            <meta charset=\"UTF-8\">            <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">            <title>Last Command Output</title>            <style>                body { font-family: Arial, sans-serif; margin: 20px; }                pre { white-space: pre-wrap; word-wrap: break-word; }</style>        </head>        <body>            <h1>Last Command Output</h1>            <pre>$(last)</pre>        </body>        </html>" > /tmp/{{ inventory_hostname }}.html      changed_when: false

2、文件存在性检查与收集

生成文件后,我们使用stat模块检查文件是否存在。如果文件不存在,则触发fail模块,终止Playbook的执行,以确保后续步骤不会因为文件缺失而出错。接下来,使用fetch模块将每个客户端生成的HTML文件收集到Ansible控制节点的/tmp/collected_files/目录中。这一过程确保了所有生成的文件都能被集中到一个位置进行进一步处理。
  - name: Check if the HTML file exists      stat:        path: /tmp/{{ inventory_hostname }}.html      register: file_stat
- name: Fail if HTML file does not exist fail: msg: "/tmp/{{ inventory_hostname }}.html file does not exist." when: not file_stat.stat.exists
- name: Fetch HTML files from clients to Ansible server fetch: src: /tmp/{{ inventory_hostname }}.html dest: /tmp/collected_files/ flat: yes

3、移动文件至Web目录

在Ansible控制节点上,我们首先确保/var/www/html目录存在,然后将收集到的HTML文件移动到该目录下,以便通过Web服务器进行展示。shell模块中的脚本检查是否有文件需要移动,如果有,则执行移动操作,否则输出“没有文件要移动”的提示。最后,我们检查移动操作是否成功,并在失败时报告错误。
- name: Move HTML files to /var/www/html on Ansible control node  hosts: localhost  become: yes  tasks:    - name: Ensure destination directory exists      file:        path: /var/www/html        state: directory
- name: Move HTML files to /var/www/html shell: | if [ -d /tmp/collected_files ]; then mv /tmp/collected_files/*.html /var/www/html/ else echo "No files to move" fi args: warn: false register: mv_result ignore_errors: yes
- name: Check if files were moved successfully debug: msg: "Files moved successfully." when: mv_result.rc == 0
- name: Fail if there was an error moving files fail: msg: "Failed to move files from /tmp/collected_files/ to /var/www/html/" when: mv_result.rc != 0

该Playbook通过自动化脚本,展示了如何在分布式环境中生成、收集和处理文件。这不仅提高了管理效率,也展示了Ansible在自动化运维中的强大功能。通过灵活运用这些技术,运维工程师可以更好地应对各种任务,提升工作效率。

如果喜欢这篇文章,请点下方在看,

后续推荐更多类似文章

日常运维文档
多做实验,少做自己!分享一些日常运维和学习文档,欢迎大家一起交流。
 最新文章