본문 바로가기
IaC/Ansible

Implement Task Control

by yutju 2026. 8. 30.

 

ansible-playbook ymlfile.yml --start-at-task 'Task name'

ansible-playbook http.yml --start-at-task 'Install telnet'

 

  • ansible-playbook: Ansible 플레이북을 실행하는 기본 명령어입니다. 
  • yamlfile.yml / http.yml: 실행할 Ansible 플레이북 파일 이름입니다.
  • --start-at-task '태스크 이름': 플레이북의 처음부터 실행하지 않고, 지정한 태스크 이름부터 그 이후의 태스크들만 순차적으로 실행하도록 하는 옵션입니다.

예시 설명

  • 첫 번째 줄: yamlfile.yml 파일 내에서 이름이 'Task name'인 태스크부터 찾아서 실행을 시작합니다.
  • 두 번째 줄: http.yml 파일 내에서 이름이  Install telnet인 태스크부터 찾아서 그 이후 작업들을 실행합니다.

 

 

install httpd 를 건너 뛰고  start httpd부터 시작 

 

 

자주 사용하는 Ansible 기본 명령어 모음

1. 플레이북 실행 (ansible-playbook)

  • 기본 실행: ansible-playbook -i hosts.ini site.yml
  • 특정 태스크부터 실행: ansible-playbook site.yml --start-at-task "Task Name"
  • 태스크 단위 구동(Step-by-step confirmation): ansible-playbook site.yml --step
  • 문법 검사: ansible-playbook --syntax-check site.yml
  • 드라이 런 (미리보기/테스트): ansible-playbook -C site.yml
  • 특정 태그만 실행: ansible-playbook site.yml --tags "nginx"

2. 애드혹(Ad-hoc) 단발성 명령어 (ansible)

  • 전체 호스트 핑 테스트: ansible all -m ping -i hosts.ini
  • 특정 그룹 호스트 명령어 실행: ansible webservers -a "uptime"
  • 관리자(root) 권한으로 패키지 설치: ansible webservers -b -m apt -a "name=nginx state=present"

3. 비밀번호/변수 암호화 (ansible-vault)

  • 파일 암호화 생성: ansible-vault create vault.yml
  • 기존 파일 암호화: ansible-vault encrypt secret.yml
  • 암호화된 파일 복호화: ansible-vault decrypt secret.yml
  • 암호화된 플레이북 실행: ansible-playbook site.yml --ask-vault-pass

4. 호스트 정보 확인 (ansible-facts)

  • 서버 상세 정보 조회: ansible webservers -m setup

 

 

 

Ansible 애드혹(Ad-hoc) 주요 모듈별 명령어 모음

애드혹 커맨드는 플레이북 작성 없이 ansible <대상> -m <모듈명> -a "<파라미터>" 구조로 단발성 작업을 즉시 실행할 때 사용합니다. (*-b 옵션은 root 권한 실행/become)

1. 시스템 및 서비스 관리

  • 핑 테스트 (연결 확인): ansible all -m ping
  • 서버 리소스/업타임 확인: ansible all -a "uptime"
  • 서버 재부팅: ansible webservers -b -m reboot
  • 서비스 시작/재시작/중지: ansible webservers -b -m service -a "name=nginx state=restarted"
  • 서비스 부팅 시 자동 시작 설정: ansible webservers -b -m service -a "name=nginx enabled=yes"

2. 파일 및 디렉터리 관리

  • 파일 복사 (로컬 → 원격): ansible webservers -b -m copy -a "src=/local/path/file.conf dest=/etc/file.conf owner=root group=root mode=0644"
  • 원격 파일 삭제: ansible webservers -b -m file -a "path=/tmp/testfile state=absent"
  • 디렉터리 생성: ansible webservers -b -m file -a "path=/var/www/html state=directory mode=0755"
  • 파일 다운로드 (원격 → 로컬): ansible webservers -m fetch -a "src=/var/log/syslog dest=/tmp/logs/"

