Ansible yum module ใช้จัดการ packages บนระบบ CentOS/RHEL/Fedora แทนการรัน yum หรือ dnf command โดยตรง มีโครงสร้างคล้ายกับ apt module แต่ปรับให้เหมาะกับ RPM-based distributions และ yum repositories
บทความนี้อธิบายการใช้ yum module ตั้งแต่ติดตั้ง/ลบ package, อัพเดทระบบ, จัดการ yum repository, ไปจนถึงการใช้ dnf module สำหรับ RHEL 8/9 และ Fedora ที่เปลี่ยนมาใช้ dnf
ติดตั้งและลบ Package พื้นฐาน
การใช้ yum module มีโครงสร้างเหมือนกับ apt ใช้ name และ state เป็น parameters หลัก
---
- name: Manage packages with yum
hosts: redhat_servers
become: true
tasks:
- name: Install httpd
yum:
name: httpd
state: present
- name: Install specific version
yum:
name: httpd-2.4.37-47.module_el8.6.0
state: present
- name: Remove package
yum:
name: postfix
state: absent
- name: Install latest version
yum:
name: nginx
state: latest # ติดตั้งหรืออัพเดทเป็น version ล่าสุด
ติดตั้งหลาย Package พร้อมกัน
เช่นเดียวกับ apt สามารถส่ง list ของ packages ใน name parameter ได้ yum รัน transaction เดียวสำหรับทุก packages
---
- name: Install LAMP stack
hosts: webservers
become: true
tasks:
- name: Install web server packages
yum:
name:
- httpd
- php
- php-mysqlnd
- php-fpm
- mariadb-server
state: present
- name: Install development tools
yum:
name:
- gcc
- make
- git
- curl
- wget
- vim
state: present
- name: Remove unwanted packages
yum:
name:
- sendmail
- telnet
state: absent
อัพเดท Packages
state: latest อัพเดท package เดียว ส่วนการอัพเดทระบบทั้งหมดใช้ name: '*' เพื่อ upgrade ทุก packages
---
- name: Update system
hosts: all
become: true
tasks:
- name: Update all packages
yum:
name: '*'
state: latest
- name: Update security packages only
yum:
name: '*'
state: latest
security: yes # เฉพาะ security updates
- name: Update specific package
yum:
name: openssl
state: latest
- name: Update from a specific advisory
yum:
name: '*'
state: latest
bugfix: yes # รวม bugfix updates
จัดการ YUM Repository
module yum_repository เพิ่มหรือลบ repository จาก /etc/yum.repos.d/ ใช้แทนการเขียน .repo file ด้วย template
---
- name: Add repositories
hosts: all
become: true
tasks:
- name: Add EPEL repository
yum_repository:
name: epel
description: EPEL YUM repo
baseurl: https://dl.fedoraproject.org/pub/epel/$releasever/$basearch/
gpgcheck: yes
gpgkey: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever
enabled: yes
- name: Add nginx official repository
yum_repository:
name: nginx-stable
description: nginx stable repo
baseurl: http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck: yes
gpgkey: https://nginx.org/keys/nginx_signing.key
enabled: yes
- name: Disable repository
yum_repository:
name: epel
state: present
enabled: no
ติดตั้ง RPM จาก URL หรือไฟล์
yum module รองรับการติดตั้ง RPM โดยตรงจาก URL หรือ local file ไม่ต้องเพิ่ม repository ก่อน เหมาะสำหรับ package ที่ไม่อยู่ใน repo
---
- name: Install packages from RPM
hosts: all
become: true
tasks:
- name: Install EPEL release from URL
yum:
name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
state: present
- name: Install local RPM file
yum:
name: /tmp/mypackage-1.0.rpm
state: present
- name: Install package group
yum:
name: "@Development Tools"
state: present
dnf Module สำหรับ RHEL 8/9 และ Fedora
RHEL 8+ และ Fedora ใช้ dnf แทน yum Ansible มี dnf module ที่ใช้งานเหมือนกัน แต่รองรับ features ใหม่ของ dnf
---
- name: Use dnf module on RHEL 8+
hosts: rhel8_servers
become: true
tasks:
- name: Install packages with dnf
dnf:
name:
- nginx
- python3
- python3-pip
state: present
- name: Update all packages
dnf:
name: '*'
state: latest
- name: Install module stream
dnf:
name: "@nginx:1.18/common" # dnf module stream
state: present
- name: Enable dnf module
dnf:
name: "@python38"
state: present
ตรวจสอบ OS แล้วเลือก Module อัตโนมัติ
ใน Playbook ที่ต้องรองรับทั้ง Debian และ RHEL ใช้ package module ที่เป็น generic package manager หรือใช้ when condition ตาม ansible_os_family
---
- name: Cross-platform package management
hosts: all
become: true
tasks:
# วิธีที่ 1: ใช้ package module (generic)
- name: Install curl (any OS)
package:
name: curl
state: present
# วิธีที่ 2: แยก task ตาม OS family
- name: Install nginx on Debian/Ubuntu
apt:
name: nginx
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Install nginx on RedHat/CentOS
yum:
name: nginx
state: present
when: ansible_os_family == "RedHat"
# วิธีที่ 3: ใช้ include_tasks แยกไฟล์ตาม OS
- name: Include OS-specific tasks
include_tasks: "{{ ansible_os_family | lower }}_packages.yml"
Pattern: CentOS Server Provisioning
ตัวอย่าง Playbook สำหรับ provision CentOS/RHEL server รวม repository setup, package install, และ service configuration
---
- name: Provision CentOS Web Server
hosts: centos_servers
become: true
vars:
base_packages:
- epel-release
- vim
- curl
- wget
- git
- htop
web_packages:
- nginx
- certbot
- python3-certbot-nginx
tasks:
- name: Update all packages
yum:
name: '*'
state: latest
security: yes
- name: Install base packages
yum:
name: "{{ base_packages }}"
state: present
- name: Install web packages
yum:
name: "{{ web_packages }}"
state: present
- name: Start and enable firewalld
service:
name: firewalld
state: started
enabled: yes
- name: Allow HTTP and HTTPS
firewalld:
service: "{{ item }}"
permanent: yes
state: enabled
immediate: yes
loop:
- http
- https
- name: Start nginx
service:
name: nginx
state: started
enabled: yes
สรุป
yum module เป็นเครื่องมือหลักสำหรับจัดการ packages บน RHEL/CentOS ใน Ansible โดยมีโครงสร้างคล้ายกับ apt แต่มี parameters เพิ่มเช่น security: yes และ bugfix: yes สำหรับ targeted updates
สำหรับ RHEL 8/9 และ Fedora ให้ใช้ dnf module แทน yum เพราะรองรับ module streams และ features ใหม่ของ dnf ถ้าต้องการ Playbook รองรับหลาย OS ใช้ package module (generic) หรือแยก task ด้วย ansible_os_family fact

