사용자, 파일 및 예약된 작업 자동화

AnsibleBeginner
지금 연습하기

소개

사용자 및 예약된 작업 자동화는 운영 플레이북에서 흔히 사용되는 작업입니다. Ansible 을 사용하면 계정을 생성하고, 파일 소유권을 관리하며, 크론 (cron) 항목을 안전하게 설치할 수 있습니다.

이 실습에서는 임시 서비스 사용자를 생성하고, 보고서 디렉토리 및 파일을 관리하며, 해당 사용자를 위한 크론 작업을 설치하는 방법을 배웁니다.

사용자 자동화 프로젝트 생성

이 단계에서는 rhce_ops라는 일회용 서비스 사용자를 관리하기 위한 프로젝트를 생성합니다.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

설정 과정에서 기존의 rhce_ops 계정이 삭제되었으므로, 첫 번째 플레이북 실행 시 전체 생성 과정이 표시됩니다. 이 계정은 일회용이며 LabEx 의 labex 사용자와는 별개입니다.

계정 및 일정 변수 정의

이 단계에서는 서비스 계정, 보고서 디렉토리 및 크론 일정에 대한 변수를 정의합니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오. 이렇게 하면 LabEx 가 각 단계를 별도로 실행하더라도 명령이 안정적으로 유지됩니다.

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
ops_user: rhce_ops
ops_comment: RHCE automation operator
ops_report_dir: /home/rhce_ops/reports
cron_minute: '*/15'
EOF

이 변수들은 계정 및 일정 정책을 설명합니다. YAML 에서 *를 특수 문자로 처리할 수 있기 때문에 */15를 따옴표로 묶어 크론 문자열로 유지되도록 했습니다.

cat inventory/group_vars/managed.yml

사용자 및 파일 플레이북 작성

이 단계에서는 사용자를 생성하고, 소유권이 있는 디렉토리를 만들며, 관리되는 파일을 작성하고, 크론 항목을 설치하는 플레이북을 작성합니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오.

cd /home/labex/project/rhce-ansible
cat > playbooks/users-files-cron.yml <<'EOF'
---
- name: Manage user files and scheduled task
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure operations user exists
      ansible.builtin.user:
        name: "{{ ops_user }}"
        comment: "{{ ops_comment }}"
        shell: /bin/bash
        state: present

    - name: Ensure report directory exists
      ansible.builtin.file:
        path: "{{ ops_report_dir }}"
        state: directory
        owner: "{{ ops_user }}"
        group: "{{ ops_user }}"
        mode: '0750'

    - name: Install managed report file
      ansible.builtin.copy:
        dest: "{{ ops_report_dir }}/status.txt"
        content: |
          managed_by=ansible
        owner: "{{ ops_user }}"
        group: "{{ ops_user }}"
        mode: '0640'

    - name: Install heartbeat cron job
      ansible.builtin.cron:
        name: RHCE heartbeat
        user: "{{ ops_user }}"
        minute: "{{ cron_minute }}"
        job: "/usr/bin/date >> {{ ops_report_dir }}/heartbeat.log"
EOF

각 작업은 서로 의존적입니다. 사용자가 존재해야 소유권을 할당할 수 있고, 상태 파일을 작성하기 전에 보고서 디렉토리가 존재해야 하며, 크론 작업은 해당 사용자의 권한으로 실행됩니다.

ansible-playbook playbooks/users-files-cron.yml --syntax-check

사용자 자동화 플레이북 실행

이 단계에서는 플레이북을 실행하고 계정, 파일 소유권 및 크론 항목을 확인합니다.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-run.txt

첫 번째 실행 시 사용자, 디렉토리, 상태 파일 및 크론 항목이 생성되어야 합니다. 출력을 저장하면 계정 변경 사항과 파일 및 크론 변경 사항을 구분하는 데 도움이 됩니다.

id rhce_ops

id 명령은 계정이 존재하며 숫자 형태의 사용자 및 그룹 ID 를 가지고 있음을 확인해 줍니다.

sudo ls -ld /home/rhce_ops/reports && sudo ls -l /home/rhce_ops/reports/status.txt

디렉토리와 파일은 rhce_ops가 소유해야 합니다. 상태 파일은 0640 모드를 사용하여 소유자에게는 읽기/쓰기 권한을, 그룹에는 읽기 권한을 부여해야 합니다.

sudo crontab -u rhce_ops -l

크론탭에는 명명된 heartbeat 항목과 heartbeat.log에 날짜를 추가하는 명령이 포함되어 있어야 합니다.

플레이북의 멱등성 확인

이 단계에서는 플레이북을 다시 실행합니다. 계정, 파일 및 크론 항목이 이미 원하는 상태와 일치하므로 변경 사항이 없어야 합니다.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-second.txt

두 번째 실행에서는 계정, 파일 상태 및 크론탭이 이미 변수 및 작업과 일치하므로 changed=0으로 보고되어야 합니다.

grep -E 'host.*changed=0' reports/users-files-cron-second.txt

요약

일회용 사용자, 소유 파일, 권한 및 크론 작업을 자동화하고 플레이북이 멱등성을 갖추었음을 확인했습니다.