3. 패키지 관리 (OS별)

  • Debian/Ubuntu (apt): ansible webservers -b -m apt -a "name=git state=present update_cache=yes"
  • RHEL/CentOS/Rocky (yum/dnf): ansible dbservers -b -m dnf -a "name=mariadb-server state=present"
  • 패키지 최신 버전 업데이트: ansible all -b -m apt -a "name=curl state=latest"
  • 패키지 삭제: ansible all -b -m apt -a "name=telnet state=absent"

4. 사용자 및 그룹 관리

  • 사용자 계정 생성: ansible all -b -m user -a "name=developer shell=/bin/bash groups=docker"
  • 사용자 계정 삭제: ansible all -b -m user -a "name=developer state=absent remove=yes"

5. 팩트(System Facts) 및 정보 수집

  • 전체 시스템 정보 조회: ansible webservers -m setup
  • 특정 정보만 필터링 조회 (예: IP 주소): ansible webservers -m setup -a "filter=ansible_default_ipv4"

6. 명령어 직접 실행 (Shell & Command)

  • 단순 파이프라인/환경변수 미사용 명령어: ansible all -m command -a "hostname"
  • 파이프(|), 리다이렉션(>), 변수 포함 명령어: ansible all -m shell -a "cat /etc/os-release | grep PRETTY_NAME"

 

adhoc1 파일 생성됨 

 

 

state=absent로 파일 삭제 

 

 

copy 모듈 사용 

 

 

원격 클라이언트에 adhoc2가 생성됨 

 

 

 

 

 

yum 모듈로 telnet 설치 

 

 

httpd-manual 설치  

 

httpd 시작 

 

 

클라이언트 노드에서 가동됨 

 

하지만 여길보면 disabled 되어 있는데 

 

enabled=yes 옵션을 사용 

 

 

 

이 명령어로  원격 클라이언트의 httpd 서비스 상태를 확인 가능함 

 

 

 

httpd 삭제 

삭제 됨 

 

이 명령어로도 삭제 가능 

 

 

 

 

 

 

user 모듈로 사용자 생성 가능 

 

 

id 사용자명   명령어로 유저 확인 가능 

 

 

 

present=absent로 사용자 삭제 

 

이걸로도 가능 

 

 

 

 

 

 

 

 

리부트하기 떄문에 해당 빨간색 오류 메세지는 정상적인거임 

 

 

핸들러

 

 

  • Open port for http: HTTP 방화벽 포트를 개방하는 태스크입니다.
  • firewalld:: RedHat 계열 Linux의 firewalld 방화벽 규칙을 설정하는 모듈입니다.
  • service: http: 특정 포트 번호(80) 대신 http라는 서비스 이름을 통해 관련 포트를 지정합니다.
  • permanent: true: 서버를 재부팅해도 방화벽 설정이 유지되도록 영구 설정(--permanent)합니다.
  • state: enabled: 해당 서비스 접근을 허용(개방)합니다.
  • notify:: 이 태스크로 인해 설정 변경(changed)이 일어났을 때만, 하단의 Reload firewalld라는 Handler(핸들러)를 호출합니다.

 

  • handlers:: notify에 의해 요청을 받았을 때만 Playbook 맨 마지막에 실행되는 조건부 태스크 구역입니다.
  • Reload firewalld: firewalld 서비스 상태를 reloaded 하여 새로 추가한 영구 규칙(permanent: true)을 실제 운영 환경에 즉시 적용합니다.

 

 

 

  • tasks:: 실행할 개별 작업 목록의 시작입니다.
  • apt:: Debian/Ubuntu 계열의 패키지 관리 모듈입니다.
  • name: apache2 / state: present: apache2 패키지가 설치되어 있는 상태(present)로 만듭니다. (미설치 시 새로 설치)
  • when: ansible_os_family == "Ubuntu": [조건문] 자동 수집된 시스템 정보(ansible_os_family)가 "Ubuntu"일 때만 이 태스크를 실행합니다.

 

  • yum:: RedHat/CentOS 계열의 패키지 관리 모듈입니다.
  • name: httpd / state: present: httpd 패키지가 설치되어 있는 상태로 만듭니다.
  • when: ansible_os_family == "RedHat": [조건문] OS 계열이 "RedHat"(CentOS, RHEL, Rocky Linux 등)일 때만 이 태스크를 실행합니다.

 

 

 

 

 

 

 

 

 

  • tasks:: 실행할 작업 목록의 시작입니다.
  • user:: Linux 시스템의 사용자 계정을 생성 및 관리하는 모듈입니다.
  • name: "{{ item }}": 아래 loop에 정의된 목록의 값들이 하나씩 {{ item }} 변수에 대입되어 실행됩니다.

 

    • loop:: Ansible의 반복문 키워드입니다.
    • 하위에 작성된 배열(리스트) 항목들을 순서대로 차례차례 꺼내어 상단의 user 모듈을 3번 순환 실행합니다.
      1. item = jerry 계정 생성
      2. item = kramer 계정 생성
      3. item = eliane 계정 생성

 

 

