DevOps/👾IaC

[IaC/ansible 기초] ansible ad-hoc이란

키깡 2024. 5. 15.
728x90

Ansible Ad Hoc 명령의 이해와 활용

Ansible은 관리 노드에서 단일 작업을 자동화하는 강력한 도구이다.

특히 Ansible Ad Hoc 명령은 빠르고 간편하게 사용할 수 있지만, 재사용은 불가능하다. Ad Hoc 명령을 배우는 이유는 Ansible의 단순성과 강력함을 먼저 경험할 수 있고, 여기서 배운 개념을 쉽게 Playbook으로 이식할 수 있기 때문이다.

Ad Hoc 명령의 장점

Ad Hoc 명령은 거의 반복되지 않는 작업에 유용하다.

예를 들어, 모든 컴퓨터의 전원을 끄기 위해 Playbook을 작성할 필요 없이 간단한 한 줄 명령어로 해결할 수 있다.

Ad Hoc 명령의 기본 형식

ansible [pattern] -m [module] -a "[module options]"

이 명령어에서 patternmodule에 대해서는 Ansible 문서를 참고하면 된다.

Ad Hoc 명령 작업의 사용 사례

Playbook과 같이 Ad Hoc 작업도 선언적 모델을 사용하여 지정된 최종 상태에 도달하는 데 필요한 작업을 계산하고 실행한다. 현재 상태가 지정된 최종 상태와 다르지 않다면 아무것도 하지 않고 시작 전에 현재 상태를 점검하여 멱등성을 제공한다.

서버 리부팅

Ansible CLI 유틸리티의 기본 모듈은 ansible.builtin.command 모듈이다. Ad Hoc 작업을 사용하여 명령 모듈을 호출하고 atlanta 그룹의 모든 웹 서버를 한 번에 재부팅할 수 있다. 이를 위해서는 인벤토리의 [atlanta]라는 그룹에 모든 서버를 나열하고, 해당 그룹에 포함된 시스템에 접속 가능한 SSH 자격 증명이 있어야 한다. atlanta 그룹의 모든 서버를 재부팅하려면 다음 명령을 사용한다.

ansible atlanta -a "/sbin/reboot"

기본적으로 Ansible은 한 번에 5개의 프로세스만 작동한다. 동시 작업 수가 5개를 넘어가면 다음 명령어로 동시 프로세스 수를 늘릴 수 있다.

ansible atlanta -a "/sbin/reboot" -f 10

다른 사용자로 연결하려면 -u 플래그를 사용한다.
ansible atlanta -a "/sbin/reboot" -f 10 -u username

권한이 필요한 경우 become 키워드를 사용하여 root 사용자로 명령을 실행할 수 있다.

ansible atlanta -a "/sbin/reboot" -f 10 -u username --become [--ask-become-pass]

파일 관리

Ad Hoc 명령은 Ansible 및 SCP의 기능을 활용하여 여러 파일을 여러 시스템에 병렬로 전송할 수 있다. 예를 들어, [atlanta] 그룹의 모든 서버로 파일을 전송하려면 다음 커맨드를 사용한다.

ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"

ansible.builtin.file 모듈을 사용하면 파일의 소유권 및 권한을 변경할 수 있다.

ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600"
ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"

file 모듈은 mkdir -p와 비슷하게 디렉토리를 만들 수 있다.

ansible webservers -m ansible.builtin.file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"

디렉토리 및 파일 삭제는 다음과 같이 한다.

ansible webservers -m ansible.builtin.file -a "dest=/path/to/c state=absent"

패키지 관리

Ad Hoc 명령을 사용하여 yum과 같은 패키지 관리 모듈을 통해 Managed Node에 패키지를 설치, 업데이트 또는 삭제할 수 있다. 패키지를 설치하려면 다음 명령을 입력한다.

ansible webservers -m ansible.builtin.yum -a "name=httpd state=installed"

패키지를 삭제하려면 다음 명령을 입력한다.

ansible webservers -m ansible.builtin.yum -a "name=acme state=absent"

특정 버전의 패키지를 설치하려면 다음 명령을 사용한다.

ansible webservers -m ansible.builtin.yum -a "name=acme-1.5 state=present"

최신 버전의 패키지를 설치하려면 다음 명령을 사용한다.

ansible webservers -m ansible.builtin.yum -a "name=acme state=latest"

사용자와 그룹 관리

Ad Hoc 명령으로 Managed Node에서 사용자 계정을 생성, 관리 및 제거할 수 있다.

사용자 생성

ansible all -m ansible.builtin.user -a "name=foo password=<crypted password here>"

사용자 삭제

ansible all -m ansible.builtin.user -a "name=foo state=absent"

서비스 관리

모든 웹서버에 서비스가 시작되었는지 확인하려면 다음 명령을 사용한다.
ansible webservers -m ansible.builtin.service -a "name=httpd state=started"

서비스를 재시작하려면 staterestarted로 변경하면 된다.

ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted"

서비스를 중지하려면 statestopped로 변경한다.

ansible webservers -m ansible.builtin.service -a "name=httpd state=stopped"

Facts 수집

Facts는 시스템에서 발견된 변수를 나타낸다. Facts를 사용하여 작업의 조건부 실행을 구현할 수 있을 뿐만 아니라 시스템에 대한 임시 정보도 얻을 수 있다.

ansible all -m ansible.builtin.setup

댓글