이전 글
우리는 이전 포스트에서 Ansible를 리눅스 서버에 설치해보았고 정상 동작함을 확인했다.
Ansible에서 /etc/ansible/hosts 경로에 여러 호스트를 등록할 수 있었고,
해당 호스트들에게 아직은 설명이 없지만 -m 옵션과 함께 ping 확인 진행했다.
이번 포스팅에선 Ansible의 기본 명령어에 관해 알아본다.
Ansible의 기본 명령어
- 실행 옵션
- -i (--inventory-file) -> 적용 될 호스트들에 관한 파일 정보
- -m (--module-name) -> 모듈 선택
- -k (--ask-pass) -> 관리자 암호 요청
- -K (--ask-become-pass) -> 관리자 권한 상승
- --list-hosts -> 적용되는 호스트 목록
-i 옵션은 /etc/ansible/hosts의 경로에 있는 파일을 참고하는 것이 아닌 호스트들의 정보가 등록된 파일을 직접 등록할 때 사용된다.
-m 옵션은 모듈을 선택할 때 사용하는 것으로, Ansible 사이트에 접속하게 되면 5000개 이상의 모듈이 등록되어 있다.
-k 옵션은 비밀번호 등을 지정할 때 사용하는 것인데 우리는 앞선 포스팅에서 살펴본것처럼 비대칭키 암호화 방식을 사용하기 때문에 사용하지 않는다.
설명에 앞서 Ansible은 멱등성의 성질을 갖는 특징이 있다.
이것을 간단하게 알아보자.
멱등성
멱등성은 같은 설정을 여러 번 적용하여도 결과가 달라지지 않는 성질을 말한다.
즉, Ansible에서 같은 명령어를 사용하면 여러 번 적용되어도 한번만 적용이 된다는 것이다.
- COPY를 여러번 하든, 텍스트를 여러번 복사하든 똑같이 적용된다는 것이다.
- 예시) POST는 멱등성 X, GET은 멱등성 O
[HTTP] GET, POST, PUT, PATCH에 대해 알아보자
우선, HTTP Method는 REST API와 아주 관련이 깊다. 간단하게 REST API는 HTTP URI로 리소스를 명시하고 HTTP Method를 이용해 해당 리소스에 관한 CRUD 오퍼레이션을 적용하여 클라이언트/서버 사이의 요청과
hdbstn3055.tistory.com
만약, foo라는 파일이 있고 거기에 아래 명령어를 여러번 반복해보자.
echo "HI" >> foo
echo "HI" >> foo
그리고 cat 명령어로 확인을 해보면 아래 사진처럼 나오게 된다.
즉, 멱등하지 않다라고 생각할 수 있다.
그렇다면 위와 비슷한 작업을 Ansible로 하게 되면 어떻게 될까?
foo_dir이라는 디렉토리를 생성한 뒤 Ansible 명령어를 활용하여 해당 경로로 foo 파일을 복사했다.
그 후, 동일한 작업을 했을 때 복사가 또 이루어지지 않았다. 즉, 멱등하다고 할 수 있다.
이처럼, Ansible은 멱등성을 갖기에 혹시 모를 개발자의 실수를 조금이나마 방지할 수 있다.
동시에 불필요한 실행을 하지 않을 수 있다.
Ansible이 제공하는 여러 모듈의 사용
ping
yum
shell
위의 모듈뿐 아니라 Ansible은 AWS와 호환되는 모듈들 굉장히 많은 모듈을 갖고 있다고 한다.
더욱 모듈에 관해 궁금하다면 위에 첨부한 링크에 접속해보도록 하자.
Ansible이 제공하는 작업 결과 종류
Ansible은 아래와 같은 작업 결과를 내놓는다.
- ok: 작업이 성공적으로 완료되었습니다.
- changed: 작업이 성공적으로 완료되었고, 시스템의 상태가 변경되었습니다.
- failed: 작업이 실패했습니다.
- skipped: 작업이 건너뛰어졌습니다.
- unreachable: 호스트에 도달할 수 없습니다.
unreachable에서 말하는 호스트는 말 그대로 Ansible이 관리하는 호스트들을 말한다.
정리
이번 포스팅으로 아주 간단한 Ansible 제공 모듈에 관해 알아보았다.
Ansible은 IaC로써 이보다 모듈을 적절히 활용하면 훨씬 많은 작업들이 가능하다.
우리는 위에서 Ansbile에서의 모듈 사용에 관해 -m 옵션을 통해 직접 스크립트로 작성을 해주었다.
하지만, 실제로는 Ansible에서 제공하는 playbook를 훨씬 더 많이 사용한다.
그와 관련해서는 다음 포스팅에서 다룬다.
참고
'Infra > Jenkins' 카테고리의 다른 글
[Jenkins] Jenkins + Ansible 연동하기 (0) | 2024.07.31 |
---|---|
[Jenkins] Ansible Playbook 사용 (0) | 2024.07.30 |
[Jenkins] Docker 컨테이너로 Ansible 실행하기 (0) | 2024.07.21 |
[Jenkins] IaC와 Ansible이란? (0) | 2024.07.20 |
[부록] SSH, Docker가 설치된 도커 이미지 구성 (0) | 2024.07.17 |