cat /etc/passwd 로  유저 생성된거 확인 가능 

 

 

 

 

 

 

  • vars:: 플레이북 내부에서 사용할 변수를 정의하는 구역입니다.
  • users:: jerry, kramer, eliane 3개의 문자열 요소가 담긴 리스트(List) 형태의 변수를 선언합니다.

 

  • tasks:: 실행할 개별 작업 목록의 시작입니다.
  • user:: Linux 시스템 계정을 생성/관리하는 모듈입니다.
  • name: "{{ item }}": 반복문(with_items)을 통해 전달받은 현재 순서의 값이 {{ item }}에 들어갑니다.

with_items:: Ansible의 반복문 키워드로, 뒤에 지정한 변수("{{ users }}")의 배열 요소를 하나씩 꺼내어 상단의 user 모듈을 순환 실행합니다.

  1. item = jerry 계정 생성
  2. item = kramer 계정 생성
  3. item = eliane 계정 생성

 

 

유저가 생성된걸 확인할 수 있음 

 

 

 

 

 

 

  • vars:: 플레이북 내에서 사용할 변수 구역입니다.
  • packages:: ftp, telnet, htop 3개의 패키지명이 담긴 리스트(List) 형태의 변수를 선언합니다.

 

 

  • tasks:: 실행할 작업 목록의 시작입니다.
  • yum:: RedHat/CentOS 계열 Linux의 RPM 패키지를 설치/관리하는 모듈입니다.
  • name: '{{item}}': 반복문에서 전달받은 현재 순서의 패키지 이름이 {{item}}에 대입됩니다.
  • state: present: 패키지가 시스템에 설치되어 있는 상태를 유지합니다. (미설치 상태라면 새로 설치)

 

 

  • with_items:: Ansible의 반복문 키워드입니다.
  • packages 리스트의 요소를 하나씩 꺼내어 상단의 yum 모듈을 순환 실행합니다.
    1. item = ftp 설치
    2. item = telnet 설치
    3. item = htop 설치

 

설치 확인 

 

 

  • vars:: 플레이북 내부 변수를 정의하는 구역입니다.
  • packages:: ftp, telnet, htop 3개 항목이 들어있는 리스트(배열) 변수를 선언합니다.
  • tasks:: 실행할 작업 목록의 시작입니다.
  • yum:: RedHat/CentOS 계열의 패키지 관리 모듈입니다.
  • name: '{{packages}}': 리스트 변수 전체를 Yum 모듈의 인자로 직접 전달합니다. Yum 트랜잭션이 한 번만 호출되어 패키지들이 동시에 일괄 설치됩니다.
  • state: present: 지정한 패키지들이 시스템에 설치된 상태(present)를 유지하도록 합니다.