您的位置:首页 >使用 Ansible 自动化 RHEL 管理任务
发布于2026-08-13 阅读(0)
扫一扫,手机访问
This server is configured and managed by Ansible.
nService started at: $(date)
n n n dest: /var/www/html/index.htmln owner: apachen group: apachen mode: "0644"nn - name: Verify httpd service is runningn ansible.builtin.service_facts:nn - name: Display httpd service statusn ansible.builtin.debug:n var: ansible_facts.services['httpd.service']n ```nn4. **创建一个用于调度 cron 作业的 playbook**。这演示了自动化任务调度。nn ```bashn nano create_crontab_file.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Schedule recurring cron jobsn hosts: webserversn become: truen tasks:n - name: Create labex user for cron jobsn ansible.builtin.user:n name: labexn state: presentn create_home: yesnn - name: Schedule system monitoring cron jobn ansible.builtin.cron:n name: System monitoring logn job: "date >> /home/labex/system_monitor.log && df -h >> /home/labex/system_monitor.log"n minute: "*/5"n hour: "*"n user: labexn cron_file: system-monitoringn state: presentnn - name: Schedule daily log rotationn ansible.builtin.cron:n name: Daily log cleanupn job: "find /home/labex -name '*.log' -mtime +7 -delete"n minute: "0"n hour: "2"n weekday: "*"n user: labexn cron_file: log-cleanupn state: presentnn - name: Schedule weekly system update checkn ansible.builtin.cron:n name: Weekly update checkn job: "dnf check-update > /home/labex/update_check.log 2>&1"n minute: "0"n hour: "3"n weekday: "0"n user: labexn cron_file: update-checkn state: presentn ```nn5. **创建一个使用 `at` 调度一次性任务的 playbook**。nn ```bashn nano schedule_at_task.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Schedule one-time tasks with atn hosts: webserversn become: truen become_user: labexn tasks:n - name: Schedule immediate system info collectionn ansible.posix.at:n command: "uname -a > ~/system_info_$(date +%Y%m%d_%H%M%S).txt"n count: 2n units: minutesn unique: yesn state: presentnn - name: Schedule delayed service status checkn ansible.posix.at:n command: "systemctl status httpd > ~/httpd_status_$(date +%Y%m%d_%H%M%S).txt"n count: 5n units: minutesn unique: yesn state: presentn ```nn6. **创建一个管理系统启动目标的 playbook**。nn ```bashn nano boot_target_management.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Manage system boot targetsn hosts: webserversn become: truen tasks:n - name: Check current default targetn ansible.builtin.command:n cmd: systemctl get-defaultn register: current_targetn changed_when: falsenn - name: Display current boot targetn ansible.builtin.debug:n msg: "Current default boot target: {{ current_target.stdout }}"nn - name: Set default boot target to multi-usern ansible.builtin.systemd:n name: multi-user.targetn enabled: yesn when: current_target.stdout != "multi-user.target"nn - name: Verify the boot target changen ansible.builtin.command:n cmd: systemctl get-defaultn register: new_targetn changed_when: falsenn - name: Display new boot targetn ansible.builtin.debug:n msg: "New default boot target: {{ new_target.stdout }}"n ```nn7. **执行服务管理 playbook**。nn ```bashn ansible-playbook -i inventory.ini service_management.ymln ```nn 这将启动 httpd 服务并创建一个欢迎页面。nn8. **执行 cron 作业调度 playbook**。nn ```bashn ansible-playbook -i inventory.ini create_crontab_file.ymln ```nn 这将为系统监控和维护创建几个计划任务。nn9. **执行一次性任务调度 playbook**。nn ```bashn ansible-playbook -i inventory.ini schedule_at_task.ymln ```nn 这将使用 `at` 命令调度即时任务。nn10. **执行启动目标管理 playbook**。nn ```bashn ansible-playbook -i inventory.ini boot_target_management.ymln ```nn 这将检查并可能修改系统的默认启动目标。nn11. **验证计划任务和服务**。nn ```bashn ## 检查 cron 作业n sudo cat /etc/cron.d/system-monitoringn sudo cat /etc/cron.d/log-cleanupn sudo cat /etc/cron.d/update-checkn n ## 检查 at 作业n sudo atqn n ## 检查 httpd 服务状态n sudo systemctl status httpdn n ## 测试 Web 服务器n curl localhostn n ## 检查系统监控日志(等待几分钟让 cron 运行)n sudo cat /home/labex/system_monitor.logn ```nn12. **创建一个清理 playbook** 以在需要时删除计划任务。nn ```bashn nano remove_scheduled_tasks.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Remove scheduled tasksn hosts: webserversn become: truen tasks:n - name: Remove system monitoring cron jobn ansible.builtin.cron:n name: System monitoring logn user: labexn cron_file: system-monitoringn state: absentnn - name: Remove log cleanup cron jobn ansible.builtin.cron:n name: Daily log cleanupn user: labexn cron_file: log-cleanupn state: absentnn - name: Remove update check cron jobn ansible.builtin.cron:n name: Weekly update checkn user: labexn cron_file: update-checkn state: absentn ```nn你已成功使用 Ansible 自动化了服务管理、任务调度和系统配置,为自动维护和监控你的基础设施奠定了基础。n","need_verify":true,"has_solution":false},{"position":4,"title":"使用 LVM 和文件系统自动化存储管理","layout":"doc-workbench-split","text":"## 使用 LVM 和文件系统自动化存储管理nn在本步骤中,你将学习如何使用 Ansible 自动化存储管理,包括创建 LVM 物理卷、卷组、逻辑卷和文件系统。这对于以一致且可扩展的方式管理基础设施中的存储资源至关重要。nn你将使用诸如 `ansible.builtin.lvg` 用于卷组管理,`ansible.builtin.lvol` 用于逻辑卷创建,`ansible.builtin.filesystem` 用于文件系统创建,以及 `ansible.posix.mount` 用于挂载点管理等模块。nn1. **导航到新的项目目录以进行存储管理。**nn ```bashn cd ~/projectn mkdir system-storagen cd system-storagen ```nn2. **创建本次实验的 inventory 文件**。nn ```bashn cat << EOF > inventory.inin [webservers]n localhost ansible_connection=localn EOFn ```nn3. **创建一个 loop device 来模拟额外的存储**,因为我们是在虚拟环境中工作。nn ```bashn ## 创建一个 1GB 的文件用作虚拟磁盘n sudo dd if=/dev/zero of=/tmp/virtual_disk bs=1M count=1024n n ## 设置 loop devicen sudo losetup /dev/loop0 /tmp/virtual_diskn n ## 验证 loop devicen lsblk | grep loop0n ```nn4. **创建一个全面的存储管理 playbook**。这将演示 LVM 操作和文件系统管理。nn ```bashn nano storage.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Configure LVM storage and filesystemsn hosts: webserversn become: truen vars:n storage_device: /dev/loop0n volume_group: apache-vgn content_lv: content-lvn logs_lv: logs-lvn backup_lv: backup-lvn tasks:n - name: Install LVM utilitiesn ansible.builtin.dnf:n name: lvm2n state: presentnn - name: Create physical volumen community.general.lvg:n vg: "{{ volume_group }}"n pvs: "{{ storage_device }}"n state: presentnn - name: Create logical volume for web contentn community.general.lvol:n vg: "{{ volume_group }}"n lv: "{{ content_lv }}"n size: 256mn state: presentnn - name: Create logical volume for logsn community.general.lvol:n vg: "{{ volume_group }}"n lv: "{{ logs_lv }}"n size: 256mn state: presentnn - name: Create logical volume for backupn community.general.lvol:n vg: "{{ volume_group }}"n lv: "{{ backup_lv }}"n size: 256mn state: presentnn - name: Create XFS filesystem on content volumen community.general.filesystem:n fstype: xfsn dev: "/dev/{{ volume_group }}/{{ content_lv }}"n force: nonn - name: Create XFS filesystem on logs volumen community.general.filesystem:n fstype: xfsn dev: "/dev/{{ volume_group }}/{{ logs_lv }}"n force: nonn - name: Create ext4 filesystem on backup volumen community.general.filesystem:n fstype: ext4n dev: "/dev/{{ volume_group }}/{{ backup_lv }}"n force: nonn - name: Create mount pointsn ansible.builtin.file:n path: "{{ item }}"n state: directoryn mode: "0755"n loop:n - /var/wwwn - /var/log/httpdn - /backupnn - name: Mount web content volumen ansible.posix.mount:n path: /var/wwwn src: "/dev/{{ volume_group }}/{{ content_lv }}"n fstype: xfsn opts: defaultsn state: mountednn - name: Mount logs volumen ansible.posix.mount:n path: /var/log/httpdn src: "/dev/{{ volume_group }}/{{ logs_lv }}"n fstype: xfsn opts: defaultsn state: mountednn - name: Mount backup volumen ansible.posix.mount:n path: /backupn src: "/dev/{{ volume_group }}/{{ backup_lv }}"n fstype: ext4n opts: defaultsn state: mountednn - name: Set appropriate ownership for web contentn ansible.builtin.file:n path: /var/wwwn owner: apachen group: apachen recurse: yesnn - name: Set appropriate ownership for httpd logsn ansible.builtin.file:n path: /var/log/httpdn owner: apachen group: apachen recurse: yesnn - name: Create html directory for web contentn ansible.builtin.file:n path: /var/www/htmln state: directoryn owner: apachen group: apachen mode: "0755"nn - name: Create sample web contentn ansible.builtin.copy:n content: |n nThis content is served from an LVM logical volume managed by Ansible.
nVolume Group: {{ volume_group }}
nLogical Volume: {{ content_lv }}
nFilesystem: XFS
n n n dest: /var/www/html/storage.htmln owner: apachen group: apachen mode: "0644"n ```nn5. **安装所需的 Ansible collection** 以进行 LVM 管理。nn ```bashn ansible-galaxy collection install community.generaln ```nn6. **执行存储管理 playbook**。nn ```bashn ansible-playbook -i inventory.ini storage.ymln ```nn 这将创建 LVM 结构、文件系统和挂载点。nn7. **创建一个 playbook 来收集和显示存储信息**。nn ```bashn nano get-storage.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Gather storage informationn hosts: webserversn become: truen tasks:n - name: Gather disk factsn ansible.builtin.setup:n gather_subset:n - hardwarenn - name: Display volume group informationn ansible.builtin.command:n cmd: vgdisplay apache-vgn register: vg_infon changed_when: falsenn - name: Display logical volume informationn ansible.builtin.command:n cmd: lvdisplay apache-vgn register: lv_infon changed_when: falsenn - name: Display filesystem informationn ansible.builtin.command:n cmd: df -h /var/www /var/log/httpd /backupn register: fs_infon changed_when: falsenn - name: Display mount informationn ansible.builtin.command:n cmd: cat /proc/mountsn register: mount_infon changed_when: falsenn - name: Show volume group detailsn ansible.builtin.debug:n var: vg_info.stdout_linesnn - name: Show logical volume detailsn ansible.builtin.debug:n var: lv_info.stdout_linesnn - name: Show filesystem usagen ansible.builtin.debug:n var: fs_info.stdout_linesnn - name: Show fstab entriesn ansible.builtin.command:n cmd: grep apache-vg /etc/fstabn register: fstab_entriesn changed_when: falsen failed_when: falsenn - name: Display fstab entriesn ansible.builtin.debug:n var: fstab_entries.stdout_linesn ```nn8. **执行存储信息收集 playbook**。nn ```bashn ansible-playbook -i inventory.ini get-storage.ymln ```nn 这将显示有关已创建存储结构的详细信息。nn9. **手动验证存储配置**。nn ```bashn ## 检查 LVM 结构n sudo vgs apache-vgn sudo lvs apache-vgn sudo pvs /dev/loop0n n ## 检查文件系统n df -h /var/www /var/log/httpd /backupn n ## 检查挂载点n mount | grep apache-vgn n ## 检查 fstab 条目n grep apache-vg /etc/fstabn n ## 测试 Web 内容n cat /var/www/html/storage.htmln ```nn10. **创建一个存储扩展 playbook** 来演示扩展操作。nn ```bashn nano expand_storage.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Expand storage volumesn hosts: webserversn become: truen vars:n volume_group: apache-vgn content_lv: content-lvn tasks:n - name: Extend content logical volumen community.general.lvol:n vg: "{{ volume_group }}"n lv: "{{ content_lv }}"n size: 400mn state: presentnn - name: Extend XFS filesystemn community.general.filesystem:n fstype: xfsn dev: "/dev/{{ volume_group }}/{{ content_lv }}"n resizefs: yesnn - name: Display updated filesystem sizen ansible.builtin.command:n cmd: df -h /var/wwwn register: new_sizen changed_when: falsenn - name: Show new filesystem sizen ansible.builtin.debug:n var: new_size.stdout_linesn ```nn11. **测试存储扩展**。nn ```bashn ## 在扩展前检查当前大小n df -h /var/wwwn n ## 运行扩展 playbookn ansible-playbook -i inventory.ini expand_storage.ymln n ## 验证扩展n df -h /var/wwwn sudo lvs apache-vg/content-lvn ```nn你已成功使用 Ansible 自动化了 LVM 存储管理,包括物理卷创建、逻辑卷管理、文件系统创建和挂载点配置。n","need_verify":true,"has_solution":false},{"position":5,"title":"自动化网络配置和信息收集","layout":"doc-workbench-split","text":"## 自动化网络配置和信息收集nn在最后一步中,你将学习如何使用 Ansible 自动化网络接口配置和收集全面的系统信息。这完成了从软件到存储再到网络的系统管理自动化的完整流程。nn你将使用诸如 `ansible.builtin.template` 用于网络配置文件,收集网络事实,以及创建全面的系统报告等模块。nn1. **导航到新的项目目录以进行网络管理。**nn ```bashn cd ~/projectn mkdir system-networkn cd system-networkn ```nn2. **创建本次实验的 inventory 文件**。nn ```bashn cat << EOF > inventory.inin [webservers]n localhost ansible_connection=localn EOFn ```nn3. **创建一个全面的网络和系统信息收集 playbook**。nn ```bashn nano network_info.ymln ```nn 添加以下内容:nn ```yamln ---n - name: Gather comprehensive system informationn hosts: webserversn become: truen tasks:n - name: Gather all system factsn ansible.builtin.setup:nn - name: Create system report directoryn ansible.builtin.file:n path: /tmp/system_reportsn state: directoryn mode: "0755"nn - name: Generate system information reportn ansible.builtin.template:n src: system_report.j2n dest: /tmp/system_reports/system_info_{{ ansible_facts['hostname'] }}.htmln mode: "0644"nn - name: Generate network configuration reportn ansible.builtin.template:n src: network_report.j2n dest: /tmp/system_reports/network_info_{{ ansible_facts['hostname'] }}.htmln mode: "0644"nn - name: Collect network interface informationn ansible.builtin.command:n cmd: ip addr shown register: ip_infon changed_when: falsenn - name: Collect routing informationn ansible.builtin.command:n cmd: ip route shown register: route_infon changed_when: falsenn - name: Collect DNS configurationn ansible.builtin.command:n cmd: cat /etc/resolv.confn register: dns_infon changed_when: falsenn - name: Display network summaryn ansible.builtin.debug:n msg: |n System: {{ ansible_facts['hostname'] }}n OS: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }}n Kernel: {{ ansible_facts['kernel'] }}n Default IPv4: {{ ansible_facts['default_ipv4']['address'] | default('N/A') }}n Default Interface: {{ ansible_facts['default_ipv4']['interface'] | default('N/A') }}n Total Memory: {{ ansible_facts['memtotal_mb'] }}MBn CPU Cores: {{ ansible_facts['processor_vcpus'] }}n ```nn4. **创建模板目录和文件以用于报告**。nn ```bashn mkdir templatesn nano templates/system_report.j2n ```nn 为系统报告模板添加以下内容:nn ```htmln n n n生成时间:{{ ansible_date_time.date }} {{ ansible_date_time.time }}
n| Property | nValue | n
|---|---|
| Hostname | n{{ ansible_facts['hostname'] }} | n
| FQDN | n{{ ansible_facts['fqdn'] }} | n
| Operating System | nn {{ ansible_facts['distribution'] }} {{n ansible_facts['distribution_version'] }}n | n
| Kernel | n{{ ansible_facts['kernel'] }} | n
| Architecture | n{{ ansible_facts['architecture'] }} | n
| CPU Cores | n{{ ansible_facts['processor_vcpus'] }} | n
| Total Memory | n{{ ansible_facts['memtotal_mb'] }}MB | n
| Uptime | n{{ ansible_facts['uptime_seconds'] }} seconds | n
| Mount Point | nFilesystem | nSize | nUsed | nA vailable | n
|---|---|---|---|---|
| {{ mount.mount }} | n{{ mount.fstype }} | nn {{ (mount.size_total / 1024 / 1024 / 1024) | round(2) }}GBn | nn {{ ((mount.size_total - mount.size_a vailable) / 1024 / 1024 /n 1024) | round(2) }}GBn | nn {{ (mount.size_a vailable / 1024 / 1024 / 1024) | round(2) }}GBn | n
| Service | nStatus | n
|---|---|
| httpd | nn {{ ansible_facts.services['httpd.service']['state'] |n default('not installed') }}n | n
| sshd | nn {{ ansible_facts.services['sshd.service']['state'] |n default('unknown') }}n | n
| NetworkManager | nn {{ ansible_facts.services['NetworkManager.service']['state'] |n default('unknown') }}n | n
Host: {{ ansible_facts['hostname'] }}
n生成时间:{{ ansible_date_time.date }} {{ ansible_date_time.time }}
n| Interface | nIPv4 Address | nIPv6 Address | nMAC Address | nStatus | n
|---|---|---|---|---|
| {{ interface_name }} | nn {{ interface_facts.get('ipv4', {}).get('address', 'N/A') }}n | nn {{ interface_facts.get('ipv6', [{}])[0].get('address', 'N/A') ifn interface_facts.get('ipv6') else 'N/A' }}n | n{{ interface_facts.get('macaddress', 'N/A') }} | nn {{ interface_facts.get('active', false) | ternary('Active',n 'Inactive') }}n | n
| Property | nValue | n
|---|---|
| Default IPv4 Address | nn {{ ansible_facts['default_ipv4']['address'] | default('N/A') }}n | n
| Default Interface | nn {{ ansible_facts['default_ipv4']['interface'] | default('N/A')n }}n | n
| Default Gateway | nn {{ ansible_facts['default_ipv4']['gateway'] | default('N/A') }}n | n
| DNS Servers | n
|---|
| {{ dns }} | n
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9